NANO130_H2Press/User/uart_BDModule.h

224 lines
5.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*********************************************************************************************************
* 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;
// 初始化
void BD_Init();
void BD_Open();
// 模块上电,设置硬件参数
void BD_PowerOn();
void BD_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 crcBD_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 bd_rf_app_send_data(uint8_t payload_len, uint8_t *payload);
#pragma pack(pop)
#endif