NANO130_H2Press/User/uart_BDModule.h

224 lines
5.5 KiB
C
Raw Normal View History

2025-04-10 14:54:41 +08:00
/*
*********************************************************************************************************
* IAR Development Kits
* on the
*
* Nano100
*
* Filename : uart_BDModule.h
* Version : V1.00
* Programmer(s) : Qian Xianghong
*********************************************************************************************************
*/
#ifndef USER_UART_BDMODULE_PRESENT
#define USER_UART_BDMODULE_PRESENT
extern const uint8_t BD_APP;
extern const uint8_t BD_PROTOCOL_VER;
// <20><>ʼ<EFBFBD><CABC>
void BD_Init();
void BD_Open();
// ģ<><C4A3><EFBFBD>ϵ磬<CFB5><E7A3AC><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BD_PowerOn();
void BD_PowerOff();
#define BD_RF_MIN_FRAME_LEN (18)
#define BD_RF_MAX_FRAME_LEN (78) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define BD_RF_MIN_PAYLOAD_LEN (0)
#define BD_RF_MAX_PAYLOAD_LEN (BD_RF_MAX_FRAME_LEN - BD_RF_MIN_FRAME_LEN)
#define RF_PROTOCOL_VER_2 (2)
#define BD_FRAME_SOF ('$')
#define BD_XTZJ ("XTZJ")
#define BD_ZJXX ("ZJXX")
#define BD_TXSQ ("TXSQ")
#define BD_FKXX ("FKXX")
#define BD_TXXX ("TXXX")
#define BD_MIN_FRAME_LEN (11)
#define BD_MAX_FRAME_LEN (230) // ͨ<><CDA8><EFBFBD><EFBFBD>Ϣ֡<CFA2><D6A1><EFBFBD>󳤶<EFBFBD>
#define BD_MIN_PAYLOAD_LEN (0)
#define BD_MAX_PAYLOAD_LEN (BD_MAX_FRAME_LEN - BD_MIN_FRAME_LEN)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>״̬
extern uint8_t BD_initStatus;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#pragma anon_unions
#pragma pack(push, 1)
// <20><><EFBFBD><EFBFBD>ϵͳ<CFB5>Լ<EFBFBD>֡
typedef struct
{
uint16_t frequency; // <20>Լ<EFBFBD>Ƶ<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EBA3A9>0-<2D><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>
} bd_xtzj_t;
// <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>Ϣ֡
typedef struct
{
union
{
struct
{
unsigned icType : 1; // 0-<2D><><EFBFBD><EFBFBD>ģ<EFBFBD>飬1-<2D><><EFBFBD>ܿ<EFBFBD>
unsigned cardErr : 1; // 0-<2D><><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D><><EFBFBD>ܿ<EFBFBD><DCBF>
unsigned idErr : 1; // 0-ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-ID<49><44><EFBFBD>
unsigned chkErr : 1; // 0-У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-У<><D0A3><EFBFBD>
unsigned snErr : 1; // 0-<2D><><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D><><EFBFBD>к<EFBFBD><D0BA>
unsigned adminCard : 1; // 0-<2D>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned dataErr : 1; // 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D><><EFBFBD><EFBFBD><EFBFBD>
unsigned phyErr : 1; // 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D><><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1>
};
uint8_t icStatus; // <20><><EFBFBD>ܿ<EFBFBD>״̬
};
union
{
struct
{
unsigned antennaErr : 1; // 0-<2D><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D>
unsigned channelErr : 1; // 0-ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D>
unsigned boardErr : 1; // 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D>
unsigned : 5;
};
uint8_t hardStatus; // Ӳ<><D3B2>״̬
};
uint8_t batPct; // <20><><EFBFBD><EFBFBD><EFBFBD>ٷֱ<D9B7>
union
{
struct
{
unsigned suppress : 1; // 0-<2D><><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>1-<2D><><EFBFBD><EFBFBD>
unsigned notSilence : 1; // 0-<2D><>Ĭ<EFBFBD><C4AC>1-<2D><><EFBFBD><EFBFBD>
unsigned : 6;
};
uint8_t inStatus; // <20><>վ״̬
};
uint8_t power[6]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} bd_zjxx_t;
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
typedef struct
{
union
{
struct
{
unsigned tx : 3; // 010-<2D><><EFBFBD><EFBFBD>ͨ<EFBFBD>ţ<EFBFBD>011-<2D><>ѯͨ<D1AF><CDA8>
unsigned key : 1; // <20><>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD>0
unsigned type : 2; // 00-<2D>ؿ죬01-<2D><>ͨ
unsigned code : 1; // 0-<2D><><EFBFBD>֣<EFBFBD>1-<2D><><EFBFBD><EFBFBD>
unsigned identity : 1; // 0-ͨ<>ţ<EFBFBD>1-<2D><><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>
};
uint8_t xxlb; // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
};
uint8_t dstAddr[3]; // <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD>ַ
uint16_t bitLen; // <20><><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD>bit<69><74><EFBFBD><EFBFBD>
uint8_t needAnswer; // <20>Ƿ<EFBFBD>Ӧ<EFBFBD><D3A6>
uint8_t bytes[78]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>624bit<69><74>
} bd_txsq_t;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ֡
typedef struct
{
uint8_t fkbz; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
char fjxx[4]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
} bd_fkxx_t;
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>Ϣ֡
typedef struct
{
union
{
struct
{
unsigned tx : 2; // 01-ͨ<><CDA8>
unsigned code : 1; // 0-<2D><><EFBFBD>֣<EFBFBD>1-<2D><><EFBFBD><EFBFBD>
unsigned receipt : 1; // 0-<2D><>Ҫ<EFBFBD><D2AA>ִ
unsigned type : 1; // 0-ͨ<>ţ<EFBFBD>1-<2D><>ѯ
unsigned key : 1; // 0-<2D><><EFBFBD><EFBFBD>Կ
unsigned : 2; // 00
};
uint8_t xxlb; // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
};
uint8_t srcAddr[3]; // <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD>ַ
uint8_t hour; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
uint8_t minute;
uint16_t bitLen; // <20><><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD>bit<69><74><EFBFBD><EFBFBD>
uint8_t bytes[210]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>1680bit<69><74>
uint8_t crcErr; // 0-crc<72><63>ȷ<EFBFBD><C8B7>1-crc<72><63><EFBFBD><EFBFBD>
} bd_txxx_t;
// <20><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>֡
typedef struct // size = BD_RF_MAX_FRAME_LEN
{
uint8_t sof; // BD_FRMAE_SOF
char cmd[4]; // XTZJ, ZJXX, TXSQ, FKXX, TXXX
uint16_t len; // bytes from sof to cs
uint8_t selfAddr[3]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>0
union
{
bd_xtzj_t xtzj; // ϵͳ<CFB5>Լ<EFBFBD>
bd_zjxx_t zjxx; // <20>Լ<EFBFBD><D4BC><EFBFBD>Ϣ
bd_txsq_t txsq; // ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bd_fkxx_t fkxx; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bd_txxx_t txxx; // ͨ<><CDA8><EFBFBD><EFBFBD>Ϣ
uint8_t bd_payload[sizeof(bd_txxx_t)];
};
uint8_t cs; // У<><D0A3><EFBFBD>ͣ<EFBFBD>ռλ<D5BC>ã<EFBFBD>ʵ<EFBFBD><CAB5>cs<63><73><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD>ǰ<EFBFBD><C7B0>
} bd_frame_t;
typedef struct // size = BD_RF_MAX_FRAME_LEN
{
uint8_t sof; // RF_FRMAE_SOF
uint8_t len; // bytes from sof to crc<72><63>BD_RF_MIN_FRAME_LEN~BD_RF_MAX_FRAME_LEN<45><4E>
uint16_t vendor_id; // RF_MARK_LS
uint8_t app_id; // RF_APP_AJH or RF_APP_PRAX or RF_APP_LANSHI
uint8_t protocol_ver; // RF_PROTOCOL
unsigned dir : 1; // RF_DIR_UP or RF_DIR_DOWN
unsigned mac_type : 2; // RF_MAC_TYPE_DATA or RF_MAC_TYPE_ACK
unsigned mac_ack_req : 1; // is ack requested?
unsigned net_type : 2; // RF_NET_TYPE_DATA or RF_NET_TYPE_FIND_RELAY or RF_NET_TYPE_RESP_RELAY
unsigned : 2; // reserved
uint8_t mac_fn; // mac frame number
uint8_t srcPSN[6];
uint8_t app_pn; // package number
unsigned app_idx : 7; // frame number in package
unsigned app_tbc : 1; // to be continue?
uint8_t app_payload[BD_RF_MAX_PAYLOAD_LEN];
uint16_t crc; // ռλ<D5BC>ã<EFBFBD>ʵ<EFBFBD><CAB5>crc<72><63><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD>ǰ
} bd_rf_frame_t;
typedef struct // size = 50
{
uint16_t diff;
uint16_t volumePct; // <20>ݻ<EFBFBD><DDBB>ٷֱ<D9B7>
uint32_t volume; // <20>ݻ<EFBFBD>
uint32_t weight; // <20><><EFBFBD><EFBFBD>
uint16_t press;
int16_t tempr;
uint16_t debug; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
rf_sensor_t Sensor;
uint32_t longitude;
uint32_t latitude;
uint16_t voltage;
uint8_t batPct;
int8_t batCurrent;
uint32_t relative_time;
uint8_t hardVer;
uint8_t softVer;
uint32_t volumeTotal; // <20><><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>
uint32_t L;
uint32_t d;
} bd_rf_app_data_t;
// Ӧ<>ò㷢<C3B2>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>
uint8_t bd_rf_app_send_data(uint8_t payload_len, uint8_t *payload);
#pragma pack(pop)
#endif