224 lines
5.5 KiB
C
224 lines
5.5 KiB
C
|
|
/*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
* 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
|