#ifndef _GLOBALDEF_H_ #define _GLOBALDEF_H_ #include "../_Lib-3.5/CMSIS/stm32f10x.h" #include "./network/timeout.h" #include "./network/nettimer.h" #define READ_TIMER 3 #define UP_DEVICE_TYPE_GATE 0x0101 // 网关A #define UP_DEVICE_FIRMWARE 0x03 // APP程序 enum { UPDATE_PROG_NULL = 0x00, UPDATE_PROG_FROM_NET = 0x01, UPDATE_PROG_FROM_GATEWAY = 0x02, }; typedef struct _updata_prog { uint32_t sn[4]; uint32_t appVr[4]; uint8_t status[4];// 状态码 uint16_t num; uint8_t upCount; // 上报的次数 uint8_t updateProgFrom; // 升级程序的开源 timeout_t upStatusOut; uint8_t rec0x16; // 接收到16指令, OS_TMR update_total_time; }updateProg; extern updateProg g_updateProg; extern char g_upLinkTopic[64]; /* LED 灯的记录 */ #define LED_M_QUICK 1 #define LED_M_LOW 5 #pragma pack(push,1) typedef union _LED_16_{ uint16_t status; struct { uint16_t led01 : 1; uint16_t led02 : 1; uint16_t led03 : 1; uint16_t led04 : 1; uint16_t led05 : 1; uint16_t led06 : 1; uint16_t led07 : 1; uint16_t led08 : 1; uint16_t led09 : 1; uint16_t led10 : 1; uint16_t led11 : 1; uint16_t led12 : 1; uint16_t led13 : 1; uint16_t led14 : 1; uint16_t led15 : 1; uint16_t led16 : 1; }led; }Led16; #pragma pack(pop) typedef struct _LED_STATUS_{ uint8_t ledM; // M灯的情况 快闪还是慢闪 Led16 led16; uint16_t collNum; // 采集器个数 }LedStatus; extern LedStatus g_ledStatus; /*时间信息记录*/ typedef struct _CUR_TICK_{ uint32_t powerTime; // 上电时间 uint32_t curTime; // 当前时间 }CurTick; extern CurTick g_curTick; typedef struct _FIRMWARE_EXPLAIN_{ uint16_t dd; uint8_t ff; uint16_t nn; }__attribute__((packed)) FirmwareExpl; extern FirmwareExpl g_firmwareExpl; #define UPDATE_COLLECT_TOTALTIME 90000 // 升级总的时间 #define UPDATE_CONTINUE_TIME 300 // 升级续传每条间隔的时候300毫秒 #define UPDATE_REPEAT_TIME 7000 // 接收重传超时的时间 2S #define UPDATE_READSTATUS_TIME 10000 // 升级完成 到读取升级状态的时间 #define UPDATE_READSTATUS_TIME_GATEWAY 60000 // 升级完成 到读取升级状态的时间 /*运行数据*/ typedef struct _RUN_DATA_{ uint16_t rssi_lora; // lora信息强度 uint16_t rssi_4G; // 4G信息强度 uint8_t timeSendStatus; // 第5分钟发送一次状态信息的标志 0:不发送 1:发送 uint8_t bInitNetProc; // 是否创建网络队列 uint16_t updateDeviceTyp; // 升级类型 0x0101:网关;0x0201;采集器:0x0301:液位仪采集器;0x0401:屏采集器 uint8_t bUpdate; // 正在升级中 uint32_t startUpdateTotalTime; // 重传开始时间记录 uint32_t repeatUpdateTime; // 接收到重传指令型时间记录 uint32_t readUpdateStatusTime; // 读取升级状态的时间记录 uint8_t bsendOilData; // 发送油罐数据到服务器 uint8_t bAutoReadOilData; // 自动读取油罐数据 uint8_t bsendUpdateStatus; // 向服务器发送状态码 uint8_t bResetUpdate; // 升级完成后,需要上报服务器 uint8_t bsendGatewaySttus; // uint8_t bsendGatewayVersion; uint8_t frameNo; // 是否为多帧 uint8_t cregStatus; // 网络注册状态 uint8_t bUpdateHost; //是否是主设备 1:为主设备 其它为从设备,升级时,从设备不处理0x22指令 uint16_t loraConnectTime; // lora 连接的时间 uint8_t bread; // 服务器下发的读取液位仪的指令 }RunData; extern RunData g_runData; typedef struct _DATA_4G_{ uint8_t bconnect4G; // 是否连接4G uint8_t errorTime; // 4G断开的时间 如果断开1小时,则芯片复位重新启动 }Da4G; extern Da4G g_data4G; /* 网关固件信息存储 这个只有在产测时写入,要程序中不再写入*/ typedef struct _GATEWAY_HARDWARE_MSG_{ uint8_t bInit; // 是否初始化过 uint32_t gateway_sn; // 网关的sn uint16_t devicType; // 类型 uint16_t factoryMsg; // 厂家信息 uint16_t seqNo ; // 生产批次号 uint32_t data; // 生产日期 uint8_t pcbVersion; // 硬件(PCB)版本 uint32_t sqare; //备用 }__attribute__((packed)) GateHareWareMsg; /* 网关的固件信息存储*/ typedef struct _GATEWAY_SOFT_MSG_{ uint16_t bInit; // 是否配置过 uint8_t coll_num; // 此网关对应采集器的数量 uint16_t sqare; // 备用 }__attribute__((packed)) GateConfigMsg; /* 网关的版本信息*/ typedef struct _GATEWAY_VERSION_MSG_{ uint32_t gate_bootloaderVr; //网关的bootloaderVr uint32_t pt_version; // 产测版本 uint32_t gate_appVr; // appt版本 uint32_t gate_appVr2; // app2的版本 uint32_t gate_appVr3; // app3的版本 }__attribute__((packed)) GateVersionMsg; typedef union _VOLTAGE_{ uint32_t voltage; // 电压 float fvoltage; }voltage; typedef union _TEMPERATURE_{ uint32_t temperature; // 温度 float ftemperature; }temperature; typedef struct _GATEWAY_MSG_{ GateHareWareMsg hardwareMsg; // GateConfigMsg configmsg; // 软件信息 GateVersionMsg verMsg; // 版本信息 uint32_t gate_resetnum; //复位次数 uint8_t gate_resetType; //最后一次复位类型 uint32_t gate_runTime; // 运行时长 voltage fVol; temperature fTemper; uint8_t Uuid[12];//UUID uint8_t Imei[15]; //IMEI uint8_t Iccid1[20];//ICCID1 uint8_t Iccid2[20];//ICCID2 uint8_t Iccid3[20];//ICCID3 uint16_t devicTypeID; // 103 303 这个是读取上来的 }GateWayMsg; /* mqtt IP地址 端口号*/ typedef struct _MQTT_IP_PORT_{ uint8_t flag; char port[6]; // 端口号 char ip[32]; //IP地址 char admin[8]; // 用户名 char password[16]; // 密码 }__attribute__((packed)) MqttIdPort; typedef struct _FIRMWARE_MSG_{ // 固件信息存储 GateWayMsg gatewayMsg; // 网关固件信息 MqttIdPort mqttidport; // mqtt的IP地址和端口 }FirmwareMsg; extern FirmwareMsg g_firmwareMsg; // 网关 采集器固件信息存储 typedef struct _OIL_READ_MSG_{ uint8_t bInit; // 是否初始化 uint16_t paraLen; // 参数长度 char param[48]; // 参数 }__attribute__((packed)) oilReadMsg; extern oilReadMsg g_oilReadMsg; typedef struct _run_mqtt_data_{ uint8_t bChangeMqtt; // 1:为切换mqtt 服务器 uint8_t bChangeSuc; // 0:初始值 1: 切换成功 2: 切换连接失败 uint8_t connectNum; // 连接次数 uint8_t mqttIdlen; uint8_t mqttPortlen; uint8_t mqttUserlen; uint8_t mqttPwdlen; MqttIdPort mqttMsg; // mqtt的IP地址和端口 }__attribute__((packed)) MqttRunDa; extern MqttRunDa g_mqttRunDa; typedef struct{ uint8_t oil_buff[1024]; // uint16_t len; //数据长度 uint16_t len1; // 用于没有结束符的长度 uint8_t bfinish; // 收到03 结束 uint8_t bAutoRead; // 是否自动读取 uint8_t bstart; // 收到了 i20100指令 }__attribute__((packed))OilRunData; extern OilRunData g_oilreadDa; #endif