zack пре 1 година
родитељ
комит
6840b7875a
10 измењених фајлова са 289 додато и 76 уклоњено
  1. 1 1
      Core/Inc/ConfigMacros.h
  2. 2 2
      Core/Inc/tt808.h
  3. 11 13
      Core/Src/freertos.c
  4. 15 12
      Core/Src/interface.c
  5. 7 4
      Core/Src/key.c
  6. 3 2
      Core/Src/main.c
  7. 34 7
      Core/Src/mba32a.c
  8. 15 12
      Core/Src/ml307a.c
  9. 180 22
      Core/Src/tt808.c
  10. 21 1
      MDK-ARM/dtu.uvoptx

+ 1 - 1
Core/Inc/ConfigMacros.h

@@ -15,7 +15,7 @@
 #define openBT			1	
 #define openUpload		1	
 #define updateMenu		1	
-#define debugkeyinfo	1
+#define debugkeyinfo	0
 #define open16			11	//¿ª×Ö
 #define open16			11	//¿ª×Ö
 #define close16			12	//¹Ø×Ö

+ 2 - 2
Core/Inc/tt808.h

@@ -13,7 +13,7 @@ void MIPURCHandle(void);
 void ReMIPURC(void);
 void time_bj(void);
 void ReU4Proces(void);
-
+void Process_str_collections(void);
 void printBytes(uint8_t *data, size_t length);
 void BindeWork(char TEMP[],uint64_t addr, char sname[],uint16_t mac[],char snconn[],char snced[],char sndis[]);
 void reconn(void);
@@ -41,7 +41,7 @@ extern bool phonenull;
 uint16_t swapBytes16(uint16_t value);
 uint32_t swapBytes32(uint32_t value);
 void REPdaMode(void);
-
+void MqttRe(void);
 void processPdadata(char MACtemp[], uint8_t mactemp[],uint16_t mac[]);
 extern bool reAuth;
 #endif /*__TT808_H*/

+ 11 - 13
Core/Src/freertos.c

@@ -170,6 +170,7 @@ void StartScanKeyTask(void const * argument)
 	   if(BT_Rebuffer[4]==0x01)
 	   {
 		   printf("\r\n***接收完成\r\n");
+		   
 		   macsetptr->macWorked+=1;//个数
 		   macsetptr->worked[workedLock]=1;	
 		   devices[workedLock]=1;
@@ -187,7 +188,8 @@ void StartScanKeyTask(void const * argument)
 			for(int i = 0; i < NUM_OF_DEVICES; i++) {
 				if(macsetptr->worked[i]) {
 					macsetptr->worked[i] = false;//置0
-					tt808FsFunc(macsetptr->mactemp[i], 6, MessageID_uploadLock);
+					
+					tt808FsFunc(macsetptr->mactemp[i], 6, MessageID_uploadLock);//上传锁信息
 				}
 				else
 				{
@@ -201,16 +203,10 @@ void StartScanKeyTask(void const * argument)
 		   printf("\r\n***流水号异常\r\n");
 		   
 		   macsetptr->macWorkedfail+=1;
-		   //USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
 	   }
 	   memset(BT_Rebuffer,0,20);
    }
-   
-   if((macsetptr->macWorked == macsetptr->macCount) && menu.current==3)
-   {
-	   menu.current=5;
-	   refresh=true;
-   }
+
 
   }
   /* USER CODE END StartScanKeyTask */
