Просмотр исходного кода

2024.06.17
添加1053,2053指令

Signed-off-by: gaochunhui <gaochunhui@cpyypt.cn>

gaochunhui 1 год назад
Родитель
Сommit
c28b02869d

+ 3 - 0
APP/app.c

@@ -679,6 +679,9 @@ void INFO_TASK_Handle(void * p_arg)//
                 tax_send_cmd_0x58(); // 固件信息读取
 //                flag = 1;
             }
+            else if((g_runData.bRead1053)&&(g_runData.read1053Num<2)){
+                tax_send_cmd_0x01_0x1053();
+            }
             else if(g_runData.bReadData && (g_runData.bUpdate==0) ) {//业务数据
                 net_to_read_cmd(); // 处理网络下发的数据
                 //if(g_encodeOpt.benable == 1) tax_process_encoder();

+ 82 - 10
APP/gateway_collect/gateway_collect.c

@@ -407,6 +407,77 @@ void gateway_collect_cmd_0x01_0x1052(uint8_t *data, uint16_t size)
         lora_queue_mem_free(p_msg);
     }
 }
+/*----------------------------------------------------------------------------------
+ *  组成编码器与抬枪信号正反序的数据
+ * ---------------------------------------------------------------------------------*/
+void create_0x01_0x1053(uint8_t *outdata,uint16_t *len,uint16_t rcvType,uint32_t rcvSn,uint16_t targetType,uint16_t targetSn,uint8_t optType, uint8_t cmdType,uint16_t optval)
+{
+    sys1053_2053 *msg = NULL;
+    uint16_t crc = 0;
+    uint8_t send_size = 0;
+    gateway_collect_com_t *p_msg;
+
+    p_msg = (gateway_collect_com_t*)outdata;
+    p_msg->frame_header = 0xfefe;// 帧头
+    p_msg->proto_ver = GATE_COLL_PROTOTYPE;
+    p_msg->seq_no = 0;
+    p_msg->type = 0x01;
+    p_msg->secondType = 0x1053;
+    p_msg->len = sizeof(sys1053_2053) +2;
+
+
+
+    msg = (sys1053_2053*)(outdata+12);
+
+    msg->firstLevelType = DEVICE_GATEWAY;
+    msg->firstLevelSn   = downlink_config.gateway_id;
+    msg->rcvDevType     = rcvType;
+    msg->rcvDevSn       = rcvSn;
+    msg->targetDevType  = targetType;
+    msg->targetDevSn    = targetSn;
+    msg->reserve        = 0;
+    msg->optType        = optType;
+    msg->cmdType        = cmdType;
+    msg->cmdVal         = optval;
+    msg->reserve01      = 0x00;
+
+    send_size =  sizeof(sys1053_2053);
+    crc = _crc16_get((uint8_t *)p_msg,send_size+GATE_COLL_HEAD_LEN);
+    p_msg->taxinfo.info[send_size] = crc&0xff;
+    p_msg->taxinfo.info[send_size+1] = (crc>>8)&0xff;
+
+
+    *len = GATE_COLL_HEAD_LEN + send_size + 2;
+    return;
+}
+
+/*----------------------------------------------------------------------------------
+ *  设置编码器与抬枪信号正反序 0x01 --- 0x1053
+ *   type: 0: 需要组数据  1: 服务器下发的,不用组数据,可直接下发
+ * ---------------------------------------------------------------------------------*/
+void gateway_collect_cmd_0x01_0x1053(uint8_t *data, uint16_t size)
+{
+    char *msg = NULL;
+    uint8_t send_buf[128];
+    gateway_collect_com_t *p_msg;
+
+
+    memset(send_buf,0,sizeof(send_buf));
+
+    p_msg = (gateway_collect_com_t *)send_buf;
+
+    msg = (char *)lora_queue_mem_calloc_must();
+    if(msg) {
+        memcpy(msg, data, size);
+        lora_queue_insert((char *)msg, size);
+        data_dump("send 0x01-0x1053:",data,size);
+        //printf("send 0x01-0x1052:\r\n");
+    }
+    else
+    {
+        lora_queue_mem_free(p_msg);
+    }
+}
 static uint16_t _crc_get_gw(uint8_t *data, uint8_t size)
 {
     uint8_t i, crc = 0;
@@ -434,14 +505,14 @@ int tax_cmd_set(uint8_t cmd, uint8_t *parm, uint8_t size, void *puser)
 	memcpy(fparm, parm, size);
 
 	//caculate crc val;
-	*p_crc = _crc_get_gw(&p_tax_tx->findex, p_tax_tx->flen-1);//校验码为帧号、命令码和参数逐字节的逻辑和	
+	*p_crc = _crc_get_gw(&p_tax_tx->findex, p_tax_tx->flen-1);//校验码为帧号、命令码和参数逐字节的逻辑和
 
 	//send and rcv;
 //	data_dump("tax send", (uint8_t *)p_tax_tx, p_tax_tx->flen + 2);
 //	uart_msg_send(uart, (char *)p_tax_tx, p_tax_tx->flen + 2);
 	send_len = p_tax_tx->flen + 2;
 	memcpy(puser,p_tax_tx,send_len);
-	
+
 	return send_len;
 }
 /*-----------------------------------------------------------------------------------
@@ -476,11 +547,11 @@ int tax_cmd_set_0x8C(uint8_t cmd,uint8_t *parm, uint8_t size, void *puser)
 static uint16_t _crc_get1(uint8_t *data, uint8_t size)
 {
 	uint8_t i, crc = 0;
-	
+
 	for(i = 0;i < size;i++){
 		crc ^=data[i];
 	}
- 
+
 	return crc;
 }
 
@@ -554,11 +625,11 @@ int ytsf_cmd_set(uint8_t port, uint8_t cmd, uint8_t *parm, uint8_t size, void *
 	memcpy(fparm, parm, size);
         //printf("======================port = %d\r\n",port);
 	//caculate crc val;
-	*p_crc = _crc16_get(&p_tax_tx->fhead, p_tax_tx->flen);//校验码为帧号、命令码和参数逐字节的逻辑和	
+	*p_crc = _crc16_get(&p_tax_tx->fhead, p_tax_tx->flen);//校验码为帧号、命令码和参数逐字节的逻辑和
 	*p_crc = htons(*p_crc);
 	send_size = p_tax_tx->flen + 2;
 	_ytsf_data_code(send_buf, &send_size);	/* 编码发送 */
