ZNY_Pakistan/Anjiehui7_ZNY/User/uart_RFModule.h

190 lines
4.9 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_RFModule.h
* Version : V1.00
* Programmer(s) : Qian Xianghong
*********************************************************************************************************
*/
#ifndef USER_UART_RFMODULE_PRESENT
#define USER_UART_RFMODULE_PRESENT
#include "type.h"
// 初始化
void RF_Init();
void RF_Open();
// 反初始化
void RF_UnInit();
// 模块上电,设置硬件参数
void RF_PowerOn();
void RF_PowerOff();
// 终端模块搜寻网关:发送搜寻命令,等待回应。
// 搜寻5次取回应次数最多的作为通信网关。
// 最多接收10个网关
uint8_t rf_check_gateway();
// 检查当前是否已经设置了网关
uint8_t rf_has_gateway();
// 清除网关
void rf_clear_gateway();
// 应用层发送:数据
uint8_t rf_app_send_data(uint8_t payload_len, uint8_t *payload);
// 储罐发送充装匹配命令,并等待应答
uint8_t rf_charge_match(uint8_t charging);
// 判断槽车是否离开原地
uint32_t rf_is_truck_leave();
#define RF_MIN_FRAME_LEN (24)
#define RF_MAX_FRAME_LEN (61)
#define RF_MIN_PAYLOAD_LEN (0)
#define RF_MAX_PAYLOAD_LEN (RF_MAX_FRAME_LEN - RF_MIN_FRAME_LEN)
#define RF_DIR_UP (0) // 上行
#define RF_DIR_DOWN (1) // 下行
#define RF_MAC_TYPE_DATA (0) // mac帧-数据
#define RF_MAC_TYPE_ACK (1) // mac帧-ACK
#define RF_NET_TYPE_DATA (0) // net帧-数据
#define RF_NET_TYPE_FIND_RELAY (1) // net帧-寻找中继器
#define RF_NET_TYPE_RESP_RELAY (2) // net帧-应答中继器
#define RF_NET_TYPE_CHARGE_MATCH (3) // net帧-充装匹配
#define RF_NET_TYPE_REMOTE_CTRL (4) // net帧-遥控命令
#define RF_FRAME_SOF (0x1B) // 标识一个帧的开始
#define RF_MARK_LS (('S' << 8) | 'L')
#define RF_APP_AJH ('A') // data.idatatank.com:8088
#define RF_APP_PRAX ('P') // tts.praxair.com.cn:7005
#define RF_APP_LANSHI ('L') // data.cd-ls.cn:8088
#define RF_PROTOCOL_VER_1 (1)
// 射频初始化状态
extern uint8_t RF_initStatus;
// 允许匿名结构
#pragma anon_unions
#pragma pack(push, 1)
typedef struct // size = RF_MAX_FRAME_LEN
{
uint8_t sof; // RF_FRMAE_SOF
uint8_t len; // bytes from sof to crcRF_MIN_FRAME_LEN~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 : 3; // RF_NET_TYPE_DATA or RF_NET_TYPE_FIND_RELAY or RF_NET_TYPE_RESP_RELAY or RF_NET_TYPE_REMOTE_CTRL
unsigned : 1; // reserved
uint8_t mac_fn; // mac frame number
uint8_t destPSN[6];
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[RF_MAX_PAYLOAD_LEN];
uint16_t crc; // 占位置实际crc可能更靠前
} rf_frame_t;
// mac层ack信息
typedef struct
{
uint8_t srcPSN[6];
uint8_t mac_fn;
} rf_ack_t;
// 应用层应答信息
typedef struct
{
uint8_t srcPSN[6];
uint8_t app_pn;
uint8_t payload_len;
uint8_t payload[RF_MAX_PAYLOAD_LEN];
} rf_resp_t;
typedef struct
{
unsigned staDiff : 2;
unsigned staPress : 2;
unsigned staETempr1 : 2;
unsigned charging : 1;
unsigned bat_low : 1;
unsigned measure_type : 2;
unsigned bottle_type : 2;
unsigned L_source : 3;
unsigned location_type : 1; // 0-GPS,1-基站
} rf_sensor_t;
typedef struct // size = 37
{
uint16_t diff;
uint16_t press;
int16_t tempr;
rf_sensor_t Sensor;
uint16_t density;
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 L;
uint32_t d;
uint8_t chargePct;
} rf_app_data_t;
typedef struct // size = 11
{
uint8_t posState;
uint32_t longitude;
uint32_t latitude;
uint8_t source;
uint8_t charging;
} rf_charge_match_t;
typedef struct // size = 43
{
char frame_header[4]; // LNGC for master; TANK for slave.
char tank_psn[13];
uint8_t send_mod; // 0x00 for normal; 0x5A for quick.
unsigned level_conn : 1;// 0-连接1-未连接
unsigned tempr_conn : 1;// 0-连接1-未连接
unsigned press_conn : 1;// 0-连接1-未连接
unsigned vacuu_conn : 1;// 0-连接1-未连接
unsigned level_fault : 1;// 0-正常1-故障
unsigned tempr_fault : 1;// 0-正常1-故障
unsigned press_fault : 1;// 0-正常1-故障
unsigned vacuu_fault : 1;// 0-正常1-故障
float liquid_level; // mmWC
float temp; // ℃
float pressure; // MPa
float vacuum; // Pa
uint32_t volume; // L
uint16_t volumePct; // %
uint16_t crc; // Modbus-rtu crc
} rf_lng_lora_t;
#pragma pack(pop)
// 多项式为x16+x15+x2+1LSB顺序
// 同ibutton的crc算法不同于modbus的crc算法
uint16_t rf_crc_16(uint8_t *message, int16_t len);
// 计算自启动以来经过的秒数
uint32_t rf_get_seconds();
void LNG_LORA_Task(void *p_arg);
#endif