| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- #include "downlink.h"
- #include "uplink.h"
- #include "device.h"
- #include "gateway.h"
- #include "../network_mgr/net_proc.h"
- #include "../../User/includes.h"
- #include "../storage/AT24c128.h"
- #include "../gateway_collect/gateway_collect.h"
- #include "../dev_mgr/taxctrl/tax_ctrl.h"
- #include "../globalDef.h"
- #include "../storage/AT24C128Opt.h"
- #include "../network_mgr/net_ctrl.h"
- #include "../storage/AT24C128Opt.h"
- #include "nettimer.h"
- #include "me3616.h"
- extern ME3616 air;
- downlink_config_t downlink_config;
- void downlink_init(void)
- {
- int ret;
- int i;
- uint32_t flag = 0;
- // memset(&downlink_config.collect_conf,0,sizeof(downlink_config.collect_conf));
- // printf("downlink size %d\n",sizeof(downlink_config));
- // printf("gateway_read size %d\n",sizeof(gateway_read));
- sprintf(g_upLinkTopic,"%s%04x/%010u",(char*)MQTT_UPLINK_TOPIC,GATEWAY_DEVICE_TYPE, g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn);
- // fram_read_config_msg();
- // if(downlink_config.config_flag == CONFIG_WRITE)
- {
-
- g_ledStatus.collNum = g_ledStatus.led16.status;
- g_runData.timeSendStatus = 1;
- g_runData.bUpdate = 0;
- g_runData.bsendOilData = 0;
- downlink_config.config_flag = 1;
- g_ledStatus.led16.status = 0x8000;
- set_led_update_status(g_ledStatus.led16.status);
- }
- }
- int downlink_gateway_para(uint8_t *data, uint16_t len)
- {
- int ret=-1;
- int i,j,k;
- downlinkSysCmd0x1011 *p_msg = NULL;
- uint16_t flag = 0x01;
- uint8_t *tempdata;
- tempdata = data+5;
- p_msg = (downlinkSysCmd0x1011 *)data;
- memset(&downlink_config,0,sizeof(downlink_config));
- // if(p_msg->gateway_id != g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn)
- // return ret;
- downlink_config.gateway_id = p_msg->gateway_id;
- // downlink_config.collect_num = p_msg->collect_num;
- // g_firmwareMsg.gatewayMsg.configmsg.coll_num = p_msg->collect_num;
- // g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn = p_msg->gateway_id;
- // if(p_msg->collect_num > COLLECT_MAX_NUM) //采集器个数大于最大值,数据错误,直接返回
- // return ret;
- downlink_config.config_flag = CONFIG_WRITE;
- fram_write_config_msg(flag);
- //fram_write_gateway_soft_msg();
- downlink_config.config_flag = flag;
- g_runData.timeSendStatus = 1;
- g_runData.bUpdate = 0;
- g_runData.bsendOilData = 0;
- // AT24CXX_Write(CONFIG_ADDR,(uint8_t *)&downlink_config,sizeof(downlink_config));
- NVIC_SystemReset();//复位
- return 0;
- }
- /*--------------------------------------------------------------
- * 解析网络下发的 系统类(0x01)的 0x1003指令 切换mqtt服务器
- * -------------------------------------------------------------*/
- void downlink_analyze_system_cmd0x1003(uint8_t *data,uint16_t size)
- {
- uint8_t len = 0;
- downlinkSysCmd0x1003 *msg = NULL;
- msg = (downlinkSysCmd0x1003*)data;
- if(msg->gateway_sn != downlink_config.gateway_id) return;
- //if(msg->targettype != GATEWAY_DEVICE_TYPE) return;
- memset(&(g_mqttRunDa.mqttMsg),0,sizeof(MqttIdPort));
- memcpy(g_mqttRunDa.mqttMsg.ip,msg->str,msg->iplen);
- len = msg->iplen;
- memcpy(g_mqttRunDa.mqttMsg.port,msg->str+len,msg->portlen);
- len += msg->portlen;
- memcpy(g_mqttRunDa.mqttMsg.admin,msg->str+len,msg->userlen);
- len += msg->userlen;
- memcpy(g_mqttRunDa.mqttMsg.password,msg->str+len,msg->pwdlen);
- g_mqttRunDa.mqttIdlen = msg->iplen;
- g_mqttRunDa.mqttPortlen = msg->portlen;
- g_mqttRunDa.mqttUserlen = msg->userlen;
- g_mqttRunDa.mqttPwdlen = msg->pwdlen;
- close_tcp_mqtt();
- g_mqttRunDa.bChangeMqtt = 1;
- air.State.MQTT_State= 0;
- //g_mqttRunDa.bChangeSuc = 0;
- g_mqttRunDa.connectNum = 0;
- g_runData.cregStatus = 0;
- }
- /*--------------------------------------------------------------
- * 刷新税控序列号0x1012
- * --------------------------------------------------------------*/
- void downlink_analyze_system_cmd0x1012(uint8_t *data,uint16_t size)
- {
- }
- /*--------------------------------------------------------------
- * 设备重新启动 0x1021
- * --------------------------------------------------------------*/
- void downlink_analyze_system_cmd0x1021(uint8_t *data,uint16_t size)
- {
- downlinkSysCmd0x1021 *p_msg = NULL;
- p_msg = (downlinkSysCmd0x1021*)data;
- switch(p_msg->targetType){
- case 0x0101: // 网关
- if(p_msg->sn != downlink_config.gateway_id) break;
- NVIC_SystemReset();//复位//设备重新启动
- break;
- case 0x0201: // 采集器
- break;
- case 0x0301: // 液位仪采集器
- if(p_msg->sn != downlink_config.gateway_id) break;
- NVIC_SystemReset();//复位//设备重新启动
- break;
- case 0x0401: // 显示器
- break;
- }
- }
- /*---------------------------------------------------------------
- * 液位仪的配置信息初始化
- * --------------------------------------------------------------*/
- void downlink_oil_sys_cmd0x1031(uint8_t *data, uint16_t size)
- {
- downlinkSysOilCmd0x1031 *pmsg = NULL;
- // char sendbuff[32] = {0};
- // uint16_t len = 0;
- // downlinkDataOilCmd0x1021 *msg = (downlinkDataOilCmd0x1021*)sendbuff;
- pmsg = (downlinkSysOilCmd0x1031*)data;
- if((pmsg->gateway_sn!=downlink_config.gateway_id) && (pmsg->gateway_sn!=0xFFFFFFFF) ) return;
- g_oilReadMsg.paraLen = pmsg->paraLen;
- memset(g_oilReadMsg.param,0,sizeof(g_oilReadMsg.param));
- memcpy(g_oilReadMsg.param,pmsg->param,pmsg->paraLen);
- g_oilReadMsg.bInit = 0x5;
- fram_write_oil_msg();
- timeout_stop(&g_timeOut);
- g_runData.bsendOilData = READ_TIMER;
- // msg->gateway_sn = downlink_config.gateway_id;
- // len = sizeof(downlinkDataOilCmd0x1021);
- // tax_net_send(sendbuff,len,0x01,0x2031);
- }
- /*--------------------------------------------------------------
- * 解析网络下发的 系统类(0x01)的数据
- * --------------------------------------------------------------*/
- void downlink_analyze_system_cmd(uint16_t type, uint8_t *data, uint16_t size)
- {
- switch(type){
- case COLL_DN_SYS_CMD1011: //系统类 采集路由信息初始化下行
- downlink_gateway_para(data,size);
- break;
- case COLL_DN_SYS_CMD1012: // 系统类,刷新税控序列号
- downlink_analyze_system_cmd0x1012(data,size);
- break;
- case COLL_DN_SYS_CMD1021: // 系统类,系统重新启动
- downlink_analyze_system_cmd0x1021(data,size);
- break;
- case GATEWAY_DN_SYS_CMD1003: //配置mqtt服务器
- downlink_analyze_system_cmd0x1003(data,size);
- break;
- case COLL_DN_SYS_CMD1001: // 升级
- gateway_update_proc(data,size);
- break;
- case OILL_DN_SYS_CMD1031: // 系统类,油罐下行配置
- downlink_oil_sys_cmd0x1031(data,size);
- break;
- }
- }
- /*----------------------------------------------------------------------
- * 解析网络下发的 状态类的信息 固件信息下行指令 0x1001
- * ---------------------------------------------------------------------*/
- void downlink_analyze_status_cmd0x1001(uint16_t type, uint8_t *data,uint16_t size)
- {
- uint8_t index = 0;
- uint8_t sendBuff[160];
- uint8_t sendLen = 0;
- downlinkStatusCmd0x1001 *pMsg = NULL;
- pMsg = (downlinkStatusCmd0x1001*)data;
- if(pMsg->gateway_sn!=downlink_config.gateway_id) return;
- memset(sendBuff,0,sizeof(sendBuff));
- switch(pMsg->targetType){
- case 0x0101: // 网关
- uplink_tax_statusmcmd_0x2001(sendBuff,&sendLen,pMsg->targetType,0);
- tax_net_send(sendBuff,sendLen,FIRST_TYPE_STATUS,COLL_UP_STATUS_CMD2001);
- break;
- case 0x0201: // 采集器
-
- break;
- case 0x0301: // 液位仪采集器
- uplink_tax_statusmcmd_0x2001(sendBuff,&sendLen,pMsg->targetType,0);
- tax_net_send(sendBuff,sendLen,FIRST_TYPE_STATUS,COLL_UP_STATUS_CMD2001);
- break;
- case 0x0401: // 显示器
- break;
- }
- }
- /*--------------------------------------------------------------
- * 解析网络下发的状态类(0x02)的数据
- * --------------------------------------------------------------*/
- void downlink_analyze_status_cmd(uint16_t type,uint8_t *data, uint16_t size)
- {
- switch(type){
- case COLL_DN_STATUS_CMD1001: // 固件信息下行
- downlink_analyze_status_cmd0x1001(type,data,size);
- break;
- }
- }
- /*--------------------------------------------------------------------
- * 读取液位仪的数据
- * --------------------------------------------------------------------*/
- void downlink_oil_data_cmd0x1021(uint8_t *data,uint16_t size)
- {
- downlinkDataOilCmd0x1021 *pmsg = NULL;
- pmsg = (downlinkDataOilCmd0x1021*)data;
- if((pmsg->gateway_sn!=downlink_config.gateway_id) && (pmsg->gateway_sn!=0xFFFFFFFF)) return ;
- timeout_stop(&g_timeOut);
- g_runData.bsendOilData = READ_TIMER;
- g_runData.bread = 1;
- }
- /*--------------------------------------------------------------------
- * 数据类 0x03 类的信息
- * -------------------------------------------------------------------*/
- void downlink_analyze_data_cmd(uint16_t type,uint8_t *data, uint16_t size)
- {
- switch(type){
- case SECOND_TYPE_DATA_TAX : //报税口类
- break;
- case SECOND_TYPE_DATA_LED : // 显示屏
- break;
- case COLL_OIL_DATA_CMD1021 : // 液位仪
- downlink_oil_data_cmd0x1021(data,size);
- break;
- }
- }
- extern uint16_t crc16_get(uint8_t *data, uint8_t size);
- int downlink_gateway_analyze(uint8_t *data, uint16_t len)
- {
- int ret = 1;
- uint16_t crc,fcrc;
- uint8_t msg_type = 0;
- sverMsgHeader *p_msg = (sverMsgHeader *)data;
- if(p_msg->len > 128)
- return ret;
- crc = _crc16_get(data,p_msg->len+FRAME_HEADER_LEN-2);// len-2);
- fcrc = p_msg->info[p_msg->len-1];
- fcrc = (fcrc<<8)|p_msg->info[p_msg->len-2];
- if(p_msg->frame_header != 0xfefe){printf("rcv net data head error\r\n"); return 0;}
- if(crc != fcrc) {printf("rcv net data crc error\r\n"); return 0;}
- msg_type = p_msg->msgtypeFirst;
- printf("msg_type:%d\n",msg_type);
- switch(msg_type)
- {
- case FIRST_TYPE_SYST: //0x01
- downlink_analyze_system_cmd(p_msg->msgtypeSecd,(uint8_t*)p_msg->info,p_msg->len);
- break;
- case FIRST_TYPE_STATUS: // 0x02
- downlink_analyze_status_cmd(p_msg->msgtypeSecd,(uint8_t*)p_msg->info,p_msg->len);
- break;
- case FIRST_TYPE_DATA: // 0x03
- downlink_analyze_data_cmd(p_msg->msgtypeSecd,(uint8_t*)p_msg->info,p_msg->len);
- break;
- default:
- break;
- }
- return 0;
- }
|