| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- #ifndef _NET_PROC_H_
- #define _NET_PROC_H_
- #include "stm32f10x.h"
- //#include "os.h"
- #include "includes.h"
- #include "device.h"
- #include "gateway.h"
- //#include "net_proc.h"
- #include "../dev_mgr/taxctrl/tax_ctrl.h"
- //#include "oiltank.h"
- //#include "net_ctrl.h"
- #include "../network/downlink.h"
- #include "../network/uplink.h"
- #include "net_ctrl.h"
- #include "../gateway_collect/gateway_collect.h"
- #define UPDATE_TOTAL_PERIOD (10*60)//(5*60) //(500*10)//*60) // 1为1S, 5为5S 5*60:5分钟
- #define UPDATE_EACH_TIME 300
- extern uint8_t RadioRxPayload[255];
- enum {
- UP_PROG_FROM_NET = 0x22, // 来源来网络
- UP_PROG_FROM_GAT = 0x44, //来源来网关
- };
- enum { // 升级结果类型
- UPDATE_RECEIVE_UPDATEFLAG = 0x11, // URL的地址与长度不匹配
- UPDATE_SAMEVERSION, // 和当前版本相同
- UPDATE_FAILE_NOCOLLECT, // 此采集器不在本网关下
- UPDATE_DOWNLOADFILE_FAILED, //文件下载失败,即文件大小小于2个字节
- UPDATE_HTTP_ERROR, //HTTP返回错误码
- UPDATE_DOWNLOADFILE_SUCCESS, // 文件下载成功
- UPDATE_CRCERROR, // 文件包中的CRC与实际不符
- UPDATE_URL_FILE_TYPE_ERROR, // URL中的文件信息与文件包中的信息不一致
- UPDATE_DEVICETYPEERROR, // 升级设备类型不匹配
- UPdATE_FILE_LEN_ERROR, // 升级文件长度超过128个字节
- UPDATE_SUCCESS, // 升级成功
- UPDATE_RETURN_SUCESS, // 回退
- // UPDATE_SUCESS, // 升级程序成功
- // UPDATE_TYPEERROR, // 升级类型不匹配 当前升级文件不是网关的,或不是本采集器的
- // UPDATE_FIXCHARERROR, // 文件包中的固定字符错误
- // UPDATE_TOTALLENERROR, // 文件包中的长度与实际长度不对应该
- // UPDATE_FILEVERSION, // 文件包中的版本和当前文件名中的版本不一致
- // UPDATE_FAILED , // 升级失败
- // UPDATE_UPDATEING, // 升级中
- // UPDATE_FINISH, // 升级完成
- };
- typedef enum net_msg_type {
- /* 以下为外部交互信息 */
- /* uplink, 设备侧 ---> 后端服务器 */
- net_msg_type_none,
- net_msg_type_lot = 1,
- net_msg_type_trans = 2,
- net_msg_type_oiltank = 3,
- net_msg_type_gps = 4,
- net_msg_type_gateway = 5,
- net_msg_type_log = 6,
- net_msg_type_debug = 7,
-
- /* downlink 后端服务器 ----> 设备侧 */
- net_msg_type_rsv = 0x80,
- net_msg_type_config = 0x81,
- net_msg_type_update = 0x82,
- net_msg_type_chnbind = 0x83,
- net_msg_type_commnd = 0x84,
- net_msg_type_reboot = 0x85,
- /* 以下为内部交互信息,通过内部lora局域网交互升级包 */
- net_msg_type_timer,
- /* Gateway ----> Node */
- net_msg_type_update_start = 0x13,
- net_msg_type_update_continues = 0x14,
- net_msg_type_update_retransmit_rsp = 0x15,
- net_msg_type_update_ack_status = 0x16,
- /* Node ----> Gateway */
- net_msg_type_update_retransmit_req = 0x22,
- net_msg_type_update_status = 0x21,
- /* 网关绑定相关 */
- net_msg_type_bind_req = 0x40,
- net_msg_type_bind_rsp = 0x41,
- net_msg_type_node_echo = 0x42,
- net_msg_type_gw_echo = 0x43,
- } net_msg_type;
- typedef struct _update_msg_format {
- uint16_t rcv_device_type; // 接收设备的类型
- uint32_t rcv_device_id; //接收设备的SN
- uint16_t des_device_type;//升级设备的类型
- uint32_t des_device_id;//升级设备的SN
- uint32_t update_version; //升级版本
- char url[128];
- }__attribute__((packed)) update_msg_format;
- // 0x13指令 下行,启动升级指令
- typedef struct _ota_start_info {
- uint16_t rcv_device_type;// 接收设备的类型 和SN
- uint32_t rcv_device_id;
- uint16_t des_device_type;//被升级设备的设备类型和id
- uint32_t des_device_id;
- uint32_t update_version;//升级包类型和版本;
- uint32_t total_bytes;//升级包总长度和校验码
- uint16_t time; // 每包间隔时常
- }__attribute__((packed)) ota_start_info_t;
- // 0x14 0x15 指令 连续包 和重传包指令
- typedef struct _ota_continues_info {
- uint16_t rcv_device_type;// 接收设备的类型 和SN
- uint32_t rcv_device_id;
- uint16_t des_device_type;//被升级设备的设备类型和id
- uint32_t des_device_id;
- uint16_t total_pkgs; // 升级包的总个数
- uint16_t sub_pkg_id; //升级包的编号
- uint8_t sub_pkg_len; //每包的长度
- // uint32_t *pkg_content;
- }__attribute__((packed)) ota_continues_info_t;
- // 0x22指令 请求重传包指令
- typedef struct _ota_retransmit_req {//重传请求
- uint16_t rcv_devict_type; //接收设备
- uint32_t rcv_device_id; //接收设备
- uint16_t repeat_sub_pkg_id;
- }__attribute__((packed)) ota_retransmit_req_t;
- // 0x16指令 网关通知采集器去升级采集器
- typedef struct _ota_lineoffupdate_collect {
- uint16_t master_device_type; // 主设备类型
- uint32_t master_device_sn; // 主设备SN
- uint16_t slave_device_type; // 从设备类型
- uint32_t slave_device_sn; // 从设备 SN
- uint16_t des_device_type; // 升级目标设备类型
- uint32_t des_device_sn; // 升级目标设备SN
- uint32_t reserve; // 预留
- }__attribute__((packed)) ota_lineoffupdate_coll_t;
- // 0x23 指令,
- typedef struct _ota_updatestatus_up { // 升级状态上报
- uint16_t rcv_device_type;// 接收设备的类型 和SN
- uint32_t rcv_device_id;
- uint16_t des_device_type;//被升级设备的设备类型和id
- uint32_t des_device_id;
- uint32_t des_device_bootVr; //被升级设备的bootloader版本
- uint32_t des_device_appVr; // 被升级设备的APP版本
- uint8_t status; // 升级状态码
- uint32_t reserve; // 预留
- }__attribute__((packed)) ota_updatestatus_up_t;
- typedef struct _inner_msg_format {
- uint16_t frame_header; //帧头
- uint16_t fcs; //帧校验
- uint32_t seq_no; //消息序列号
- uint8_t proto_ver; //协议版本
- uint8_t type; //消息类型
- uint16_t len; //消息长度
- char info[160];
- } inner_msg_format_t;
- typedef struct _server_msg_header {
- uint16_t frame_header; //帧头
- uint8_t proto_ver; //协议版本 0x01
- uint32_t seq_no; //消息序列号
- uint8_t msgtypeFirst; //一级消息类型 0x01:系统类 0x02:状态类 0x03:数据类 0x04:产测类
- uint16_t msgtypeSecd; // 二级消息类型
- uint16_t len; //消息长度
- char info[1024];
- }__attribute__((packed)) sverMsgHeader;
- #define FRAME_HEADER_LEN 12
- #if 1
- //#define MQTT_SERVER_IP "8.142.80.166"
- #define MQTT_SERVER_IP "test-mqtt.cpyypt.cn"
- #else
- #define MQTT_SERVER_IP "39.100.96.218"
- #endif
- //#define MQTT_SERVER_PORT "1883"
- #define MQTT_SERVER_PORT "9000"
- //#define MQTT_UPLINK_LOT_TOPIC "LotDeviceInfo" //LotDeviceInfo
- #define MQTT_UPLINK_LOT_TOPIC "cpyypt/up/"//"/mqtt/topic" //LotDeviceInfo //"/mqtt/downlink"
- #define MQTT_UPLINK_TRANS_TOPIC "Transaction"
- #define MQTT_UPLINK_TANK_TOPIC "OilTankLevel"
- #define MQTT_UPLINK_GPS_TOPIC "GPSLocation"
- #define MQTT_UPLINK_GATEWAY_TOPIC "GWDeviceInfo" //
- #define MQTT_UPLINK_LOG_TOPIC "LogInfo"
- #define MQTT_UPLINK_DEBUG_TOPIC "DebugInfo"
- #define MQTT_UPLINK_TOPIC "cpyypt/up/"
- #define MQTT_DNLINK_TOPIC "cpyypt/down/"
- #define MQTT_DNLINK_TOPIC_CASE "cpyypt/down/"
- #define TOPIC_GET_BY_MSGTYPE(msg_type) ((msg_type == net_msg_type_lot)?(MQTT_UPLINK_LOT_TOPIC):\
- ((msg_type == net_msg_type_trans)?(MQTT_UPLINK_TRANS_TOPIC): \
- ((msg_type == net_msg_type_oiltank)?(MQTT_UPLINK_TANK_TOPIC): \
- ((msg_type == net_msg_type_gps)?(MQTT_UPLINK_GPS_TOPIC):(MQTT_UPLINK_GATEWAY_TOPIC)))))
- typedef void (*net_init)(char *device_id);
- typedef void (*net_send)(char *buffer, uint32_t len);
- typedef uint32_t (*net_recv)(char *buffer, uint32_t *len);
- typedef struct _net_drv {
- net_init init;
- net_send send;
- net_recv recv;
- } net_drv_t;
- typedef enum DEV_WORK_STATE
- {
- DEV_WORK_STATE_NORMAL,
- DEV_WORK_STATE_UPDATING,
- DEV_WORK_STATE_UPDATE_RETRANSMIT,
- DEV_WORK_STATE_ONLOOKER, //旁观者模式
- DEV_WORK_STATE_OTA_BEGIN, //开始升级模式
- DEV_WORK_STATE_OTA_CONTINUOUS, //升级中连续收包模式
- DEV_WORK_STATE_OTA_RETRANSMIT, //升级中重传模式
- DEV_WORK_STATE_OTA_UPGRADE_RCV_END, //升级中升级包接收完成模式
- DEV_WORK_STATE_PT, //产测模式
- DEV_WORK_STATE_UNINIT, //出厂信息未初始化模式
- DEV_WORK_STATE_MAX
- }DEV_WORK_STATE_T;
- typedef struct _system_network {
- uint8_t memory[4][1024]; //必须4字节对齐
- uint8_t dev_type;
- uint8_t workstate;
- OS_Q net_q;
- OS_SEM sem;
- OS_MEM net_m;
- OS_TMR net_tmr;
- void * net_hdl; // mqtt是否初始化
- net_send uplink_send; //4G 上传数据的函数指针
- net_send downlink_send; //4G 下载数据的函数指针
- uint32_t seq_no;
- char str[1024];
- }system_network_t;
- extern system_network_t sys_net;
- void NET_IMEI_ICCID_INFO_GET(char *imei, char *iccid);
- void net_queue_insert(char *p_msg, uint32_t msg_len);
- void * net_queue_mem_calloc(void);
- int net_queue_mem_free(void * p_msg);
- //void net_msg_frame_fill(gateway_collect_com_t *p_msg, uint8_t msg_type, uint16_t len);
- extern void close_tcp_mqtt(void);
- void svc_proc(uint32_t dev_type, uint32_t dev_id);
- void * net_queue_mem_calloc_must(void);
- //extern void collect_msg_frame_fill(gateway_collect_com_t *p_msg,uint8_t msg_type,uint16_t len);
- extern void gateway_update_proc(uint8_t *data,uint8_t msg_len);
- extern void gateway_update_collect_status(void);
- extern void gateway_reset_send_update_status(void);
- extern void uplink_net_send(char *buffer, uint32_t len);
- extern void * uplink_net_init(char *device_id) ;
- extern void gateway_update_gateway_proc(void);
- extern void gateway_update_gateway_status(void);
- #endif
|