@@ -233,6 +229,7 @@ void StarBT4GTask(void const * argument)
     osDelay(1);	
 	{
 		Printf_u4u5logbyU1();			//打印log0
+		MqttRe();						//MQTT
 		ReMIPURC();						//各式接收处理1
 		ReU4Proces();					//2
 		MIPURCHandle();					//平台接收处理(鉴权应答等)3 
@@ -260,17 +257,18 @@ void StartTestTask(void const * argument)
 	RESET_4G_MODULE();				//4G启动(复位) 标志位->reset4Gmodule
 	Pre_processing_4G();			//4G传递准备   标志位->module4G_F
 
-
 	if(Allopen)
 	{
 		Allopen=false;
 		uint8_t macset[]={macsetptr->macCount&0xff};
 		tt808FsFunc(macset, 1, MessageID_Getauth);//全部打开获取权限
+		
 	}		
+	
    if(reAuth)
    {//权限回复正确
 	  HAL_Delay(500);
-	  reAuth = false;
+	  reAuth = false;		
 	   if(menu.enter==0)//开锁
 	   {
 		    openOrClose = menu.enter;
@@ -319,8 +317,8 @@ void StartloginfoTaskTask(void const * argument)
 #if openUpload == 1
 	if(MgnssFlag)
 	{	
-//		USART_SendString(&huart4, "AT+CSQ\r\n");
-//		USART_SendString(&huart4, "AT+MGNSSLOC\r\n");
+		USART_SendString(&huart4, "AT+CSQ\r\n");
+		USART_SendString(&huart4, "AT+MGNSSLOC\r\n");
 	}
 #endif
 	
@@ -333,7 +331,7 @@ void StartloginfoTaskTask(void const * argument)
 		nomalCount=0;
 		if(uploaweork)
 		{
-			//tt808FsFunc((uint8_t*)&(dblocptr->location.alarmFlagH), 34, MessageID_location);
+			tt808FsFunc((uint8_t*)&(dblocptr->location.alarmFlagH), 34, MessageID_location);
 			
 			//*向主题a发布(保活心跳30s)
 			MQTT_PUB(0,topica,"1234","+MQTTURC: \"puback\"");

+ 15 - 12
Core/Src/interface.c

@@ -237,10 +237,21 @@ void PleaseWakeUp(void)//
 void SecondMain(void)//次主界面
 {
 	char openCount[6]; // 数字1转换为字符串形式最多需要2个字符,再加上终止符'\0'共6个字符的空间
-	macsetptr->openLockCount = macsetptr->macWorked;
-	sprintf(openCount, "%u", macsetptr->openLockCount);
-	
 	char closeCount[6]; // 数字1转换为字符串形式最多需要2个字符,再加上终止符'\0'共6个字符的空间
+	
+	//*所有锁已
+	if(macsetptr->sta==BtUnlocking)
+	{
+		OLED_ShowChinese(85,5,18,16,1);//解
+		macsetptr->openLockCount = macsetptr->macWorked;
+	}
+	else if(macsetptr->sta==LockSuccessClosed)
+	{
+		OLED_ShowChinese(85,5,17,16,1);//施
+		macsetptr->closeLockCount = macsetptr->macWorked;
+	}
+	
+	sprintf(openCount, "%u", macsetptr->openLockCount);
 	sprintf(closeCount, "%u", macsetptr->closeLockCount);
 	//*解封
 	OLED_ShowChinese(25,30,11,12,1);//解
@@ -261,15 +272,7 @@ void SecondMain(void)//
 	OLED_ShowString(94,50,(unsigned char*)closeCount,12,1);
 	OLED_ShowString(100,50,(unsigned char*)")",12,1);
 	
-	//*所有锁已
-	if(macsetptr->sta==BtUnlocking)
-	{
-		OLED_ShowChinese(85,5,18,16,1);//解
-	}
-	else if(macsetptr->sta==LockSuccessClosed)
-	{
-		OLED_ShowChinese(85,5,17,16,1);//施
-	}
+
 	OLED_ShowChinese(5,5,71,16,1);//所
 	OLED_ShowChinese(25,5,72,16,1);//有	
 	OLED_ShowChinese(45,5,69,16,1);//锁

+ 7 - 4
Core/Src/key.c

@@ -171,20 +171,20 @@ uint8_t KEY_3_Scan_PDA(void)
 						{
 							if(menu.down==0)
 							{
-								workedLock=0;
-								memset(devices,0,8);
+	printf("$$操作集合:%d%d%d%d%d%d%d%d\r\n",devices[0],devices[1],devices[2],devices[3],devices[4],devices[5],devices[6],devices[7]);
 								//printf("一键解封\r\n");
 								SET_MENU_STATUS(2,2,0,0);
 								Allopen=true;
+								
 								break;
 							}
 							else if(menu.down==1)
 							{
-								workedLock=0;
-								memset(devices,0,8);
+	printf("$$操作集合:%d%d%d%d%d%d%d%d\r\n",devices[0],devices[1],devices[2],devices[3],devices[4],devices[5],devices[6],devices[7]);
 								//printf("一键施封\r\n");
 								SET_MENU_STATUS(2,1,1,1);
 								Allopen=true;
+								
 								break;
 							}
 							else if(menu.down==2)//查看绑定信息
@@ -251,12 +251,14 @@ uint8_t KEY_4_Scan_PDA(void)
 						{
 							reAuth = false;
 							menu.current=1;
+							menu.enter=0;
 							refresh=true;
 							break;
 						}
 						case 3:
 						{
 							reAuth = false;
+							menu.enter=0;
 							menu.current=1;
 							refresh=true;
 							break;
@@ -269,6 +271,7 @@ uint8_t KEY_4_Scan_PDA(void)
 						case 5:
 						{
 							menu.current=1;
+							menu.enter=0;
 							//SET_MENU_STATUS(1,2,0,1);
 							refresh=true;
 							break;

+ 3 - 2
Core/Src/main.c

@@ -56,7 +56,7 @@ void Jump_interface_PDA(void);
 uint16_t sys_mode[2];
 bool wdiFlag = false;
 
-char version[] = "\r\nVER:dtu-20240419\r\n";
+char version[] = "\r\nVER:dtu-20240428\r\n";
 /* USER CODE END PM */
 
 /* Private variables ---------------------------------------------------------*/
@@ -249,11 +249,12 @@ void ReadSNname(void)
 	for(int i = 0; i < 8; i++) {
 		if(mac[i*12] == 0) {
 			//Todo
-			printf("mac%d未绑定\r\n", i+1);
+			//printf("mac%d未绑定\r\n", i+1);
 		} else {
 			sprintf(lockinfo.SNname[i], "%s", macStr_init[i]);
 		}
 	}
+	Process_str_collections();//处理连接字符串	
 	
 }
 /* USER CODE END 4 */

+ 34 - 7
Core/Src/mba32a.c

@@ -305,7 +305,6 @@ void close_lock(BtFrame btframe)		//
 
 
 
-
 int workedLock = 0; 		// 用于跟踪已连接的设备的数量
 int devices[8] = {0}; 	 	// 数组用于跟踪设备的工作状态
 
@@ -314,41 +313,69 @@ void connectDevices(bool openClose)
     char* snName = NULL;
     char* snConn = NULL;
     //char* snEd = NULL;
+	workedLock=0;
+	memset(devices,0,8);
+	int i=0;
+	
+	//printf("$$锁总数:%d\r\n",macsetptr->macCount);
 	while(workedLock < macsetptr->macCount)//当所以操作完成跳出循环
 	{
-		for(int i=0;i<macsetptr->macCount;i++)//循环遍历所有设备空间
+	//printf("$$已操作数:%d\r\n",workedLock);
+	//printf("$$锁w总数:%d\r\n",macsetptr->macCount);
+		for(i=0;i<macsetptr->macCount;i++)//循环遍历所有设备空间
 		{
 			if (devices[i] == 0)  // 检查设备是否完成操作
 			{
+	printf("$$操作集合:%d%d%d%d%d%d%d%d\r\n",devices[0],devices[1],devices[2],devices[3],devices[4],devices[5],devices[6],devices[7]);
 				//*获取当前连接字符串
 				snName = lockinfo.SNname[i];
 				snConn = macsetptr->SNCONN[i];
 				//snEd = macsetptr->SNED[i];
-                printf("设备%d执行操作->%s\n", i, snName);//0-7:1-8
+                printf("%s设备%d执行操作->%s\n", snName, (i+1), snConn);//0-7:1-8
 				if (snName != NULL && sendCmd_BT(snConn, "ERROR", 1, 1)) //进行连接 macsetptr->Btconn[workedLock]
 				{
 					btframe.serialNum+=1;
 					if (openClose) {
 						close_lock(btframe); //施封操作
-						printf("已发送施封报文至设备-%s!,流水号%04X\n", snName, btframe.serialNum);
+						//printf("已发送施封报文至设备-%s!,流水号%04X\n", snName, btframe.serialNum);
 					}
 					else if(!openClose) {
 						open_lock(btframe); //解封操作
-						printf("已发送解封报文至设备-%s!,流水号%04X\n", snName, btframe.serialNum);
+						//printf("已发送解封报文至设备-%s!,流水号%04X\n", snName, btframe.serialNum);
 					}
 					
 				}
+				HAL_Delay(200);
 			}
 		}
-		printf("延时1000\r\n");
-		HAL_Delay(1000);
 	}
+	i=0;	  
+	for(int i=0;i<8;i++)
+   {
+	   devices[i]=0;
+   }
+	menu.current=5;
+	refresh=true;
+	
+	
+	
 }
 
 bool openOrClose =false;
 void open_close_lock(void)
 {
 	connectDevices(openOrClose);
+	if(macsetptr->macWorked == macsetptr->macCount) 
+	{
+	   printf("macsetptr->macWorked:%d,workedLock:%d\r\n", macsetptr->macWorked,workedLock);
+	   printf("$$操作集合:%d%d%d%d%d%d%d%d\r\n",devices[0],devices[1],devices[2],devices[3],devices[4],devices[5],devices[6],devices[7]);
+	
+	   for(int i=0;i<8;i++)
+	   {
+		   devices[i]=0;
+	   }
+	   printf("$$操作集合:%d%d%d%d%d%d%d%d\r\n",devices[0],devices[1],devices[2],devices[3],devices[4],devices[5],devices[6],devices[7]);
+	}
 
 }
 

+ 15 - 12
Core/Src/ml307a.c

@@ -36,7 +36,7 @@ extern Ipaddr ipaddr;
 //*本模块方法
 void ML307AReset(void);
 void RTCtime(void);
-uint8_t MQTTCONN(void);
+void MQTTCONN(void);
 void TcpConn(char *value, uint8_t cid, char *IPaddr, uint16_t port, uint8_t tcpConnmode)
 {
 	char *ptr = value;
@@ -150,7 +150,16 @@ void ML307A_Init(void)
 
 			}
 			MQTTCONN();//*连接MQTT
-			printf("#连接MQTT\r\n");
+			
+			char MQTT_SUBbuf[50]; // 调整缓冲区大小以适应新的字符串长度
+			// 拼接订阅指令字符串
+			snprintf(MQTT_SUBbuf, 50, "AT+MQTTSUB=0,\"%s\",1\r\n", topicb);
+			
+			// 发送订阅指令并检查结果
+			if (sendCmd_4G(MQTT_SUBbuf, "+MQTTURC: \"suback\"", 1, 1)) {
+				printf("#订阅成功\r\n");
+			}
+	
 			//break;
 		}
 		case 4:
@@ -193,8 +202,8 @@ void ML307A_Init(void)
 		
 	}
 
-	menu.current=0;//默认进入PDA
-	refresh=true;	
+//	menu.current=0;//默认进入PDA
+//	refresh=true;	
 
 }
 
@@ -249,20 +258,14 @@ uint8_t MQTT_PUB(uint8_t connect_id, char *topic, char *mesg, char* pRes)
 /**
   * @breaf MQTT初始化
   */
-uint8_t MQTTCONN(void)
+void MQTTCONN(void)
 {
 	if(MQTT_CONN((char*)PCMQTTADDR,PCMQTTPORT,"dtu",(char*)PCMQTTUSER,(char*)PCMQTTPSWD,"+MQTTURC: \"conn\",0,0"))
 	{
 		printf("#连接MQTT成功\r\n");
 		//*订阅
-		char MQTTSUB[150];
-		sprintf(MQTTSUB, "AT+MQTTSUB=0,%s,1\r\n", topicb);
-		if(sendCmd_4G(MQTTSUB, "+MQTTURC: \"suback\"", 1, 1)) {
-			printf("#订阅成功\r\n");
-			return 1;
-		}
+
 	}
-	return 0;
 }
 
 /**

+ 180 - 22
Core/Src/tt808.c

@@ -127,9 +127,9 @@ void MessageHandle(uint16_t MessageID)
 	tcppacket[index++] = xorBytes(&tcppacket[1],12+Messagetemp_length);;  // Set the checksum
 	tcppacket[index++] = TT808FLAG;      // Set the flag at the end
 	
-	for (int i = 0; i < index; i++) {
-		printf("%02X ", tcppacket[i]);  // 以十六进制格式打印每个元素
-	}
+//	for (int i = 0; i < index; i++) {
+//		printf("%02X ", tcppacket[i]);  // 以十六进制格式打印每个元素
+//	}
 	printf("\r\n");
 	
 	
@@ -496,6 +496,172 @@ MacSet *macsetptr = &macset;
 char Newip[30];
 extern bool wdiFlag;
 
+char MqttReBuff[200];
+char MqttWorkBuff[200];
+char Mqtttotal_len[10];
+char payload_len[10];
+uint8_t Mqtttotal_lenu8=0;
+uint8_t payload_lenu8=0;
+
+void Process_str_collections(void) {
+    // 循环遍历从0到macCount-1的每个索引
+    for (int i = 0; i < macset.macCount; i++) {
+        AtPRocess(
+            lockinfo.SNname[i],
+            macset.SNCONN[i],
+            macset.SNED[i],
+            macset.SNDIS[i]
+        );
+    }
+}
+void MqttRe(void)
+{
+	 if(strncmp((const char *)U4_4GrecvBuff, "+MQTTURC: \"publish\"",  strlen("+MQTTURC: \"publish\""))==0)//接收到发布信息
+	 {
+		 memcpy(MqttReBuff,&U4_4GrecvBuff[2],U4_4GrecvLength-2);//全部copy
+		 //printf("@接收到Mqtt消息%s\r\n",MqttReBuff);
+		 extractString(MqttReBuff, Mqtttotal_len,4 ,5);//采集<total_len>
+		 extractString(MqttReBuff, payload_len,5 ,6);//采集<payload_len>
+		 Mqtttotal_lenu8 = atoi(Mqtttotal_len);
+		 payload_lenu8 = atoi(payload_len);
+		 
+		 
+		 //printf("%d,%d\r\n",Mqtttotal_lenu8,payload_lenu8);
+		 if(Mqtttotal_lenu8==payload_lenu8)
+		 {
+			memcpy(MqttWorkBuff, &MqttReBuff[U4_4GrecvLength - payload_lenu8-4], payload_lenu8);
+			printf("%s\r\n",MqttWorkBuff);
+			 
+		 }
+		 //*处理摘取字段
+		 if(strncmp((const char*)&MqttWorkBuff, "DTU+FLASH=deleteloc",  strlen("DTU+FLASH=deleteloc"))==0)
+		 {
+				dblocptr->headinfo.loc_pushIndex=0;
+				dblocptr->headinfo.loc_pullIndex=0;
+				Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,4);//更新刻度
+				printf("更新刻度成功\r\n");
+		 }	
+		 else if(strncmp((char*)MqttWorkBuff, "DTU+JT808_IMEI=",  strlen("DTU+JT808_IMEI="))==0)//修改IME号
+		 {
+			memcpy(DTUurc1,MqttWorkBuff+15,12);
+			const char *hex = (const char *)DTUurc1;  // 将 uint8_t * 转换为 const char *
+			int size = strlen(hex) / 2;  // 计算二进制数据的长度
+			unsigned char *bin = (unsigned char *)malloc(size);  // 分配足够的内存用于存储二进制数据
+			rlt = hex2bin(bin, hex);  // 调用hex2bin函数进行转换
+			memcpy(DTUurc, bin, rlt);  // 将 bin 中的 rlt 个字节复制到 MIPurc1 中						接收到的数据放入MIPurc1中
+			free(bin);  // 释放内存  
+			 
+			reIME = true;
+			HAL_Delay(500);
+		 }		 
+		 else if(strncmp((char*)MqttWorkBuff, "DTU+JT808_SERVER=",  strlen("DTU+JT808_SERVER="))==0)
+		 {
+			memcpy(input_strings,MqttWorkBuff+17,20);
+
+			extractStringPoint(input_strings,reIp0,0,1);
+			extractStringPoint(input_strings,reIp1,1,2);
+			extractStringPoint(input_strings,reIp2,2,3);
+			extractStringPoint(input_strings,reIp3,3,4);
+			extractStringPoint(input_strings,reIpP,4,5);
+
+			ipaddr.IP0 = atoi(reIp0);
+			ipaddr.IP1 = atoi(reIp1);
+			ipaddr.IP2 = atoi(reIp2);
+			ipaddr.IP3 = atoi(reIp3);
+			ipaddr.IPp = atoi(reIpP);
+			//printf("%d.%d.%d.%d:%d",ipaddr.IP0,ipaddr.IP1,ipaddr.IP2,ipaddr.IP3,ipaddr.IPp);
+			HAL_StatusTypeDef writeSta = Flash_WriteBytes((uint16_t*)&(ipaddr.IP0),ReIPAddr,5);
+			 if(writeSta == HAL_OK)
+			 {
+				char *ptr = Newip;
+				ptr += sprintf(ptr, "%d.", ipaddr.IP0);
+				ptr += sprintf(ptr, "%d.", ipaddr.IP1);
+				ptr += sprintf(ptr, "%d.", ipaddr.IP2);
+				ptr += sprintf(ptr, "%d", ipaddr.IP3);
+				printf("更换IP成功\r\n");
+			 }
+			//ptr += sprintf(ptr, ":%d", ipaddr.IPp);
+			//printf("%s\r\n",Newip);
+			HAL_Delay(500);
+			printf("即将重启\r\n");
+			wdiFlag = true;
+		 }
+		 else if(strncmp((char*)MqttWorkBuff, "DTU+VER=?",  strlen("DTU+VER=?"))==0)
+		 {
+			printf("%s\r\n",version);
+		 }
+		 
+	 HAL_StatusTypeDef WriteSta;
+	//*PDA需求	485写入MAC号
+	 if(strncmp((char*)MqttWorkBuff, "DTU+ADDMAC",  strlen("DTU+ADDMAC"))==0)
+	 {
+		macset.macCount=0;
+		workedLock=0;
+		memset(devices,0,8);
+		erase_flash(MacDbBodyAddr);
+		if(payload_lenu8>12){
+			memcpy(macset.MACtemp[0],MqttWorkBuff+11,12);
+			processPdadata(macset.MACtemp[0],macset.mactemp[0],macset.mac[0]);
+			WriteSta= Flash_WriteBytes(macsetptr->mac[0],MacDbBodyAddr,3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(payload_lenu8>25){
+			memcpy(macset.MACtemp[1],MqttWorkBuff+24,12);
+			processPdadata(macset.MACtemp[1],macset.mactemp[1],macset.mac[1]);
+			WriteSta= Flash_WriteBytes(macsetptr->mac[1],MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(payload_lenu8>38){
+			memcpy(macset.MACtemp[2],MqttWorkBuff+37,12);
+			processPdadata(macset.MACtemp[2],macset.mactemp[2],macset.mac[2]);
+			WriteSta= Flash_WriteBytes(macsetptr->mac[2],MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(payload_lenu8>51){
+			memcpy(macset.MACtemp[3],MqttWorkBuff+50,12);
+			processPdadata(macset.MACtemp[3],macset.mactemp[3],macset.mac[3]);
+			WriteSta= Flash_WriteBytes(macsetptr->mac[3],MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(payload_lenu8>64){
+			memcpy(macset.MACtemp[4],MqttWorkBuff+63,12);
+			processPdadata(macset.MACtemp[4],macset.mactemp[4],macset.mac[4]);
+			WriteSta= Flash_WriteBytes(macsetptr->mac[4],MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(payload_lenu8>77){
+			memcpy(macset.MACtemp[5],MqttWorkBuff+76,12);
+			processPdadata(macset.MACtemp[5],macset.mactemp[5],macset.mac[5]);
+			WriteSta= Flash_WriteBytes(macsetptr->mac[5],MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(payload_lenu8>90){
+			memcpy(macset.MACtemp[6],MqttWorkBuff+89,12);
+			processPdadata(macset.MACtemp[6],macset.mactemp[6],macset.mac[6]);
+			WriteSta= Flash_WriteBytes(macsetptr->mac[6],MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(payload_lenu8>103){
+			memcpy(macset.MACtemp[7],MqttWorkBuff+102,12);
+			processPdadata(macset.MACtemp[7],macset.mactemp[7],macset.mac[7]);
+			WriteSta= Flash_WriteBytes(macsetptr->mac[7],MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 
+			
+			 for(int i = 0; i < macset.macCount; i++) {
+				 memset(lockinfo.SNname[i], 0, 13);
+			 }			
+			if(WriteSta == HAL_OK)
+			{
+				printf("更新MAC存储完成共->%d\r\n",macset.macCount);
+			}
+			WriteSta = Flash_WriteBytes(&macsetptr->macCount,MacDbHeadAddr,1);
+			if(WriteSta == HAL_OK)
+			{
+				printf("更新存储刻度完成\r\n");
+			}	
+			ReadSNname();//更新
+			Process_str_collections();//处理连接字符串		
+		}	 
+		 
+		 memset(U4_4GrecvBuff,0,BUFFER_SIZE);
+		 memset(MqttReBuff,0,U4_4GrecvLength);
+		 memset(MqttWorkBuff,0,payload_lenu8);
+	 }	
+}
 //*485测试命令
 void Test485Re(void)
 {
@@ -590,22 +756,11 @@ void AtPRocess(char *value, char conn[],char connected[],char disconn[]) {
     snprintf(conn, strlen(value) + 12, "AT+CONN=%s\r\n", value);
     snprintf(connected, strlen(value) + 14, "+CONNECTED:0,%s", value);
     snprintf(disconn, strlen(value) + 12, "+DISCONN:0,%s", value);
-    printf("%s\r\n", conn);
-    printf("%s\r\n", connected);
-    printf("%s\r\n", disconn);
+//    printf("%s\r\n", conn);
+//    printf("%s\r\n", connected);
+//    printf("%s\r\n", disconn);
 }
 
-void Process_str_collections() {
-    // 循环遍历从0到macCount-1的每个索引
-    for (int i = 0; i < macset.macCount; i++) {
-        AtPRocess(
-            lockinfo.SNname[i],
-            macset.SNCONN[i],
-            macset.SNED[i],
-            macset.SNDIS[i]
-        );
-    }
-}
 
 void processPdadata(char MACtemp[], uint8_t mactemp[],uint16_t mac[])
 {
@@ -852,6 +1007,8 @@ void MIPURCHandle(void)
 				{
 					printf("@心跳应答yes\r\n");
 					printf("@TCP连接成功!!\r\n");
+					menu.current=0;
+					refresh=true;
 				}
 				else if(YESorNO==NO)
 				{
@@ -890,17 +1047,18 @@ void MIPURCHandle(void)
 			{
 				if(YESorNO==YES)
 				{
-					printf("@锁信息上传应答yes\r\n");
+					printf("@锁信息上传应答yes\r\n");				
+					if(sendCmd_BT("AT+DISCONN=0\r\n","ERROR",1,2))
+					{
+						printf("已断开连接\r\n");
+					}
 				}
 				else if(YESorNO==NO)
 				{
 					printf("@锁信息上传应答no\r\n");					
 				}	
 				
-				if(sendCmd_BT("AT+DISCONN=0\r\n","ERROR",1,1))
-				{
-					printf("已断开连接\r\n");
-				}
+
 				memset(MIPurc,0,rlt);//rlt下发长度 
 			}
 		 }

+ 21 - 1
MDK-ARM/dtu.uvoptx

@@ -153,7 +153,27 @@
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>btframe</ItemText>
+          <ItemText>payload_lenu8</ItemText>
+        </Ww>
+        <Ww>
+          <count>1</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>Mqtttotal_lenu8</ItemText>
+        </Ww>
+        <Ww>
+          <count>2</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>MqttReBuff</ItemText>
+        </Ww>
+        <Ww>
+          <count>3</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>MqttWorkBuff</ItemText>
+        </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>U4_4GrecvBuff</ItemText>
         </Ww>
       </WatchWindow1>
       <WatchWindow2>