-	
+
 	memcpy(puser,p_tax_tx,send_size);
 
 	return send_size;
@@ -1522,17 +1593,18 @@ GATEWAY_COLL_0x6C:
     return 0;
 }
 /*---------------------------------------------------------------------
- * 透传指令 0x01----0x2052
+ * 透传指令 0x01----0x2052,2053
  * -------------------------------------------------------------------*/
-int collect_rcv_analyze0x01_0x2052(uint8_t *data, uint8_t len)
+int collect_rcv_analyze0x01_0x2052(uint16_t cmd,uint8_t *data, uint8_t len)
 {
-    printf("收到0x01---0x1052\r\n");
+    printf("收到指令:0x01---0x%04x\n",cmd);
 
     tax_net_send_0x01_0x1052(data,len);
 
     timeout_stop(&g_taxSendTime);
     return 0;
 }
+
 /*-----------------------------------
  *  向服务器发送网关的信息
  * ----------------------------------*/
@@ -1549,7 +1621,7 @@ void gateway_net_send_gatewayMsg(void)
         g_runData.bsendgatewayfirmMsg = 0;
         printf("send gateway msg to server\r\n");
     }
-		
+
     return;
 }
 

+ 19 - 1
APP/gateway_collect/gateway_collect.h

@@ -166,6 +166,22 @@ typedef struct _TAX_FIRM_MSG_{
     char info[160];       //数据内容
 }__attribute__((packed))taxFirmMsg;
 
