/* ********************************************************************************************************* * 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 #include "type.h" extern const uint8_t BD_APP; extern const uint8_t BD_PROTOCOL_VER; // 初始化 void CC200A_Init(); void CC200A_Open(); // 模块上电,设置硬件参数 void CC200A_PowerOn(); void CC200A_PowerOff(); #define BD_RF_MIN_FRAME_LEN (18) #define BD_RF_MAX_FRAME_LEN (78) // 北斗短信最大长度 #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) // 通信信息帧最大长度 #define BD_MIN_PAYLOAD_LEN (0) #define BD_MAX_PAYLOAD_LEN (BD_MAX_FRAME_LEN - BD_MIN_FRAME_LEN) // 北斗初始化状态 extern uint8_t BD_initStatus; // 允许匿名结构 #pragma anon_unions #pragma pack(push, 1) // 北斗系统自检帧 typedef struct { uint16_t frequency; // 自检频度(秒),0-单次自检 } bd_xtzj_t; // 北斗自检信息帧 typedef struct { union { struct { unsigned icType : 1; // 0-保密模块,1-智能卡 unsigned cardErr : 1; // 0-智能卡正常,1-智能卡异常 unsigned idErr : 1; // 0-ID号正常,1-ID号异常 unsigned chkErr : 1; // 0-校验正常,1-校验异常 unsigned snErr : 1; // 0-序列号正常,1-序列号异常 unsigned adminCard : 1; // 0-用户卡,1-管理卡 unsigned dataErr : 1; // 0-数据正常,1-数据异常 unsigned phyErr : 1; // 0-物理正常,1-物理缺损 }; uint8_t icStatus; // 智能卡状态 }; union { struct { unsigned antennaErr : 1; // 0-天线状态正常,1-异常 unsigned channelErr : 1; // 0-通道正常,1-异常 unsigned boardErr : 1; // 0-主板正常,1-异常 unsigned : 5; }; uint8_t hardStatus; // 硬件状态 }; uint8_t batPct; // 电量百分比 union { struct { unsigned suppress : 1; // 0-非抑制,1-抑制 unsigned notSilence : 1; // 0-静默,1-正常 unsigned : 6; }; uint8_t inStatus; // 入站状态 }; uint8_t power[6]; // 波束功率 } bd_zjxx_t; // 北斗通信申请帧 typedef struct { union { struct { unsigned tx : 3; // 010-报文通信,011-查询通信 unsigned key : 1; // 密钥,填0 unsigned type : 2; // 00-特快,01-普通 unsigned code : 1; // 0-汉字,1-代码 unsigned identity : 1; // 0-通信,1-口令识别 }; uint8_t xxlb; // 信息类别 }; uint8_t dstAddr[3]; // 收信方地址 uint16_t bitLen; // 电文长度(bit数) uint8_t needAnswer; // 是否应答 uint8_t bytes[78]; // 电文内容(最大624bit) } bd_txsq_t; // 北斗反馈信息帧 typedef struct { uint8_t fkbz; // 反馈标志 char fjxx[4]; // 附加信息 } bd_fkxx_t; // 北斗通信信息帧 typedef struct { union { struct { unsigned tx : 2; // 01-通信 unsigned code : 1; // 0-汉字,1-代码 unsigned receipt : 1; // 0-不要回执 unsigned type : 1; // 0-通信,1-查询 unsigned key : 1; // 0-无秘钥 unsigned : 2; // 00 }; uint8_t xxlb; // 信息类别 }; uint8_t srcAddr[3]; // 发信方地址 uint8_t hour; // 发信时间 uint8_t minute; uint16_t bitLen; // 电文长度(bit数) uint8_t bytes[210]; // 电文内容(最大1680bit) uint8_t crcErr; // 0-crc正确,1-crc错误 } bd_txxx_t; // 北斗协议帧 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]; // 自身地址,可全填0 union { bd_xtzj_t xtzj; // 系统自检 bd_zjxx_t zjxx; // 自检信息 bd_txsq_t txsq; // 通信申请 bd_fkxx_t fkxx; // 反馈信息 bd_txxx_t txxx; // 通信信息 uint8_t bd_payload[sizeof(bd_txxx_t)]; }; uint8_t cs; // 校验和(占位置,实际cs可能更靠前) } 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(BD_RF_MIN_FRAME_LEN~BD_RF_MAX_FRAME_LEN) 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; // 占位置,实际crc可能更靠前 } bd_rf_frame_t; typedef struct // size = 50 { uint16_t diff; uint16_t volumePct; // 容积百分比 uint32_t volume; // 容积 uint32_t weight; // 重量 uint16_t press; int16_t tempr; uint16_t debug; // 调试信息 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; // 储罐容积 uint32_t L; uint32_t d; } bd_rf_app_data_t; // 应用层发送:数据 uint8_t CC200A_rf_app_send_data(uint8_t payload_len, uint8_t *payload); #pragma pack(pop) #endif