226 lines
5.6 KiB
C
226 lines
5.6 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
|
||
|
||
#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
|