9b06145341
2、删除了bsp.h的lora通道配置宏定义 3、删除了SGCP.h中MAC的组成参数定义,改为在main.c中进行定义,当使用bootloader时通过读取BootPara结构体参数获取本机MAC,否则将通过App程序自定义MAC 4、BootPara结构体参数增加
285 lines
8.5 KiB
C
285 lines
8.5 KiB
C
/* 传感器通用通讯协议V1.0*/
|
||
|
||
#ifndef __SGCP_H
|
||
#define __SGCP_H
|
||
#include "bsp.h"
|
||
|
||
#define WORK_MODE 1//工作模式选择,0、本机为查询模式,1、本机为上报模式(低功耗)
|
||
#define SGCP_SELECT 1 //协议选择,0、本机为单个主设备接多个子设备,1、本机为单个主设备不接子设备,2、本机为单个子设备
|
||
|
||
typedef struct {//网关与主设备固定帧
|
||
uint8_t Header;
|
||
uint8_t GWAddr[6];
|
||
uint8_t MDAddr[6];
|
||
uint8_t Cmd;
|
||
uint16_t PayloadLen;
|
||
}__attribute__ ((packed))GatewayFrameHeader_t,*GatewayFrameHeader;
|
||
|
||
typedef struct {//主设备与子设备固定帧
|
||
uint8_t Header;
|
||
uint8_t Addr;
|
||
uint8_t Cmd;
|
||
uint8_t PayloadLen;
|
||
}__attribute__ ((packed))SubsetFrameHeader_t,*SubsetFrameHeader;
|
||
|
||
typedef struct {//内部指令固定帧
|
||
uint8_t Header;
|
||
uint8_t MAC[6];
|
||
uint8_t Cmd;
|
||
uint8_t PayloadLen;
|
||
}__attribute__ ((packed))InsideFrameHeader_t,*InsideFrameHeader;
|
||
|
||
typedef struct {//主设备固定包头
|
||
uint8_t BatLevel; //电池电量
|
||
int8_t RSSI; //信号强度
|
||
int8_t Nsr; //信噪比
|
||
}__attribute__ ((packed))MasterDev_T,*MasterDevDp;
|
||
|
||
typedef struct {//0x0006 三维连续变形
|
||
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
|
||
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
|
||
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
|
||
}__attribute__ ((packed))ContDefor3D_T,*ContDefor3DDp;
|
||
|
||
typedef struct {//0x0007 通讯单元
|
||
MasterDev_T MasterDev;
|
||
}__attribute__ ((packed))CommUnit_T,*CommUnitDp;
|
||
|
||
typedef struct {//0x0008 三维应力
|
||
int16_t PitchAngle; //俯仰角(范围±900)单位0.1°
|
||
int16_t RollAngle; //横滚角(范围±900)单位0.1°
|
||
int16_t YawAngle; //偏航角(范围0~3600)单位0.1°
|
||
int32_t Strain1; //X轴应力值(范围±10MPa,单位Pa)
|
||
int32_t Strain2; //Y轴应力值(范围±10MPa,单位Pa)
|
||
int32_t Strain3; //Z轴应力值(范围±10MPa,单位Pa)
|
||
}__attribute__ ((packed))Force3D_T,*Force3DDp;
|
||
|
||
typedef struct {//0x0009 激光示踪
|
||
MasterDev_T MasterDev;
|
||
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
|
||
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
|
||
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
|
||
}__attribute__ ((packed))LaserTracing_T,*LaserTracingDp;
|
||
|
||
typedef struct {//0x000E 裂缝仪
|
||
int16_t XwiseDist; //横向位移量(范围0~150mm)
|
||
int16_t LgthwysDist; //纵向位移距离(范围0~150mm)
|
||
int16_t RotationDist; //旋转位移距离(范围0~150mm)
|
||
}__attribute__ ((packed))Crack_T,*CrackDp;
|
||
|
||
typedef struct {
|
||
ContDefor3D_T ContDefor3D;
|
||
CommUnit_T CommUnit;
|
||
Force3D_T Force3D;
|
||
Crack_T Crack;
|
||
LaserTracing_T LaserTracing;
|
||
}__attribute__ ((packed))DeviceData_T,*DeviceDp; //设备数据
|
||
|
||
/*接收子设备数据状态机*/
|
||
typedef enum {
|
||
SUB_STATUS_IDLE,
|
||
SUB_STATUS_BROADCAST_CALI,
|
||
SUB_STATUS_READMASTER_DATA,
|
||
SUB_STATUS_READSUBSET_DATA,
|
||
SUB_STATUS_WAIT_READSUBSET,
|
||
SUB_STATUS_MASTER_QUERY,
|
||
SUB_STATUS_SUBSET_QUERY,
|
||
SUB_STATUS_WAIT_SUBSET_QUERY,
|
||
SUB_STATUS_BROADCAST_SET_COLTIME,
|
||
SUB_STATUS_BROADCAST_SYNC_TIME,
|
||
}SubStatus_m;
|
||
|
||
/*接收网关数据状态机*/
|
||
typedef enum {
|
||
GW_STATUS_IDLE,
|
||
GW_STATUS_WAIT_SUBIDLE,
|
||
GW_STATUS_LOGIN,
|
||
GW_STATUS_WAIT_LOGIN,
|
||
GW_STATUS_CALI,
|
||
GW_STATUS_READ_SENSOR,
|
||
GW_STATUS_SET_COL_TIME,
|
||
GW_STATUS_SYNC_TIME,
|
||
GW_STATUS_UPLOAD_SENSOR,//主动上报模式时会使用该状态
|
||
GW_STATUS_WAIT_UPLOAD,//主动上报模式时会使用该状态
|
||
GW_STATUS_LASER_STARES,//激光状态回应
|
||
}GWStatus_m;
|
||
/*接收主设备数据状态机*/
|
||
typedef enum {
|
||
MAS_STATUS_IDLE,
|
||
MAS_STATUS_CALI,
|
||
MAS_STATUS_READ_SENSOR,
|
||
MAS_STATUS_DEVICE_INQUIRE,
|
||
MAS_STATUS_SET_COL_TIME,
|
||
MAS_STATUS_SYNC_TIME,
|
||
}MasStatus_m;
|
||
/*内部指令数据状态机*/
|
||
typedef enum {
|
||
IN_STATUS_IDLE,
|
||
IN_STATUS_UPDATE,
|
||
IN_STATUS_ALTER_485ADDR,
|
||
}InStatus_m;
|
||
/*网关到主设备命令集*/
|
||
typedef enum {
|
||
GWTOMD_CMD_LOGIN = 0x00, //0x00,设备注册
|
||
GWTOMD_CMD_CALI = 0x01, //0x01, 校准指令
|
||
GWTOMD_CMD_READ_UPLOAD_SENSOR = 0x02, //0x02,读取数据指令or上传数据指令
|
||
GWTOMD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
|
||
GWTOMD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
|
||
GWTOMD_CMD_SET_LASER = 0x08,//打开or关闭激光
|
||
}GWTOMD_CMD_M;
|
||
|
||
/*主设备到子设备命令集*/
|
||
typedef enum {
|
||
MDTOSD_CMD_CALI = 0x01, //0x01, 校准指令
|
||
MDTOSD_CMD_READ_DATA = 0x02, //0x02,读取数据指令
|
||
MDTOSD_CMD_INQUIRE = 0x03, //0x03, 设备查询指令
|
||
MDTOSD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
|
||
MDTOSD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
|
||
}MDTOSD_CMD_M;
|
||
/*内部指令命令集*/
|
||
typedef enum {
|
||
INSIDE_CMD_UPDATE = 0x81, //0x81,升级程序下发请求,由主机发起,从机应答
|
||
INSIDE_CMD_ALTER_485ADDR = 0x04, //0x04, 设置设备485地址
|
||
}INSIDE_CMD_M;
|
||
/*设备类型*/
|
||
typedef enum {
|
||
NUL, //0x0000 空设备
|
||
FORCE_6D, //0x0001 六维应力
|
||
OSMOTIC_PRESSURE, //0x0002 渗透压
|
||
ELASTIC_WAVEGUIDE, //0x0003 弹性波导
|
||
DIELECTRIC_MASS, //0x0004 介电质普
|
||
_0x0005, //0x0005 保留
|
||
CONT_DEFOR_3D, //0x0006 三维连续变形
|
||
COMM_UNIT, //0x0007 通讯单元
|
||
FORCE_3D, //0x0008 三维应力
|
||
LASER_TRACING, //0x0009 激光示踪
|
||
_0x000A, //0x000A 保留
|
||
_0x000B, //0x000B 保留
|
||
_0x000C, //0x000C 保留
|
||
MULTI_PARAMETER_FUSION, //0x000D 多参数融合
|
||
CRACK_DETECTION, //0x000E 裂缝仪
|
||
_0x000F, //0x000F 保留
|
||
ATTITUDE_MONITOR, //0x0010 姿态检测
|
||
LASER_DISPLACE, //0x0011 激光位移
|
||
REBAR_STRESS, //0x0012 钢筋应力
|
||
ANCHOR_ROD_STRESS, //0x0013 锚杆轴力
|
||
SURFACE_STRESS, //0x0014 表面应力
|
||
PRESSURE, //0x0015 压力
|
||
MICROWAVE_DISPLACE, //0x0016 微波测距
|
||
}DEVICE_TYPE_M;
|
||
/*通讯方式*/
|
||
typedef enum {
|
||
LORA = 0x01, //0x01 LORA通讯
|
||
RS485 = 0x02, //0x02 RS485通讯
|
||
RS232 = 0x03, //0x03 RS232通讯
|
||
CAN = 0x04, //0x04 CAN通讯
|
||
_4G = 0x05, //0x05 _4G通讯
|
||
BLE = 0x06, //0x06 BLE通讯
|
||
WIFI = 0x07, //0x07 WIFI通讯
|
||
UART = 0x08, //0x08 UART通讯
|
||
}COMM_WAY_M;
|
||
/*设备标志*/
|
||
typedef enum {
|
||
MASTER = 0x000000, //0x000000 主设备
|
||
SUBSET = 0x800000, //0x800000 子设备
|
||
}DEVICE_SIGN_M;
|
||
typedef struct {
|
||
__IO GWTOMD_CMD_M rCmdGWToMD; //网关下发命令
|
||
__IO GWTOMD_CMD_M sCmdMDToGW; //主设备返回命令
|
||
__IO uint16_t rPayLen;
|
||
__IO bool HeaderFrame;
|
||
__IO uint8_t RxLen;
|
||
uint8_t RxBuff[256];
|
||
}GWTOMD_Rx_T;
|
||
|
||
typedef struct {
|
||
__IO MDTOSD_CMD_M rCmdSDToMD; //子设备返回命令
|
||
__IO MDTOSD_CMD_M sCmdMDToSD; //主设备下发命令
|
||
__IO uint8_t rPayLen;
|
||
__IO bool HeaderFrame;
|
||
__IO uint8_t RxLen;
|
||
uint8_t RxBuff[256];
|
||
}MDTOSD_Rx_T;
|
||
|
||
typedef struct {
|
||
uint32_t LpUart0Delay1mSCnt;
|
||
uint32_t LoraDelay1mSCnt;
|
||
uint32_t Uart1Delay1mSCnt;
|
||
uint32_t GW1mSDelayCnt;
|
||
uint32_t SD1mSDelayCnt;
|
||
uint32_t In1mSDelayCnt;
|
||
|
||
GWTOMD_Rx_T GWRS485Rx;
|
||
uint8_t GatewayBuffLen;
|
||
uint8_t GatewayBuff[256];
|
||
uint8_t GatewayRevTimeoutCnt; //网关串口接收超时计数
|
||
|
||
MDTOSD_Rx_T SDRS485Rx;
|
||
uint8_t SubsetBuffLen;
|
||
uint8_t SubsetBuff[256];
|
||
uint8_t SubsetRevTimeoutCnt; //子设备串口接收超时计数
|
||
|
||
uint8_t InsidePayLen;
|
||
uint8_t InsideBuffLen;
|
||
uint8_t InsideBuff[256];
|
||
uint8_t InsidePay[256];
|
||
|
||
SubStatus_m SubStatus;
|
||
SubStatus_m NextSubStatus;
|
||
GWStatus_m GWStatus;
|
||
GWStatus_m NextGWStatus;
|
||
MasStatus_m MasStatus;
|
||
InStatus_m InStatus;
|
||
|
||
DeviceData_T DevData;
|
||
|
||
bool SubsetCaliOk; //子设备校准标志位
|
||
bool MasterCaliOk; //主设备标校标志位
|
||
|
||
uint8_t ReadDataAdd; //获取数据地址
|
||
uint16_t DeviceDataLen; //在线设备采集到的数据长度总和
|
||
uint8_t DeviceDataBuff[512]; //在线设备采集到的数据缓存(主设备的数据永远排在最前面)
|
||
uint8_t DeviceData[512]; //在线设备采集到的数据(主设备的数据永远排在最前面)
|
||
bool SubsetReadDataOk; //子设备读取数据成功标志位
|
||
bool DeviceReadDataOk; //设备读取数据完成标志位
|
||
|
||
uint8_t DeviceN; //在线设备数量(最多32个子设备,1个主设备)
|
||
uint8_t Dev485Addr; //在线设备485地址(最多32个子设备,1个主设备)
|
||
uint8_t Dev485Addrs[16]; //在线设备485地址缓存,0位为0x00广播地址
|
||
uint8_t DeviceMAC[16][6]; //在线设备的唯一MAC地址(主设备的MAC永远排在最前面)
|
||
bool SubsetMACOk; //在线子设备MAC获取成功标志位
|
||
bool DeviceMACOk; //在线设备获取完成标志位
|
||
|
||
bool CollTimeSetOk; //采集时间设置成功标志位
|
||
uint8_t CollTimeAdd; //设置采集时间地址
|
||
|
||
bool SyncTimeOk; //时间同步成功标志位
|
||
uint8_t SyncTimeAdd; //时间同步设备地址
|
||
|
||
bool BroadCmd; //广播命令
|
||
|
||
bool LoginOk; //注册成功标志位
|
||
bool LoginMess;
|
||
|
||
bool UploadOk; //上传成功标志位
|
||
bool UploadMess;
|
||
|
||
bool Gateway_IRQ_Status; //网关接收中断
|
||
bool Subset_IRQ_Status; //子设备接收中断
|
||
bool TimingAcquisition; //采集传感器数据
|
||
|
||
/**激光示踪私有**/
|
||
bool LaserOnOff; //打开与关闭激光标志位
|
||
}SGCP_t;
|
||
extern SGCP_t SGCP;
|
||
|
||
void SGCP1mSRoutine(void);
|
||
|
||
void GwRevLoopHandler(void);
|
||
void MasRevLoopHandler(void);
|
||
void SubRevLoopHandler(void);
|
||
void InRevLoopHandler(void);
|
||
#endif
|
||
|
||
|