+/* 0x01---0x1053 0x1023指令的格式 */
+typedef struct _sys_1053_2053_
+{
+    uint16_t firstLevelType;    //一级设备类型
+    uint32_t firstLevelSn;      //一级设备SN
+    uint16_t rcvDevType;        // 接收设备类型
+    uint32_t rcvDevSn;          // 接收设备SN
+    uint16_t targetDevType;     // 目标设备类型
+    uint32_t targetDevSn;       // 目标设备SN
+    uint32_t reserve;
+    uint8_t optType;            // 执行操作1:设置 2:读取
+    uint8_t cmdType;            // 执行指令 1:编码器与抬枪信号正反序
+    uint16_t cmdVal;      // 1:正序 2:反序 其它:无
+    uint32_t reserve01;           // 预留
+}__attribute__((packed))sys1053_2053;
+
 typedef  union TAX_DATA_INFO_{
     tax_query_info_t data; // 业务数据
     taxComHead comdata; //心跳 查询固件信息 设备重新启动信息
@@ -211,11 +227,13 @@ extern void gateway_collect_set_cmd0x5C(uint8_t *data, uint8_t len,uint8_t coll_
 extern void gateway_collect_set_cmd0x5D(uint8_t curCollIndex,uint32_t device_sn,uint16_t targettype,uint8_t cmd);
 extern void gateway_collect_cmd_0x01_0x1052(uint8_t *data, uint16_t size);
 
+extern void create_0x01_0x1053(uint8_t *outdata,uint16_t *len,uint16_t rcvType,uint32_t rcvSn,uint16_t targetType,uint16_t targetSn,uint8_t optType, uint8_t cmdType,uint16_t optval);
+extern void gateway_collect_cmd_0x01_0x1053(uint8_t *data, uint16_t size);
 
 extern int collect_rcv_analyze0x66(uint8_t *data, uint8_t len);
 extern int collect_rcv_analyze0x68(uint8_t *data, uint8_t len);
 extern int collect_rcv_analyze0x6C(uint8_t *data, uint8_t len);
-extern int collect_rcv_analyze0x01_0x2052(uint8_t *data, uint8_t len);
+extern int collect_rcv_analyze0x01_0x2052(uint16_t cmd, uint8_t *data, uint8_t len);
 
 extern void gateway_net_send_gatewayMsg(void);
 extern void up_send_log_srcdata(uint8_t *data,uint16_t len);

+ 2 - 0
APP/globalDef.h

@@ -158,6 +158,8 @@ typedef struct _RUN_DATA_{
     uint8_t bfirstSend0x56; // 是否是上电第一次发送心跳包,1:是第一次 0:不是
     uint8_t bfirstRead0x83; // 第一次读取83指令 1:第一次读取  0:不是
     uint8_t bRead0x58;  // 是否读取0x58指令
+    uint8_t bRead1053;
+    uint8_t read1053Num;
     uint8_t bReadData; // 可以读取业务数据了
     uint16_t collstatus; // 所有采集器心跳包是否已经读取,按位判断,那位是1那位就读取过
     uint8_t curCollIndex; // 当前采集器的索引

+ 30 - 2
APP/network/downlink.c

@@ -89,6 +89,7 @@ static void downlink_config_init(uint8_t step,uint8_t flag,uint8_t configNo)
         g_runData.bfirstSend0x56 = 0;
         g_runData.bfirstRead0x83 = 0;
         g_runData.bRead0x58 = 0;
+        g_runData.read1053Num = 0;
         g_runData.ballowRead58 = 0;
         g_runData.bsendUpdateStatus = 0;
         g_readCmd58.nodeCur = 0;
@@ -783,6 +784,31 @@ void downlink_analyze_system_cmd0x1052(uint8_t *data,uint16_t size)
 
     return;
 }
+
+/*--------------------------------------------------------------
+ *  系统类(0x01) (0x1053)
+ * --------------------------------------------------------------*/
+void downlink_analyze_system_cmd0x1053(uint8_t *data,uint16_t size)
+{
+    int ret = 0;
+
+    downlinkSysCmd0x1053 *pmsg = NULL;
+
+    pmsg = (downlinkSysCmd0x1053*)(data+12);
+
+    if(pmsg->firstLevelSn != downlink_config.gateway_id) return;
+
+
+
+    printf("rcv cmd 1053\r\n");
+
+    if(pmsg->targetDevType != DEVICE_GATEWAY){
+        g_runData.bNetCmd = 1;
+        save_comme_queue(0x01, 0x1053,data,size);
+    }
+
+    return;
+}
 /*--------------------------------------------------------------
  *  解析网络下发的 系统类(0x01)的数据
  * --------------------------------------------------------------*/
@@ -841,7 +867,9 @@ void downlink_analyze_system_cmd(uint16_t type, uint8_t *data, uint16_t size)
     case GATEWAY_DN_SYS_CMD1052:// 系统类, 透传指令
         downlink_analyze_system_cmd0x1052(data,size);
         break;
-
+    case GATEWAY_DN_SYS_CMD1053:// 系统类,
+        downlink_analyze_system_cmd0x1053(data,size);
+        break;
     }
 }
 /*----------------------------------------------------------------------
@@ -1039,7 +1067,7 @@ int downlink_gateway_analyze(uint8_t *data, uint16_t len)
     {
         case FIRST_TYPE_SYST: //0x01
             //downlink_analyze_system_cmd(p_msg->msgtypeSecd,(uint8_t*)p_msg->info,p_msg->len);
-            if(p_msg->msgtypeSecd == 0x1052)
+            if((p_msg->msgtypeSecd == 0x1052) || (p_msg->msgtypeSecd== 0x1053))
                 downlink_analyze_system_cmd(p_msg->msgtypeSecd,data,len);
             else
                 downlink_analyze_system_cmd(p_msg->msgtypeSecd,(uint8_t*)p_msg->info,p_msg->len);

+ 19 - 0
APP/network/downlink.h

@@ -259,6 +259,25 @@ typedef struct _downlink_system_cmd_0x1052_{
     uint8_t  info[128];  // 透传的数据
 }__attribute__((packed)) downlinkSysCmd0x1052;
 
+/* 0x01---0x1053 0x1023指令的格式 */
+typedef struct _downlink_system_cmd_0x1053_
+{
+    uint16_t firstLevelType;    //一级设备类型
+    uint32_t firstLevelSn;      //一级设备SN
+    uint16_t rcvDevType;        // 接收设备类型
+    uint32_t rcvDevSn;          // 接收设备SN
+    uint16_t targetDevType;     // 目标设备类型
+    uint32_t targetDevSn;       // 目标设备SN
+    uint32_t reserve;
+    uint8_t optType;            // 执行操作1:设置 2:读取
+    uint8_t cmdType;            // 执行指令 1:编码器与抬枪信号正反序
+    uint16_t cmdVal;      // 1:正序 2:反序 其它:无
+    uint32_t reserve01;           // 预留
+}__attribute__((packed))downlinkSysCmd0x1053;
+
+
+
+
 /* 状态信息 固件信息下行 0x1001*/
 typedef struct _downlink_status_cmd_0x1001_{
     uint32_t gateway_sn; // 网关ID

+ 1 - 0
APP/network/uplink.h

@@ -48,6 +48,7 @@ enum {
     COLL_DN_SYS_CMD1034    = 0x1034, // 读取报税口数据
     GATEWAY_DN_SYS_CMD1051 = 0x1051, // 拓盛密文实时读取
     GATEWAY_DN_SYS_CMD1052 = 0x1052, // 透传
+    GATEWAY_DN_SYS_CMD1053 = 0x1053, // 透传
 
 
     COLL_UP_SYS_CMD2001 = 0x2001, //  升级状态上行

+ 1 - 1
APP/network_mgr/sx1268/lora.c

@@ -429,7 +429,7 @@ void lora_queue_proc_test(void)
             gateway_lora_ota_proc(p_msg);
             break;
         case COLL_GATE_TRANSMIT: // 0x01 ͸´«Ö¸Áî
-            collect_rcv_analyze0x01_0x2052((uint8_t*)p_msg,msg_len);
+            collect_rcv_analyze0x01_0x2052(p_msg->secondType,(uint8_t*)p_msg,msg_len);
             break;
         default:
             break;

+ 1 - 1
APP/storage/AT24C128Opt.h

@@ -9,7 +9,7 @@
 
 #define GATEWAY_DEVICE_TYPE 0x0101
 #define GATEWAY_APP_TYPE 0x03
-#define GATEWAY_APP_VERSION 0x01C   //
+#define GATEWAY_APP_VERSION 0x01D   //
 
 #define GATEWAY_UPDATE_FLAG  0x55
 

+ 36 - 2
APP/tax/tax.c

@@ -310,7 +310,11 @@ void net_to_read_cmd(void)
             gateway_collect_cmd_0x01_0x1052(rcvbuff,ret);
             timeout_start(&g_taxSendTime);
         }
-
+        else if((type1 == 0x01) &&(type2 == 0x1053)){
+            printf("下发网络指令 01-1053\n");
+            gateway_collect_cmd_0x01_0x1053(rcvbuff,ret);
+            timeout_start(&g_taxSendTime);
+        }
     }
 
     return;
@@ -1216,7 +1220,7 @@ void tax_send_cmd_0x58(void)
             g_runData.bRead0x58 = 0;
             g_runData.bReadData = 1;
             cmd->nodeCur = 0;
-
+            if(g_runData.read1053Num <2)g_runData.bRead1053 = 0x01;
             printf("cmd 0x58 finish \r\n");
             return;
         }
@@ -1236,6 +1240,36 @@ void tax_send_cmd_0x58(void)
         }
     }
 }
+/*------------------------------------------------------------------
+ *  读取 1053
+ * -------------------------------------------------------------------*/
+void tax_send_cmd_0x01_0x1053(void)
+{
+    uint16_t num,sendlen = 0;
+    static uint8_t index = 0;
+    uint16_t devType;
+    uint32_t devSn;
+    uint8_t send_buff[128] = {0};
+    num = downlink_config.collect_num;
+
+    if( (!timeout_isOut(&g_taxSendTime)) ) { // 超时了
+        return ;
+    }
+
+    devType = 0x0202;
+    devSn = downlink_config.collect_conf[index].collect_no;
+    create_0x01_0x1053(send_buff,&sendlen,devType,devSn,devType,devSn,0x02,0x01,0x00);
+    gateway_collect_cmd_0x01_0x1053(send_buff,sendlen);
+    timeout_start(&g_taxSendTime);
+    index = (index+1)%downlink_config.collect_num;
+    if(index == 0){
+        g_runData.bRead1053 = 0;
+        g_runData.read1053Num++;
+    }
+    return;
+
+}
+
 /*--------------------------------------------------------------------
  *  切换lora信道 0x5B 指令
  * -------------------------------------------------------------------*/

+ 1 - 0
APP/tax/tax.h

@@ -172,6 +172,7 @@ extern void encoder_enable_read_data(uint8_t node, uint8_t port, uint8_t gun);
 
 extern void net_to_read_cmd(void);
 
+extern void tax_send_cmd_0x01_0x1053(void);
 
 extern void encoder_printf(void);
 #endif

+ 1 - 1
Object/uC.uvprojx

@@ -83,7 +83,7 @@
             <RunUserProg1>1</RunUserProg1>
             <RunUserProg2>1</RunUserProg2>
             <UserProg1Name>fromelf --bin !L --output app.bin</UserProg1Name>
-            <UserProg2Name>wbjw_bin.exe -a 08020000 -d 0101 -f 3 -v 01C -r .\app.bin</UserProg2Name>
+            <UserProg2Name>wbjw_bin.exe -a 08020000 -d 0101 -f 3 -v 01D -r .\app.bin</UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
             <nStopA1X>0</nStopA1X>