Browse Source

add newDisplay

zack 1 year ago
parent
commit
a9beb04296
17 changed files with 852 additions and 584 deletions
  1. 128 36
      Core/Inc/ConfigMacros.h
  2. 4 0
      Core/Inc/interface.h
  3. 11 25
      Core/Inc/key.h
  4. 1 0
      Core/Inc/main.h
  5. 7 1
      Core/Inc/mba32a.h
  6. 3 0
      Core/Inc/tt808.h
  7. 4 0
      Core/Inc/usart.h
  8. 53 40
      Core/Src/freertos.c
  9. 99 19
      Core/Src/interface.c
  10. 31 317
      Core/Src/key.c
  11. 81 33
      Core/Src/main.c
  12. 232 64
      Core/Src/mba32a.c
  13. 1 3
      Core/Src/ml307a.c
  14. 4 1
      Core/Src/stm32f1xx_it.c
  15. 144 28
      Core/Src/tt808.c
  16. 13 11
      Core/Src/usart.c
  17. 36 6
      MDK-ARM/dtu.uvoptx

+ 128 - 36
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	//关字
@@ -23,7 +23,7 @@
 #define PDA_MODE		0x0000
 #define DTU_MODE		0x0001	
  
-#define PRINT_MENU_STATUS(key)  		printf("--->%s pressed\t%d   %d   %x   %d\n", key, menu.current, menu.up, (menu.next&0xf), menu.enter)
+#define PRINT_MENU_STATUS(key)  		printf("--->%s pressed\t%d   %d   %x   %d\n", key, menu.current, menu.up, (menu.down&0xf), menu.enter)
 #define PRINT_UUID(message) 			printf("#%s符合设置项\n",message)
 #define PRINT_NUUID(message) 			printf("%s不符合\n",message)
 
@@ -75,6 +75,7 @@
 #define MessageID_heartbeat			0x0002 //心跳
 #define MessageID_location			0x0200 //地址
 #define MessageID_Retrans			0x0704 //地址补传
+#define MessageID_Getauth			0x0223 //地址补传
 #define TCPJMFSRSA  0x001
 #define TCPJMFSNULL 0x000
 
@@ -119,17 +120,16 @@ do {\
 #define START_PROCESS() \
     do { \
         printf("go\r\n"); \
-        menu.current = 0xB1; \
-        tipsflag = Starting; \
+        menu.current = 0; \
         Jump_interface(); \
         OLED_Refresh(); \
     } while(0)
 
-#define SET_MENU_STATUS(current_value, up_value, next_value, enter_value) \
+#define SET_MENU_STATUS(current_value, up_value, down_value, enter_value) \
 do { \
     menu.current = current_value; \
     menu.up = up_value; \
-    menu.next = next_value; \
+    menu.down = down_value; \
     menu.enter = enter_value; \
 	refresh = true;\
 } while(0)
@@ -137,8 +137,8 @@ do { \
 typedef struct
 {
     uint8_t current;		//当前状态索引号
-    uint8_t up; 			//向下一个
-    uint8_t next; 			//向下一个
+    uint8_t up; 			//向
+    uint8_t down; 			//向下
     uint8_t enter; 	    	//确定
 	uint32_t home;
 	uint8_t PreNext;
@@ -173,22 +173,22 @@ do { \
     do { \
         if(menu.up != 3) { \
             menu.up += 1; \
-            menu.next -= 1; \
+            menu.down -= 1; \
         } else if(menu.up == 3) { \
             menu.up = 0; \
-            menu.next = 3; \
+            menu.down = 3; \
         } \
         refresh = true; \
     } while(0)
 	
 #define SWITCH_MENU_DOWN4() \
     do { \
-		if(menu.next!=3){ \
+		if(menu.down!=3){ \
 			menu.up-=1; \
-			menu.next+=1; \
-		} else if(menu.next==3) { \
+			menu.down+=1; \
+		} else if(menu.down==3) { \
 			menu.up=3; \
-			menu.next=0; \
+			menu.down=0; \
 		} \
 		refresh=true; \
     } while(0)
@@ -198,51 +198,142 @@ do { \
     do { \
 		if(menu.up!=1) { \
 			menu.up+=1; \
-			menu.next-=1; \
+			menu.down-=1; \
 		} else if(menu.up==1){ \
 			menu.up=0; \
-			menu.next=1; \
+			menu.down=1; \
 		} \
 		refresh=true; \
     } while(0)	
-
+#define SWITCH_MENU_UP3() \
+    do { \
+		if(menu.up!=2) { \
+			menu.up+=1; \
+			menu.down-=1; \
+		} else if(menu.up==2){ \
+			menu.up=0; \
+			menu.down=2; \
+		} \
+		refresh=true; \
+    } while(0)	
+	
+#define SWITCH_MENU_UPmore() \
+    do { \
+		if(menu.up!=macsetptr->macCount) { \
+			menu.up+=1; \
+			menu.down-=1; \
+		} else if(menu.up==macsetptr->macCount){ \
+			menu.up=0; \
+			menu.down=macsetptr->macCount; \
+		} \
+		refresh=true; \
+    } while(0)		
 #define SWITCH_MENU_DOWN2() \
     do { \
-		if(menu.next!=1){ \
+		if(menu.down!=1){ \
 			menu.up-=1; \
-			menu.next+=1; \
-		} else if(menu.next==1) { \
+			menu.down+=1; \
+		} else if(menu.down==1) { \
 			menu.up=1; \
-			menu.next=0; \
+			menu.down=0; \
+		} \
+		refresh=true; \
+    } while(0)		
+	
+#define SWITCH_MENU_DOWN3() \
+    do { \
+		if(menu.down!=2){ \
+			menu.up-=1; \
+			menu.down+=1; \
+		} else if(menu.down==2) { \
+			menu.up=2; \
+			menu.down=0; \
 		} \
 		refresh=true; \
     } while(0)		
 	
+#define SWITCH_MENU_DOWNmore() \
+    do { \
+		if(menu.down!=macsetptr->macCount){ \
+			menu.up-=1; \
+			menu.down+=1; \
+		} else if(menu.down==macsetptr->macCount) { \
+			menu.up=macsetptr->macCount; \
+			menu.down=0; \
+		} \
+		refresh=true; \
+    } while(0)	
 typedef struct
 {
 	uint16_t macCount;
-	char MACtemp[13];
-	uint8_t mactemp[6];
+	uint16_t macWorked;
+	char MACtemp1[13];
+	char MACtemp2[13];
+	char MACtemp3[13];
+	char MACtemp4[13];
+	char MACtemp5[13];
+	char MACtemp6[13];
+	char MACtemp7[13];
+	char MACtemp8[13];
+	
+	
+	uint8_t mactemp1[6];
+	uint8_t mactemp2[6];
+	uint8_t mactemp3[6];
+	uint8_t mactemp4[6];
+	uint8_t mactemp5[6];
+	uint8_t mactemp6[6];
+	uint8_t mactemp7[6];
+	uint8_t mactemp8[6];
 	//MAC
-	uint16_t mac[90];
+	uint16_t mac1[3];
+	uint16_t mac2[3];
+	uint16_t mac3[3];
+	uint16_t mac4[3];
+	uint16_t mac5[3];
+	uint16_t mac6[3];
+	uint16_t mac7[3];
+	uint16_t mac8[3];
+	
+	//AT连接字符串
+	char SN1CONN[30];
+	char SN1ED[30];
+	char SN1DIS[30];
+	char SN2CONN[30];
+	char SN2ED[30];
+	char SN2DIS[30];
+	char SN3CONN[30];
+	char SN3ED[30];
+	char SN3DIS[30];
+	char SN4CONN[30];
+	char SN4ED[30];
+	char SN4DIS[30];
+	char SN5CONN[30];
+	char SN5ED[30];
+	char SN5DIS[30];
+	char SN6CONN[30];
+	char SN6ED[30];
+	char SN6DIS[30];
+	char SN7CONN[30];
+	char SN7ED[30];
+	char SN7DIS[30];
+	char SN8CONN[30];
+	char SN8ED[30];
+	char SN8DIS[30];
 	
 
 } MacSet;
 typedef struct
 {
 	//四位数字(施解封显示)
-	char SN1name[5];
-	char SN2name[5];
-	char SN3name[5];
-	char SN4name[5];
-	char SN5name[5];
-	char SN6name[5];
-	char SN7name[5];
-	char SN8name[5];
-	//AT连接字符串
-	char* SNCONN;
-	char* SNED;
-	char* SNDIS;
+	char SN1name[13];
+	char SN2name[13];
+	char SN3name[13];
+	char SN4name[13];
+	char SN5name[13];
+	char SN6name[13];
+	char SN7name[13];
+	char SN8name[13];
 	//Status
 	uint8_t L1status;
 	uint8_t L2status;
@@ -286,6 +377,7 @@ struct keys
 
 typedef struct
 {
+    uint32_t serialNum;	//4字节流水号
     uint32_t serialNum1;	//4字节流水号
     uint32_t serialNum2;	//4字节流水号
     uint32_t serialNum3;	//4字节流水号

+ 4 - 0
Core/Inc/interface.h

@@ -12,6 +12,10 @@ extern bool L1bd ;						//L1
 extern bool L2bd ;						//L2°ó¶¨±ê־λ
 extern bool L3bd ;						//L3°ó¶¨±ê־λ
 extern bool L4bd ;						//L4°ó¶¨±ê־λ	
+extern bool L5bd ;						//L5°ó¶¨±ê־λ
+extern bool L6bd ;						//L6°ó¶¨±ê־λ
+extern bool L7bd ;						//L7°ó¶¨±ê־λ
+extern bool L8bd ;						//L8°ó¶¨±ê־λ	
 extern uint8_t Developer_PortalA;
 extern uint8_t Developer_PortalD;
 

+ 11 - 25
Core/Inc/key.h

@@ -12,33 +12,19 @@ void WritekeyInfo(void);
 
 
 extern char macStr[20][13]; 
-extern uint8_t L1Work_open;//1:开锁
-extern uint8_t L1Work_close;//1:关锁
-extern uint8_t L2Work_open ;//1:开锁
-extern uint8_t L2Work_close;//1:关锁
-extern uint8_t L3Work_open ;//1:开锁
-extern uint8_t L3Work_close;//1:关锁
-extern uint8_t L4Work_open ;//1:开锁
-extern uint8_t L4Work_close;//1:关锁
-extern uint8_t L5Work_open ;//1:开锁
-extern uint8_t L5Work_close;//1:关锁
-extern uint8_t L6Work_open ;//1:开锁
-extern uint8_t L6Work_close;//1:关锁
-extern uint8_t L7Work_open ;//1:开锁
-extern uint8_t L7Work_close;//1:关锁
-extern uint8_t L8Work_open ;//1:开锁
-extern uint8_t L8Work_close;//1:关锁
-
-
-extern uint8_t preCurrent;
+
 extern uint32_t enterInterface_time;
-extern uint8_t onOff_Num;
-extern uint8_t preworkUp;
-extern bool L1work ;
-extern bool L2work ;
-extern bool L3work ;
-extern bool L4work ;
 void ATconnProcess(uint64_t addr,char* conn,char* ed);
+
+
+
+
+
+extern LockInfo lockinfo;
+
+
+
+extern bool Allopen ;
 #endif /*__KEY_H*/
 
 

+ 1 - 0
Core/Inc/main.h

@@ -92,6 +92,7 @@ void ReadSNname(void);
 /* USER CODE BEGIN Private defines */
 extern char version[];
 extern bool wdiFlag;
+void ReadSNname(void);
 /* USER CODE END Private defines */
 
 #ifdef __cplusplus

+ 7 - 1
Core/Inc/mba32a.h

@@ -18,7 +18,13 @@ uint8_t sendCmd_BT(char *pCmd,char *pRes, uint32_t timeOut, uint8_t sendNum);
 extern char autoRe[1024];
 void OpenCloseLock(void);
 void event_lock(void);
+void open_close_lock(void);
 
-void open_lock(void);
+
+
+
+
+
+extern bool ConnOk;
 #endif /*__MBA32A_H*/
 

+ 3 - 0
Core/Inc/tt808.h

@@ -41,5 +41,8 @@ extern bool phonenull;
 uint16_t swapBytes16(uint16_t value);
 uint32_t swapBytes32(uint32_t value);
 void REPdaMode(void);
+
+
+extern bool reAuth;
 #endif /*__TT808_H*/
 

+ 4 - 0
Core/Inc/usart.h

@@ -45,6 +45,7 @@ extern uint8_t U5_BTrecvBuff[BUFFER_SIZE];
 extern uint8_t U5_BTrecvBuff1[BUFFER_SIZE];
 extern uint8_t U5_BTrecvLength;  //½ÓÊÕÒ»Ö¡Êý¾ÝµÄ³¤¶È
 
+extern uint8_t BT_Rebuffer[20];
 
 /* USER CODE END Includes */
 
@@ -69,6 +70,7 @@ void MX_USART2_UART_Init(void);
 void MX_USART3_UART_Init(void);
 
 /* USER CODE BEGIN Prototypes */
+void erase_flash(uint32_t ADDR_FLASH);
 void Printf_u4u5logbyU1(void);
 uint8_t xorBytes(uint8_t arr[], int size);
 void sendCombinedArray(uint8_t *header, size_t headerLength, uint8_t *command, size_t commandLength, bool JM);
@@ -76,6 +78,8 @@ void Flash_ReadBytes_mac(uint16_t* sorBuf,uint32_t FlashAddr,uint16_t len);
 HAL_StatusTypeDef Flash_WriteBytes(uint16_t* sorBuf, uint32_t FlashAddr, uint16_t len);
 void Flash_ReadBytes(uint16_t* sorBuf,uint32_t FlashAddr,uint16_t len);
 uint32_t convertGPS(double temp) ;
+
+
 /* USER CODE END Prototypes */
 
 #ifdef __cplusplus

+ 53 - 40
Core/Src/freertos.c

@@ -161,9 +161,25 @@ void StartScanKeyTask(void const * argument)
     Jump_interface(); 		    	//跳转界面
     OLED_Refresh(); 				//刷新界面
 	  
-		Test485Re();//485CMD
-		ReBTcall();//蓝牙回应
-	OpenCloseLock();
+	Test485Re();//485CMD
+	  
+	ReBTcall();//蓝牙回应
+	  
+   if(BT_Rebuffer[2]==0x02)//开锁回复
+   {
+	   if(BT_Rebuffer[4]==0x01)
+	   {
+		   printf("\r\n***接收完成\r\n");
+		   macsetptr->macWorked+=1;
+	   }
+	   else if(BT_Rebuffer[4]==0x02)
+	   {
+		   printf("\r\n***流水号异常\r\n");
+		   //USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
+	   }
+	   btframe.serialNum+=1;
+	   memset(BT_Rebuffer,0,20);
+   }
 	 
   }
   /* USER CODE END StartScanKeyTask */
@@ -186,8 +202,6 @@ void StarBT4GTask(void const * argument)
     osDelay(1);	
 	{
 		Printf_u4u5logbyU1();			//打印log0
-		
-		
 		ReMIPURC();						//各式接收处理1
 		ReU4Proces();					//2
 		MIPURCHandle();					//平台接收处理(鉴权应答等)3 
@@ -213,38 +227,38 @@ void StartTestTask(void const * argument)
   {
     osDelay(1);  
 	RESET_4G_MODULE();				//4G启动(复位) 标志位->reset4Gmodule
-	//Pre_processing_4G();			//4G传递准备   标志位->module4G_F
-
-
-	  if(ReturnInterface)
-	  {
-		  ReturnInterface=false;
-		  if(preCurrent==4)
-		  {
-			menu.current = 4;
-		  }
-		  else
-		  {
-			menu.current = 0;
-		  }
-		  //printf("%d",preCurrent);
-		  refresh=true;
-		  //HAL_Delay(1000);
-	  }
-	  
-	  
-//*开关锁问平台权限	  
-	  
-	  
-	  
-	  
-	  
-	  
-	  
-	  
-	  
-	  
-	  
+	Pre_processing_4G();			//4G传递准备   标志位->module4G_F
+
+
+	if(Allopen)
+	{
+		Allopen=false;
+		uint8_t macset[]={macsetptr->macCount&0xff};
+		tt808FsFunc(macset, 1, MessageID_Getauth);
+		//*test
+		//reAuth=true;
+	}		
+   if(reAuth)
+   {
+	  HAL_Delay(500);
+	  reAuth = false;
+	  SET_MENU_STATUS(3,0,0,4);
+   }
+   
+   if(menu.current==3 && menu.enter==4)
+   {
+	  uint8_t lockCount = macsetptr->macCount;//共操作锁数
+	 //printf("共操作锁数%d\r\n",lockCount);
+	  open_close_lock();
+   }
+	   
+   
+
+   
+   
+   
+   
+   
 	  
   }
   /* USER CODE END StartTestTask */
@@ -267,9 +281,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
 	

+ 99 - 19
Core/Src/interface.c

@@ -18,14 +18,6 @@ extern LockInfo lockinfo;
 //布尔
 bool refresh=false; 
 bool ReturnInterface = false;
-bool L1bd = false;						//L1绑定标志位
-bool L2bd = false;						//L2绑定标志位
-bool L3bd = false;						//L3绑定标志位
-bool L4bd = false;						//L4绑定标志位	
-bool L5bd = false;						//L5绑定标志位
-bool L6bd = false;						//L6绑定标志位
-bool L7bd = false;						//L7绑定标志位
-bool L8bd = false;						//L8绑定标志位	
 
 //字符串
 
@@ -36,6 +28,7 @@ void lockWork(void);//
 void ApplyPermission(void);//界面2 申请权限
 void PleaseWakeUp(void);//界面3 请唤醒
 void SecondMain(void);//次主界面
+void MACbindDisplay(void);//界面4
 /**
   * @breaf 界面跳转
   */
@@ -51,11 +44,31 @@ void Jump_interface(void)
 	{
 		case 0:
 		{
-			//logoDisplay();//无任何绑定,显示Logo界面
+			logoDisplay();//无任何绑定,显示Logo界面
 			//lockWork();
 			//ApplyPermission();
 			//PleaseWakeUp();
-			SecondMain();
+			//SecondMain();
+			break;
+		}
+		case 1:
+		{
+			lockWork();
+			break;
+		}
+		case 2:
+		{
+			ApplyPermission();
+			break;
+		}
+		case 3:
+		{
+			PleaseWakeUp();
+			break;
+		}
+		case 4:
+		{
+			MACbindDisplay();
 			break;
 		}
 	}
@@ -64,16 +77,62 @@ void Jump_interface(void)
 }
 
 
+void MACbindDisplay(void)
+{
+	if(menu.down<4)
+	{
+		OLED_ShowString(5,0,(unsigned char*)lockinfo.SN1name,16,1);
+		OLED_ShowString(5,15,(unsigned char*)lockinfo.SN2name,16,1);
+		OLED_ShowString(5,30,(unsigned char*)lockinfo.SN3name,16,1);
+		OLED_ShowString(5,45,(unsigned char*)lockinfo.SN4name,16,1);
+		
+		if(menu.down==0)
+			OLED_ShowString(5,0,(unsigned char*)lockinfo.SN1name,16,0);
+		if(menu.down==1)
+			OLED_ShowString(5,15,(unsigned char*)lockinfo.SN2name,16,0);
+		if(menu.down==2)
+			OLED_ShowString(5,30,(unsigned char*)lockinfo.SN3name,16,0);
+		if(menu.down==3)
+			OLED_ShowString(5,45,(unsigned char*)lockinfo.SN4name,16,0);
+		
+		OLED_ShowString(110,45,(unsigned char*)"1/2",12,1);
+	}
+	else
+	{
+		OLED_ShowString(5,0,(unsigned char*)lockinfo.SN5name,16,1);
+		OLED_ShowString(5,15,(unsigned char*)lockinfo.SN6name,16,1);
+		OLED_ShowString(5,30,(unsigned char*)lockinfo.SN7name,16,1);
+		OLED_ShowString(5,45,(unsigned char*)lockinfo.SN8name,16,1);
+		
+		if(menu.down==4)
+			OLED_ShowString(5,0,(unsigned char*)lockinfo.SN5name,16,0);
+		if(menu.down==5)
+			OLED_ShowString(5,15,(unsigned char*)lockinfo.SN6name,16,0);
+		if(menu.down==6)
+			OLED_ShowString(5,30,(unsigned char*)lockinfo.SN7name,16,0);
+		if(menu.down==7)
+			OLED_ShowString(5,45,(unsigned char*)lockinfo.SN8name,16,0);
+		OLED_ShowString(110,45,(unsigned char*)"2/2",12,1);
+	}
+}
 
 
 void logoDisplay(void)//界面1
 {
-	OLED_ShowPicture(0,0,128,64,BMP7,1);    
+	if(!MgnssFlag)
+	{
+		OLED_ShowString(20,10,(unsigned char*)"System Staring...",12,0);
+	}
+	else
+	{
+		OLED_ShowPicture(0,0,128,64,BMP7,1);  
+	}
 }
 
 void lockWork(void) //界面2
-{
-	
+{	
+	char count[6]; // 数字1转换为字符串形式最多需要2个字符,再加上终止符'\0'共6个字符的空间
+	sprintf(count, "%u", macsetptr->macCount);
 	OLED_ShowChinese(18,2,56,16,1);//一
 	OLED_ShowChinese(38,2,57,16,1);//键
 	OLED_ShowChinese(58,2,18,16,1);//解
@@ -87,16 +146,28 @@ void lockWork(void) //
 	OLED_ShowChinese(55,48,28,12,1);//定
 	OLED_ShowChinese(70,48,29,12,1);//锁
 	OLED_ShowString(85,48,(unsigned char*)"(",12,1);
-	OLED_ShowString(94,48,(unsigned char*)"8",12,1);
+	OLED_ShowString(94,48,(unsigned char*)count,12,1);
 	OLED_ShowString(100,48,(unsigned char*)")",12,1);
 	
 //*选择
-	
+	if(menu.down==0)
+	{
+		OLED_ShowString(100,2,(unsigned char*)"<<-",12,0);
+	}
+	else if(menu.down==1)
+	{
+		OLED_ShowString(100,25,(unsigned char*)"<<-",12,0);
+	}
+	else if(menu.down==2)
+	{
+		OLED_ShowString(110,48,(unsigned char*)"<<-",12,0);
+	}	
 	
 }
-
 void ApplyPermission(void)//界面2 申请权限
 {
+	char count[6]; // 数字1转换为字符串形式最多需要2个字符,再加上终止符'\0'共6个字符的空间
+	sprintf(count, "%u", macsetptr->macCount);
 	OLED_ShowChinese(5,20,58,16,1);//正
 	OLED_ShowChinese(25,20,59,16,1);//在
 	OLED_ShowChinese(45,20,60,16,1);//申
@@ -104,12 +175,21 @@ void ApplyPermission(void)//
 	OLED_ShowChinese(85,20,62,16,1);//权
 	OLED_ShowChinese(105,20,63,16,1);//限
 	
-	OLED_ShowString(50,48,(unsigned char*)"->",12,1);
-	OLED_ShowString(70,48,(unsigned char*)"8",12,1);
+	OLED_ShowString(10,48,(unsigned char*)">",12,1);
+	OLED_ShowString(25,48,(unsigned char*)count,12,1);
+	
+	if(reAuth)
+	{
+		OLED_ShowString(60,48,(unsigned char*)"->>",12,1);
+		OLED_ShowString(80,48,(unsigned char*)"Success",12,1);
+	}
+		
 }
 
 void PleaseWakeUp(void)//界面3 请唤醒
 {
+	char workedCount[6]; // 数字1转换为字符串形式最多需要2个字符,再加上终止符'\0'共6个字符的空间
+	sprintf(workedCount, "%u", macsetptr->macWorked);
 	OLED_ShowChinese(5,20,64,16,1);  //请
 	OLED_ShowChinese(25,20,65,16,1); //唤
 	OLED_ShowChinese(45,20,66,16,1); //醒
@@ -123,7 +203,7 @@ void PleaseWakeUp(void)//
 	OLED_ShowChinese(55,48,31,12,1);//作
 	OLED_ShowChinese(70,48,29,12,1);//锁
 	OLED_ShowString(85,48,(unsigned char*)"(",12,1);
-	OLED_ShowString(94,48,(unsigned char*)"8",12,1);
+	OLED_ShowString(94,48,(unsigned char*)workedCount,12,1);
 	OLED_ShowString(100,48,(unsigned char*)")",12,1);
 	
 }

+ 31 - 317
Core/Src/key.c

@@ -15,8 +15,8 @@ bool sent3_key = false;
 bool sent4_key = false;
 
 uint32_t enterInterface_time =0;
-uint8_t preworkUp = 0;
-uint8_t onOff_Num=0;
+
+bool Allopen = false;
 
 uint8_t KEY_1_Scan_PDA(void)
 {
@@ -44,38 +44,17 @@ uint8_t KEY_1_Scan_PDA(void)
 					{
 						case 0:
 						{
-							SET_MENU_STATUS(0,0,0,0);
+							SET_MENU_STATUS(1,2,0,1);
 							break;
 						}
 						case 1:
 						{
-							SET_MENU_STATUS(1,1,0,1);
-							break;
-						}
-						case 2:
-						case 3:
-						{
-							SWITCH_MENU_UP4();
-							break;
-						}
-						case 8://L绑定
-						{
-								if(menu.up != macsetptr->macCount) { \
-									menu.up += 1; \
-									menu.next -= 1; \
-								} else if(menu.up == macsetptr->macCount) { \
-									menu.up = 0; \
-									menu.next = macsetptr->macCount; \
-								} \
-								refresh = true; \
+							SWITCH_MENU_UP3();
 							break;
 						}
 						case 4:
-						case 5:
-						case 6:
-						case 7:
 						{
-							SWITCH_MENU_UP2();//上翻2选项
+							SWITCH_MENU_UPmore();
 							break;
 						}
 					}
@@ -123,41 +102,19 @@ uint8_t KEY_2_Scan_PDA(void)
 					{
 						case 0:
 						{
-							//SET_MENU_STATUS(1,0,0,0);
+							SET_MENU_STATUS(1,2,0,1);
 							break;
-						}
+						}	
 						case 1:
 						{
-							SET_MENU_STATUS(1,0,1,1);
-							break;
-						}
-						case 2:
-						case 3:
-						{
-							SWITCH_MENU_DOWN4();//四选项选择
-							break;
-						}
-						case 8://L绑定
-						{
-							if(menu.next!=macsetptr->macCount){ 
-								menu.up-=1; 
-								menu.next+=1; 
-							} else if(menu.next==macsetptr->macCount) { 
-								menu.up=macsetptr->macCount; 
-								menu.next=0; 
-							} 
-							refresh=true; 
+							SWITCH_MENU_DOWN3();
 							break;
 						}
 						case 4:
-						case 5:
-						case 6:
-						case 7:
 						{
-							SWITCH_MENU_DOWN2();//下翻2选项
+							SWITCH_MENU_DOWNmore();
 							break;
 						}
-							
 					}
 					#if debugkeyinfo == 1
 					PRINT_MENU_STATUS("K2");
@@ -177,25 +134,6 @@ uint8_t KEY_2_Scan_PDA(void)
     return 0;
 }
 
-uint8_t preCurrent = 0;
-uint8_t preBind = 0;
-
-uint8_t L1Work_open =0;//1:开锁
-uint8_t L1Work_close=0;//1:关锁
-uint8_t L2Work_open =0;//1:开锁
-uint8_t L2Work_close=0;//1:关锁
-uint8_t L3Work_open =0;//1:开锁
-uint8_t L3Work_close=0;//1:关锁
-uint8_t L4Work_open =0;//1:开锁
-uint8_t L4Work_close=0;//1:关锁
-uint8_t L5Work_open =0;//1:开锁
-uint8_t L5Work_close=0;//1:关锁
-uint8_t L6Work_open =0;//1:开锁
-uint8_t L6Work_close=0;//1:关锁
-uint8_t L7Work_open =0;//1:开锁
-uint8_t L7Work_close=0;//1:关锁
-uint8_t L8Work_open =0;//1:开锁
-uint8_t L8Work_close=0;//1:关锁
 
 
 char macStr[20][13]; // 长度为13的字符串加上字符串结束符'\0'
@@ -224,252 +162,34 @@ uint8_t KEY_3_Scan_PDA(void)
 					enterInterface_time = HAL_GetTick();
 					switch (menu.current) 
 					{
-						case 0://跳转到菜单界面
-						{
-							SET_MENU_STATUS(1,1,0,1);//跳转操作界面
-							break;
-						}
-						case 1://跳转到L绑定界面
-						{
-							if(menu.up==1)
-							{
-								SET_MENU_STATUS(2,3,0,2);
-							}
-							else
-							{
-								SET_MENU_STATUS(3,3,0,2);
-							}
-							break;
-						}
-						case 2:
+						case 0:
 						{
-							preBind = menu.up;
-							
-							Flash_ReadBytes(&macsetptr->macCount,MacDbHeadAddr,1);//获取共存多少MAC
-							printf("%04X\r\n",macsetptr->macCount);
-							
-							char mac[13*macsetptr->macCount];//char数组需要预留足够的空间,也就是13个字符,因为还需要包含字符串结尾的'\0'
-							Flash_ReadBytes_mac((uint16_t*)macsetptr->mac,MacDbBodyAddr,(3*macsetptr->macCount));//读MAC
-							bin2hex(mac, (unsigned char *)macsetptr->mac, (6*macsetptr->macCount));//将uint16数组转换成char数组 (FLASH中的字符串)
-							
-							// 分割mac并放入macStr数组中
-							for (int i = 0; i < macsetptr->macCount; i++) {
-								strncpy(macStr[i], mac + i * 12, 12); // 复制13个字符到macStr中
-								macStr[i][12] = '\0'; // 添加字符串结束符
-							}
-							// 打印分割后的字符串
-							for (int i = 0; i < macsetptr->macCount; i++) {
-								printf("macStr[%d]: %s\n", i, macStr[i]);
-							}
-							SET_MENU_STATUS(8,macsetptr->macCount,0,2);
+							SET_MENU_STATUS(1,2,0,1);
 							break;
 						}
-						case 8:
-						{
-							if(preBind==3)//L1确认绑定
-							{
-								L1bd=true;
-								sprintf(lockinfo.SN1name, "%s", macStr[menu.next]+8);
-								Flash_WriteBytes(macsetptr->mac+menu.next*3,Sn1InfoAddr,3);
-								break;
-							}
-							if(preBind==2)//L2确认绑定
-							{
-								L2bd=true;
-								sprintf(lockinfo.SN2name, "%s", macStr[menu.next]+8);
-								Flash_WriteBytes(macsetptr->mac+menu.next*3,Sn2InfoAddr,3);
-								break;
-								
-							}
-							if(preBind==1)//L3确认绑定
-							{
-								L3bd=true;
-								sprintf(lockinfo.SN3name, "%s", macStr[menu.next]+8);
-								Flash_WriteBytes(macsetptr->mac+menu.next*3,Sn3InfoAddr,3);
-								break;
-								
-							}
-							if(preBind==0)//L4确认绑定
-							{
-								L4bd=true;
-								sprintf(lockinfo.SN4name, "%s", macStr[menu.next]+8);
-								Flash_WriteBytes(macsetptr->mac+menu.next*3,Sn4InfoAddr,3);
-								break;
-							}
-						}
-						case 3:
+						case 1:
 						{
-							if(menu.up==3)//L1操作
+							if(menu.down==0)
 							{
-								preworkUp=menu.up;
-								SET_MENU_STATUS(4,1,0,3);
+								//printf("一键解封\r\n");
+								SET_MENU_STATUS(2,0,0,0);
+								Allopen=true;
 								break;
 							}
-							if(menu.up==2)//2操作
+							else if(menu.down==1)
 							{
-								preworkUp=menu.up;
-								SET_MENU_STATUS(5,1,0,3);
+								//printf("一键施封\r\n");
+								SET_MENU_STATUS(2,0,0,1);
+								Allopen=true;
 								break;
 							}
-							if(menu.up==1)//3操作
+							else if(menu.down==2)//查看绑定信息
 							{
-								preworkUp=menu.up;
-								SET_MENU_STATUS(6,1,0,3);
+								//printf("查看绑定信息\r\n");
+								SET_MENU_STATUS(4,macsetptr->macCount,0,0);
 								break;
-							}						
-							if(menu.up==0)//4操作
-							{
-								preworkUp=menu.up;
-								SET_MENU_STATUS(7,1,0,3);
-								break;
-							}		
-						}
-						case 4:
-						case 5:
-						case 6:
-						case 7:
-						{
-							preCurrent = menu.current;
-							onOff_Num = menu.up;//1:关锁  0:开锁
-							printf("%d\r\n",onOff_Num);
-							if(preworkUp == 3)		//L1
-							{
-								if(onOff_Num)
-								{
-									L1Work_close=1;
-									printf("关锁\r\n");
-									
-								}
-								else
-								{
-									L1Work_open=1;
-									printf("开锁\r\n");
-								}
-								uint16_t mac1[3];
-								Flash_ReadBytes_mac(mac1,Sn1InfoAddr,3);
-								
-								char SNconn[50];
-								char *ptr = SNconn;
-								ptr += sprintf(ptr, "AT+CONN=");
-								for (int i = 0; i < 3; i++) {
-									ptr += sprintf(ptr, "%04X", mac1[i]);
-								}
-								sprintf(ptr, "\r\n");
-								char SNF[50];
-								char *ptr1 = SNF;
-								ptr1 += sprintf(ptr1, "+CONNECTED:0,");
-								for (int i = 0; i < 3; i++) {
-									ptr1 += sprintf(ptr1, "%04X", mac1[i]);
-								}
-								lockinfo.SNCONN = SNconn;
-								lockinfo.SNED = SNF;
-//								if(sendCmd_BT(lockinfo.SNCONN,"ERROR",1,1))
-//								{
-//									 USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
-//									 printf("断开连接\r\n");
-//									SET_MENU_STATUS(3,3,0,2);
-//								}
-//								else
-//								{
-									sendCmd_BT(lockinfo.SNCONN,lockinfo.SNED,2,20);
-//								}
-
-							}
-							else if(preworkUp == 2)	//L2
-							{
-								uint16_t mac2[3];
-								Flash_ReadBytes_mac(mac2,Sn2InfoAddr,3);
-								
-								char SNconn[50];
-								char *ptr = SNconn;
-								ptr += sprintf(ptr, "AT+CONN=");
-								for (int i = 0; i < 3; i++) {
-									ptr += sprintf(ptr, "%04X", mac2[i]);
-								}
-								sprintf(ptr, "\r\n");
-								char SNF[50];
-								char *ptr1 = SNF;
-								ptr1 += sprintf(ptr1, "+CONNECTED:0,");
-								for (int i = 0; i < 3; i++) {
-									ptr1 += sprintf(ptr1, "%04X", mac2[i]);
-								}
-								lockinfo.SNCONN = SNconn;
-								lockinfo.SNED = SNF;
-//								if(sendCmd_BT(lockinfo.SNCONN,"ERROR",1,1))
-//								{
-//									 USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
-//									 printf("断开连接\r\n");
-//									SET_MENU_STATUS(3,3,0,2);
-//								}
-//								else
-//								{
-									sendCmd_BT(lockinfo.SNCONN,lockinfo.SNED,2,20);
-//								}
-							}
-							else if(preworkUp == 1)	//L3
-							{
-								uint16_t mac3[3];
-								Flash_ReadBytes_mac(mac3,Sn3InfoAddr,3);
-								
-								char SNconn[50];
-								char *ptr = SNconn;
-								ptr += sprintf(ptr, "AT+CONN=");
-								for (int i = 0; i < 3; i++) {
-									ptr += sprintf(ptr, "%04X", mac3[i]);
-								}
-								sprintf(ptr, "\r\n");
-								char SNF[50];
-								char *ptr1 = SNF;
-								ptr1 += sprintf(ptr1, "+CONNECTED:0,");
-								for (int i = 0; i < 3; i++) {
-									ptr1 += sprintf(ptr1, "%04X", mac3[i]);
-								}
-								lockinfo.SNCONN = SNconn;
-								lockinfo.SNED = SNF;
-								if(sendCmd_BT(lockinfo.SNCONN,"ERROR",1,1))
-								{
-									 USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
-									 printf("断开连接\r\n");
-									SET_MENU_STATUS(3,3,0,2);
-								}
-								else
-								{
-									sendCmd_BT(lockinfo.SNCONN,lockinfo.SNED,2,20);
-								}
-							}
-							else if(preworkUp == 0)	//L4
-							{
-								uint16_t mac4[3];
-								Flash_ReadBytes_mac(mac4,Sn4InfoAddr,3);
-								
-								char SNconn[50];
-								char *ptr = SNconn;
-								ptr += sprintf(ptr, "AT+CONN=");
-								for (int i = 0; i < 3; i++) {
-									ptr += sprintf(ptr, "%04X", mac4[i]);
-								}
-								sprintf(ptr, "\r\n");
-								char SNF[50];
-								char *ptr1 = SNF;
-								ptr1 += sprintf(ptr1, "+CONNECTED:0,");
-								for (int i = 0; i < 3; i++) {
-									ptr1 += sprintf(ptr1, "%04X", mac4[i]);
-								}
-								lockinfo.SNCONN = SNconn;
-								lockinfo.SNED = SNF;
-								if(sendCmd_BT(lockinfo.SNCONN,"ERROR",1,1))
-								{
-									 USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
-									 printf("断开连接\r\n");
-									SET_MENU_STATUS(3,3,0,2);
-								}
-								else
-								{
-									sendCmd_BT(lockinfo.SNCONN,lockinfo.SNED,2,20);
-								}
-							}
+							}							
 						}
-	
 					}
 
 					#if debugkeyinfo == 1
@@ -514,30 +234,24 @@ uint8_t KEY_4_Scan_PDA(void)
 					switch (menu.current) 
 					{
 						case 0:
+						{
+							SET_MENU_STATUS(1,2,0,1);
+							break;
+						}
 						case 1:
 						{
 							SET_MENU_STATUS(0,0,0,0);
 							break;
 						}
 						case 2:
-						case 3:
 						{
-
-							SET_MENU_STATUS(1,1,0,1);
+							reAuth = false;
+							SET_MENU_STATUS(1,0,menu.enter,1);
 							break;
 						}
 						case 4:
-						case 5:
-						case 6:
-						case 7:
-						{
-							USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
-							SET_MENU_STATUS(3,3,0,2);
-							break;
-						}	
-						case 8:
 						{
-							SET_MENU_STATUS(2,3,0,2);
+							SET_MENU_STATUS(1,0,2,1);
 							break;
 						}
 						

+ 81 - 33
Core/Src/main.c

@@ -131,12 +131,10 @@ int main(void)
   //Database_init(0x760,0x760,0x5,0x5);//760
     
   
-  //MBA32A_Init();
-  //reset4Gmodule = true;
+  MBA32A_Init();
+  reset4Gmodule = true;
 
-  //ReadSNname();
-  
-  menu.current = 0;
+  ReadSNname();
   
   
   
@@ -208,12 +206,9 @@ void SystemClock_Config(void)
   }
 }
 /* USER CODE BEGIN 4 */	
-char mac[100];
-char macStr_init[24][13]; // 长度为13的字符串加上字符串结束符'\0'
-uint16_t mac1[3];
-uint16_t mac2[3];
-uint16_t mac3[3];
-uint16_t mac4[3];
+char mac[120];
+char macStr_init[8][13]; // 长度为13的字符串加上字符串结束符'\0'
+uint16_t mac_u16[24];
 void ReadSNname(void)
 {
 	Flash_ReadBytes(&macsetptr->macCount,MacDbHeadAddr,1);//获取共存多少MAC(用于重启写入)
@@ -221,57 +216,110 @@ void ReadSNname(void)
 	{
 		macsetptr->macCount=0;
 	}
-	Flash_ReadBytes(mac1,Sn1InfoAddr,3);
-	Flash_ReadBytes(mac2,Sn2InfoAddr,3);
-	Flash_ReadBytes(mac3,Sn3InfoAddr,3);
-	Flash_ReadBytes(mac4,Sn4InfoAddr,3);
+	Flash_ReadBytes_mac(mac_u16,MacDbBodyAddr,3+(3*(macsetptr->macCount-1)));
+	
+	if(macsetptr->macCount==1)
+		bin2hex(mac, (unsigned char *)mac_u16, 6);//将uint16数组转换成char数组 (FLASH中的字符串)
+	else if(macsetptr->macCount==2){
+		bin2hex(mac, (unsigned char *)mac_u16, 12);}//将uint16数组转换成char数组 (FLASH中的字符串)		
+	else if(macsetptr->macCount==3){
+		bin2hex(mac, (unsigned char *)mac_u16, 18);}//将uint16数组转换成char数组 (FLASH中的字符串)
+	else if(macsetptr->macCount==4){
+		bin2hex(mac, (unsigned char *)mac_u16, 24);}//将uint16数组转换成char数组 (FLASH中的字符串)
+	else if(macsetptr->macCount==5){
+		bin2hex(mac, (unsigned char *)mac_u16, 30);}//将uint16数组转换成char数组 (FLASH中的字符串)
+	else if(macsetptr->macCount==6){
+		bin2hex(mac, (unsigned char *)mac_u16, 36);}//将uint16数组转换成char数组 (FLASH中的字符串)
+	else if(macsetptr->macCount==7){
+		bin2hex(mac, (unsigned char *)mac_u16, 42);}//将uint16数组转换成char数组 (FLASH中的字符串)
+	else if(macsetptr->macCount==8){
+		bin2hex(mac, (unsigned char *)mac_u16, 48);}//将uint16数组转换成char数组 (FLASH中的字符串)
+
 	
-	bin2hex(mac, (unsigned char *)mac1, 12);//将uint16数组转换成char数组 (FLASH中的字符串)
-	bin2hex(mac+12, (unsigned char *)mac2, 12);//将uint16数组转换成char数组 (FLASH中的字符串)
-	bin2hex(mac+24, (unsigned char *)mac3, 12);//将uint16数组转换成char数组 (FLASH中的字符串)
-	bin2hex(mac+36, (unsigned char *)mac4, 12);//将uint16数组转换成char数组 (FLASH中的字符串)
 	// 分割mac并放入macStr数组中
-	for (int i = 0; i < 4; i++) {
+	for (int i = 0; i < 8; i++) {
 		strncpy(macStr_init[i], mac + i * 12, 12); // 复制12个字符到macStr中
 		macStr_init[i][12] = '\0'; // 添加字符串结束符
-	}				
-	if(mac1[0]==0xFFFF)
+	}			
+	
+	if(mac[0]==0)
 	{
 		//Todo
+		printf("mac1未绑定\r\n");
 	}
 	else
 	{
-		L1bd=true;
-		sprintf(lockinfo.SN1name, "%s",macStr_init[0]+8 );
+		sprintf(lockinfo.SN1name, "%s",macStr_init[0]);
 	}
 	
-	if(mac2[0]==0xFFFF)
+	if(mac[12]==0)
 	{
 		//Todo
+		printf("mac2未绑定\r\n");
 	}
 	else
 	{
-		L2bd=true;
-		sprintf(lockinfo.SN2name, "%s",macStr_init[1]+8 );
+		sprintf(lockinfo.SN2name, "%s",macStr_init[1]);
 	}	
-	if(mac3[0]==0xFFFF)
+	if(mac[24]==0)
 	{
 		//Todo
+		printf("mac3未绑定\r\n");
 	}
 	else
 	{
-		L3bd=true;
-		sprintf(lockinfo.SN3name, "%s",macStr_init[2]+8 );
+		sprintf(lockinfo.SN3name, "%s",macStr_init[2]);
 	}		
-	if(mac4[0]==0xFFFF)
+	if(mac[36]==0)//4
+	{
+		//Todo
+		printf("mac4未绑定\r\n");
+	}
+	else
+	{
+		sprintf(lockinfo.SN4name, "%s",macStr_init[3]);
+	}	
+	if(mac[48]==0)//5
+	{
+		//Todo
+		printf("mac5未绑定\r\n");
+	}
+	else
+	{
+		sprintf(lockinfo.SN5name, "%s",macStr_init[4]);
+	}	
+	
+	if(mac[60]==0)//6
 	{
 		//Todo
+		printf("mac6未绑定\r\n");
 	}
 	else
 	{
-		L4bd=true;
-		sprintf(lockinfo.SN4name, "%s",macStr_init[3]+8 );
+		sprintf(lockinfo.SN6name, "%s",macStr_init[5]);
 	}	
+	
+	if(mac[72]==0)//7
+	{
+		//Todo
+		printf("mac7未绑定\r\n");
+	}
+	else
+	{
+		sprintf(lockinfo.SN7name, "%s",macStr_init[6]);
+	}		
+	
+	if(mac[84]==0)//8
+	{
+		//Todo
+		printf("mac8未绑定\r\n");
+	}
+	else
+	{
+		sprintf(lockinfo.SN8name, "%s",macStr_init[7]);
+	}	
+	
+	
 }
 /* USER CODE END 4 */
 

+ 232 - 64
Core/Src/mba32a.c

@@ -19,10 +19,15 @@ uint16_t resetFlag16=0;
 
 //*布尔
 bool resetBTmodule = false;
-bool L1Working = false;
-bool L2Working = false;
-bool L3Working = false;
-bool L4Working = false;
+
+bool L1Worked = false;
+bool L2Worked = false;
+bool L3Worked = false;
+bool L4Worked = false;
+bool L5Worked = false;
+bool L6Worked = false;
+bool L7Worked = false;
+bool L8Worked = false;
 
 //*字符串
 char autoRe[1024];
@@ -35,9 +40,14 @@ void Write_Information(uint32_t addr, uint16_t newValue);
 //*本模块方法
 uint8_t sendCmd_BT(char *pCmd,char *pRes, uint32_t timeOut, uint8_t sendNum);
 void MBA32AReset(void);
-
 uint16_t resetdev[2];
 
+
+void open_lock(BtFrame btframe);
+void close_lock(BtFrame btframe);
+
+
+
 extern TipsFlag tipsflag;	
 /**
   * @breaf 蓝牙启动位读写检查
@@ -45,7 +55,6 @@ extern TipsFlag tipsflag;
 void Start_Read_resetFlag16(void)
 {
 	resetdev[0] = 0xAAAA;
-	//resetFlag16 = read_flash_16(resetDevAddr);
 	
 	Flash_ReadBytes(&resetdev[1], resetDevAddr, 2);
 	resetFlag16 = resetdev[1];
@@ -54,8 +63,6 @@ void Start_Read_resetFlag16(void)
 	{
 		if(sendCmd_BT("AT+RESET=1\r\n","OK",1,1))
 		{
-			//Write_Information(resetDevAddr, 0xAAAA);//写入0xAAAA
-			
 			Flash_WriteBytes(resetdev,resetDevAddr,1);
 			printf("###复位设备成功\r\n");
 			btstep = UUIDS;
@@ -229,12 +236,14 @@ void MBA32AReset(void)
 
 
 
-void open_lock(void)			//蓝牙开锁信息帧
+/**
+  * @breaf 蓝牙开锁信息帧
+  */
+void open_lock(BtFrame btframe)			//蓝牙开锁信息帧
 {
-	printf("解封\r\n");
 	uint8_t header[2] 	= {0x66, 0x01};//Jl_lock帧头
 	uint8_t open_CMD[] = {0x02, 0x0C, 	0x00,0x00,0x00,0x00,		0x00,0x00,0x00,0x00, \
-	0x00,0x00,0x00,0x00,   0x00};//开锁命令帧
+												0x00,0x00,0x00,0x00,   0x00};//开锁命令帧
 	
 	uint32_t serialNum;
 	if(menu.current==4)
@@ -264,46 +273,42 @@ void open_lock(void)			//
 	open_CMD[8]=(userid>>8) & 0xff;
 	open_CMD[9]= userid & 0xff;
 												
-	RTCtime();						
-	open_CMD[10]= ((dblocptr->location.timeStamp)>>24) & 0xff;
-	open_CMD[11]= ((dblocptr->location.timeStamp)>>16) & 0xff;
-	open_CMD[12]= ((dblocptr->location.timeStamp)>>8) & 0xff;
-	open_CMD[13]= (dblocptr->location.timeStamp) & 0xff;				
+	uint32_t ntime = dblocptr->location.timeStamp;//现在时间
+	open_CMD[10]=(ntime>>24) & 0xff;
+	open_CMD[11]=(ntime>>16) & 0xff;
+	open_CMD[12]=(ntime>>8) & 0xff;
+	open_CMD[13]= ntime & 0xff;
 												
 	open_CMD[14] = btframe.Autoseal;//自动施封时间										
 													
 	sendCombinedArray(header,sizeof(header),open_CMD,sizeof(open_CMD),1);//加密
 }
 
-void close_lock(void)		//蓝牙关锁信息帧
+/**
+  * @breaf 蓝牙关锁信息帧
+  */
+void close_lock(BtFrame btframe)		//蓝牙关锁信息帧
 {
-	printf("施封\r\n");
 	uint8_t header[2] 	= {0x66, 0x01};//Jl_lock帧头
 	uint8_t close_CMD[] = {0x03, 0x0B, 0x00,0x00,0x00,0x00,		0x00,0x00,0x00,0x00, \
 												0x00,0x00,0x00,0x00};//关锁命令帧
 	uint32_t serialNum;
-	if(preworkUp==3)
+	if(menu.current==4)
 	{
 		serialNum = btframe.serialNum1;//流水号
-		btframe.serialNum1+=1;
 	}
-	if(preworkUp==2)
+	if(menu.current==5)
 	{
 		serialNum = btframe.serialNum2;//流水号
-		btframe.serialNum2+=1;
 	}
-	if(preworkUp==1)
+	if(menu.current==6)
 	{
 		serialNum = btframe.serialNum3;//流水号
-		btframe.serialNum3+=1;
 	}
-	if(preworkUp==0)
+	if(menu.current==7)
 	{
 		serialNum = btframe.serialNum4;//流水号
-		btframe.serialNum4+=1;
 	}
-	
-	
 	close_CMD[2]=(serialNum>>24) & 0xff;
 	close_CMD[3]=(serialNum>>16) & 0xff;
 	close_CMD[4]=(serialNum>>8) & 0xff;
@@ -314,53 +319,216 @@ void close_lock(void)		//
 	close_CMD[7]=(userid>>16) & 0xff;
 	close_CMD[8]=(userid>>8) & 0xff;
 	close_CMD[9]= userid & 0xff;											
-	
-	RTCtime();						
-	close_CMD[10]= ((dblocptr->location.timeStamp)>>24) & 0xff;
-	close_CMD[11]= ((dblocptr->location.timeStamp)>>16) & 0xff;
-	close_CMD[12]= ((dblocptr->location.timeStamp)>>8) & 0xff;
-	close_CMD[13]= (dblocptr->location.timeStamp) & 0xff;									
+											
+	uint32_t ntime = dblocptr->location.timeStamp;//现在时间
+	close_CMD[10]=(ntime>>24) & 0xff;
+	close_CMD[11]=(ntime>>16) & 0xff;
+	close_CMD[12]=(ntime>>8) & 0xff;
+	close_CMD[13]= ntime & 0xff;											
 	
 	sendCombinedArray(header,sizeof(header),close_CMD,sizeof(close_CMD),1);
-	
 }
 
-uint16_t serialNum1[2];
-uint16_t serialNum2[2];
-uint16_t serialNum3[2];
-uint16_t serialNum4[2];
-void OpenCloseLock(void)
+
+uint8_t BtLockConn(uint8_t temp,uint8_t close)
 {
-	if(preworkUp==3)
+	if(temp==0)
 	{
-		if(L1Work_close)//L1操作(操作完成置位)
+		if(sendCmd_BT(macsetptr->SN1CONN,macsetptr->SN1ED,1,1))
 		{
-			close_lock();
-			L1Work_close=0;
-			printf("%02X%02X",serialNum1[0],serialNum1[1]);
-			serialNum1[0] = (uint16_t)((btframe.serialNum1 >> 24) & 0xff) << 8 | ((btframe.serialNum1 >> 16) & 0xff);
-			serialNum1[1] = (uint16_t)((btframe.serialNum1 >> 8)  & 0xff) << 8 | (btframe.serialNum1 & 0xff);
-			Flash_WriteBytes(serialNum1,serialNum1Addr,2);
+			//printf("%s连接成功\r\n",lockinfo.SN1name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+				return 1;
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+				return 1;
+			}
 		}
-		else if(L1Work_open)
+		else
 		{
-			open_lock();
-			L1Work_open=0;
-			printf("%02X%02X",serialNum1[0],serialNum1[1]);
-			serialNum1[0] = (uint16_t)((btframe.serialNum1 >> 24) & 0xff) << 8 | ((btframe.serialNum1 >> 16) & 0xff);
-			serialNum1[1] = (uint16_t)((btframe.serialNum1 >> 8)  & 0xff) << 8 | (btframe.serialNum1 & 0xff);
-			Flash_WriteBytes(serialNum1,serialNum1Addr,2);
+			//printf("%s连接失败\r\n",lockinfo.SN1name);
+		}	
+	}
+	else if(temp==1)
+	{
+		if(sendCmd_BT(macsetptr->SN2CONN,macsetptr->SN2ED,1,1))
+		{
+			//printf("%s连接成功\r\n",lockinfo.SN2name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+			}
 		}
-
+		else
+		{
+			//printf("%s连接失败\r\n",lockinfo.SN2name);
+		}	
+	}
+	else if(temp==2)
+	{
+		if(sendCmd_BT(macsetptr->SN3CONN,macsetptr->SN3ED,1,1))
+		{
+			printf("%s连接成功\r\n",lockinfo.SN3name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+			}
+		}
+		else
+		{
+			printf("%s连接失败\r\n",lockinfo.SN3name);
+		}	
+	}
+	else if(temp==3)
+	{
+		if(sendCmd_BT(macsetptr->SN4CONN,macsetptr->SN4ED,1,1))
+		{
+			printf("%s连接成功\r\n",lockinfo.SN4name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+			}
+		}
+		else
+		{
+			printf("%s连接失败\r\n",lockinfo.SN4name);
+		}	
 	}
-
-	
-	
-	
-	
-	
-	
-	
 	
+	else if(temp==4)
+	{
+		if(sendCmd_BT(macsetptr->SN5CONN,macsetptr->SN5ED,1,1))
+		{
+			printf("%s连接成功\r\n",lockinfo.SN5name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+			}
+		}
+		else
+		{
+			printf("%s连接失败\r\n",lockinfo.SN5name);
+		}	
+	}
+	else if(temp==5)
+	{
+		if(sendCmd_BT(macsetptr->SN6CONN,macsetptr->SN6ED,1,1))
+		{
+			printf("%s连接成功\r\n",lockinfo.SN6name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+			}
+		}
+		else
+		{
+			printf("%s连接失败\r\n",lockinfo.SN6name);
+		}	
+	}
+		
+	else if(temp==6)
+	{
+		if(sendCmd_BT(macsetptr->SN7CONN,macsetptr->SN7ED,1,1))
+		{
+			printf("%s连接成功\r\n",lockinfo.SN7name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+			}
+		}
+		else
+		{
+			printf("%s连接失败\r\n",lockinfo.SN7name);
+		}	
+	}
+	else if(temp==7)
+	{
+		if(sendCmd_BT(macsetptr->SN8CONN,macsetptr->SN8ED,1,1))
+		{
+			printf("%s连接成功\r\n",lockinfo.SN8name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+			}
+		}
+		else
+		{
+			printf("%s连接失败\r\n",lockinfo.SN8name);
+		}	
+	}
+}
+
+
+void connectDevices() {
+    int connectedDevice = 0; // 用于跟踪已连接的设备的数量
+    int devices[8] = {0}; // 数组用于跟踪设备的连接状态(0 - 未连接,1 - 已连接)
+    
+    while (connectedDevice < macsetptr->macCount) { // 直到已连接设备数量达到macCount时继续循环
+        for (int i = 0; i < macsetptr->macCount; i++) { // 循环遍历所有设备
+            if (devices[i] == 0) { // 检查设备是否未连接
+                // 尝试连接设备
+                //printf("正在尝试连接设备 %d...\n", i);
+                // 连接代码
+                int connectionStatus = BtLockConn(i, 0); 
+                if (connectionStatus == 1) { // 如果连接成功
+                    //printf("已连接设备 %d!\n", i);
+                    devices[i] = 1; // 将设备标记为已连接
+                    connectedDevice++; // 已连接设备数量加一
+                    // 对已连接设备进行操作
+                } else {
+                    //printf("无法连接设备 %d。\n", i);
+                }
+                
+                // 添加超时机制,使用HAL_Delay函数
+                HAL_Delay(200); // 等待200毫秒
+				printf("%d\r\n",i);
+				printf("%d\r\n",macsetptr->macCount);
+            }
+        }
+    }
+    if(connectedDevice==macsetptr->macCount)
+	{
+		menu.current=0;
+	}
+    
+    // 所有设备均已连接,可以在这里进行进一步操作
+}
+void open_close_lock(void)
+{
+	connectDevices();
 	
+
 }
+

+ 1 - 3
Core/Src/ml307a.c

@@ -144,7 +144,6 @@ void ML307A_Init(void)
 			}
 			//break;
 		}
-		
 		case 4:
 		{
 			sendCmd_4G("AT+MIPCFG=\"encoding\",1,1,1\r\n", "OK", 1, 1);//默认输入输出为ASCII,0    发16,1    接16,1
@@ -160,7 +159,6 @@ void ML307A_Init(void)
 						if(sendCmd_4G("AT+MGNSS=1\r\n", "OK", 1, 1))
 						{
 							printf("#开启MGNSS\r\n");
-							 
 							MgnssFlag=true;
 						}
 					}
@@ -244,7 +242,7 @@ void Pre_processing_4G(void)//
 	if(!Online)
 	{
 		printf("未连接平台\r\n");
-		wdiFlag = true;
+		//wdiFlag = true;
 	}
 }
 

+ 4 - 1
Core/Src/stm32f1xx_it.c

@@ -391,7 +391,6 @@ void USART1_IRQHandler(void)
 		U1_485recvLength  =  BUFFER_SIZE - temp; //总计数减去未传输的数据个数,得到已经接收的数据个数
 	
 		U1_485reFlag = 1;//清除接收结束标志位
-		U1_485recvLength = 0;//清除计数
 
 //**初始化测试		
 		//HAL_UART_Transmit_DMA(&huart1, U1_485recvBuff, U1_485recvLength);
@@ -499,6 +498,10 @@ void UART5_IRQHandler(void)
 		U5_BTreFlag = true;
 		
     }
+	if(U5_BTrecvBuff[0]==0x66)
+	{
+		memcpy(BT_Rebuffer,U5_BTrecvBuff,20);
+	}
   /* USER CODE END UART5_IRQn 0 */
   HAL_UART_IRQHandler(&huart5);
   /* USER CODE BEGIN UART5_IRQn 1 */

+ 144 - 28
Core/Src/tt808.c

@@ -50,6 +50,9 @@ bool Offline = false;
 bool Retrans = false;
 bool Online = false;
 bool reIME = false;
+
+
+bool reAuth = false;//回复权限
 /**
 				时间     纬度(北纬)   经度(东经)  水平精度因子  海拔高度    定位类型(1无,2 2d,3 3d) 运动角度    水平运动速度(KM/h)    水平运动速度(Knots)	日月年	卫星数量	差分定位标识(1单点,2差分)
 eg.+MGNSSLOC: 015032.301,3014.8605N,12001.9250E,1.8,			17.6,		3,                      0.00,		3.6,			      1.9,					080424,	12,			1	 
@@ -160,7 +163,7 @@ uint8_t Message_bodydata(uint8_t *Message, uint8_t length, uint8_t outMessage[],
 	int index = 0;
 	uint8_t temp_length = 0;//加首尾 25/23/crc
 	
-	if(MessageID==MessageID_authentication  || MessageID==MessageID_heartbeat)//不加头尾(鉴权、心跳)
+	if(MessageID==MessageID_authentication  || MessageID==MessageID_heartbeat || MessageID==MessageID_Getauth)//不加头尾(鉴权、心跳、获取权限
 	{
 		temp_length = length;//不加首尾
 		uint8_t temp_Message[temp_length];
@@ -215,6 +218,7 @@ uint8_t Message_bodydata(uint8_t *Message, uint8_t length, uint8_t outMessage[],
 			outMessage[i]=temp_Message[i];
 		}
 	}
+
 	else//加首尾
 	{
 		temp_length = length+3;//加首尾 25/23/crc
@@ -243,7 +247,6 @@ void tt808FsFunc(uint8_t* Message, uint8_t length, uint16_t MessageID)
 	HAL_Delay(200);
 	Messagetemp_length = Message_bodydata(Message, length, MessageHandleData, MessageID);
 	MessageHandle(MessageID);
-	
 }
 
 
@@ -552,45 +555,147 @@ void Test485Re(void)
 	 REPdaMode();//PDA 485 MQTT
 }
 				
-void AtPRocess(char *value, char *conn,char *connected,char *disconn) {
-    sprintf(conn, "AT+CONN=%s\r\n", value);
-    sprintf(connected, "+CONNECTED:0,%s", value);
-    sprintf(disconn, "+DISCONN:0,%s", value);
+void AtPRocess(char *value, char conn[],char connected[],char disconn[]) {
+
+    // 使用snprintf代替sprintf以确保不会发生缓冲区溢出
+    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);
+}
+
+void Process_str_collections()
+{
+	if(macset.macCount==1){
+		AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);}
+	else if(macset.macCount==2){
+		AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
+		AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);}
+	else if(macset.macCount==3){
+		AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
+		AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
+		AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);}
+	else if(macset.macCount==4){
+		AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
+		AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
+		AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
+		AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);}
+	else if(macset.macCount==5){
+		AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
+		AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
+		AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
+		AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);
+		AtPRocess(lockinfo.SN5name,macset.SN5CONN, macset.SN5ED, macset.SN5DIS);}
+	else if(macset.macCount==6){
+		AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
+		AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
+		AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
+		AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);
+		AtPRocess(lockinfo.SN5name,macset.SN5CONN, macset.SN5ED, macset.SN5DIS);
+		AtPRocess(lockinfo.SN6name,macset.SN6CONN, macset.SN6ED, macset.SN6DIS);}
+	else if(macset.macCount==7){
+		AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
+		AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
+		AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
+		AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);
+		AtPRocess(lockinfo.SN5name,macset.SN5CONN, macset.SN5ED, macset.SN5DIS);
+		AtPRocess(lockinfo.SN6name,macset.SN6CONN, macset.SN6ED, macset.SN6DIS);
+		AtPRocess(lockinfo.SN7name,macset.SN7CONN, macset.SN7ED, macset.SN7DIS);}
+	else if(macset.macCount==8){
+		AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
+		AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
+		AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
+		AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);
+		AtPRocess(lockinfo.SN5name,macset.SN5CONN, macset.SN5ED, macset.SN5DIS);
+		AtPRocess(lockinfo.SN6name,macset.SN6CONN, macset.SN6ED, macset.SN6DIS);
+		AtPRocess(lockinfo.SN7name,macset.SN7CONN, macset.SN7ED, macset.SN7DIS);
+		AtPRocess(lockinfo.SN8name,macset.SN8CONN, macset.SN8ED, macset.SN8DIS);}
+}
+void processPdadata(char MACtemp[], uint8_t mactemp[],uint16_t mac[])
+{
 	
-	printf("%s\r\n",conn);
-	printf("%s\r\n",connected);
-	printf("%s\r\n",disconn);
+	const char *hex = (const char *)MACtemp;  // 将 uint8_t * 转换为 const char *
+	int size = strlen(hex) / 2;  // 计算二进制数据的长度
+	unsigned char *bin = (unsigned char *)malloc(size);  // 分配足够的内存用于存储二进制数据
+	rlt = hex2bin(bin, hex);  // 调用hex2bin函数进行转换
+	memcpy(mactemp, bin, rlt);  // 将 bin 中的 rlt 个字节复制到 MIPurc1 中						接收到的数据放入MIPurc1中
+	free(bin);  // 释放内存  
+	mac[0] = mactemp[0]<<8|mactemp[1];
+	mac[1] = mactemp[2]<<8|mactemp[3];
+	mac[2] = mactemp[4]<<8|mactemp[5];
 }
 
 void REPdaMode(void)
 {
+	HAL_StatusTypeDef WriteSta;
 	//*PDA需求	485写入MAC号
 	 if(strncmp((char*)U1_485recvBuff, "DTU+ADDMAC",  strlen("DTU+ADDMAC"))==0)
 	 {
-		memcpy(macset.MACtemp,U1_485recvBuff+11,12);
-		const char *hex = (const char *)macset.MACtemp;  // 将 uint8_t * 转换为 const char *
-		int size = strlen(hex) / 2;  // 计算二进制数据的长度
-		unsigned char *bin = (unsigned char *)malloc(size);  // 分配足够的内存用于存储二进制数据
-		rlt = hex2bin(bin, hex);  // 调用hex2bin函数进行转换
-		memcpy(macset.mactemp, bin, rlt);  // 将 bin 中的 rlt 个字节复制到 MIPurc1 中						接收到的数据放入MIPurc1中
-		free(bin);  // 释放内存  
-		 
-		macset.mac[0] = macset.mactemp[0]<<8|macset.mactemp[1];
-		macset.mac[1] = macset.mactemp[2]<<8|macset.mactemp[3];
-		macset.mac[2] = macset.mactemp[4]<<8|macset.mactemp[5];
-		HAL_StatusTypeDef WriteSta;
-		 
-		WriteSta= Flash_WriteBytes(macsetptr->mac,MacDbBodyAddr + (macset.macCount*6),3);
-		macset.macCount += 1;
+		 macset.macCount=0;
+		 memset(lockinfo.SN1name, 0, sizeof(lockinfo.SN1name));
+		 memset(lockinfo.SN2name, 0, sizeof(lockinfo.SN2name));
+		 memset(lockinfo.SN3name, 0, sizeof(lockinfo.SN3name));
+		 memset(lockinfo.SN4name, 0, sizeof(lockinfo.SN4name));
+		 memset(lockinfo.SN5name, 0, sizeof(lockinfo.SN5name));
+		 memset(lockinfo.SN6name, 0, sizeof(lockinfo.SN6name));
+		 memset(lockinfo.SN7name, 0, sizeof(lockinfo.SN7name));
+		 memset(lockinfo.SN8name, 0, sizeof(lockinfo.SN8name));
+		 erase_flash(MacDbBodyAddr);
+		 if(U1_485recvLength>12)
+		 {
+			memcpy(macset.MACtemp1,U1_485recvBuff+11,12);
+			processPdadata(macset.MACtemp1,macset.mactemp1,macset.mac1);
+			WriteSta= Flash_WriteBytes(macsetptr->mac1,MacDbBodyAddr,3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(U1_485recvLength>25){
+			memcpy(macset.MACtemp2,U1_485recvBuff+24,12);
+			processPdadata(macset.MACtemp2,macset.mactemp2,macset.mac2);
+			WriteSta= Flash_WriteBytes(macsetptr->mac2,MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(U1_485recvLength>38){
+			memcpy(macset.MACtemp3,U1_485recvBuff+37,12);
+			processPdadata(macset.MACtemp3,macset.mactemp3,macset.mac3);
+			WriteSta= Flash_WriteBytes(macsetptr->mac3,MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(U1_485recvLength>51){
+			memcpy(macset.MACtemp4,U1_485recvBuff+50,12);
+			processPdadata(macset.MACtemp4,macset.mactemp4,macset.mac4);
+			WriteSta= Flash_WriteBytes(macsetptr->mac4,MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(U1_485recvLength>64){
+			memcpy(macset.MACtemp5,U1_485recvBuff+63,12);
+			processPdadata(macset.MACtemp5,macset.mactemp5,macset.mac5);
+			WriteSta= Flash_WriteBytes(macsetptr->mac5,MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(U1_485recvLength>77){
+			memcpy(macset.MACtemp6,U1_485recvBuff+76,12);
+			processPdadata(macset.MACtemp6,macset.mactemp6,macset.mac6);
+			WriteSta= Flash_WriteBytes(macsetptr->mac6,MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(U1_485recvLength>90){
+			memcpy(macset.MACtemp7,U1_485recvBuff+89,12);
+			processPdadata(macset.MACtemp7,macset.mactemp7,macset.mac7);
+			WriteSta= Flash_WriteBytes(macsetptr->mac7,MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+		 if(U1_485recvLength>103){
+			memcpy(macset.MACtemp8,U1_485recvBuff+102,12);
+			processPdadata(macset.MACtemp8,macset.mactemp8,macset.mac8);
+			WriteSta= Flash_WriteBytes(macsetptr->mac8,MacDbBodyAddr+(macset.macCount*6),3);
+			if(WriteSta== HAL_OK)	macset.macCount += 1;}
+
 		if(WriteSta == HAL_OK)
 		{
-			printf("更新MAC存储完成\r\n");
+			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(U1_485recvBuff,0,BUFFER_SIZE);
 	 }
 }
@@ -598,8 +703,6 @@ void ReBTcall(void)
 {
 	 if(strncmp((char*)autoRe, "+CONNECTED:0,",  strlen("+CONNECTED:0,"))==0)
 	 {
-		 TIPS_MACRO(ConnOK);//连接成功
-		 printf("设备已连接\r\n");
 		 memset(autoRe,0,BUFFER_SIZE);
 	 }
 
@@ -610,7 +713,6 @@ void ReMIPURC(void)//DTU
 //*设备上线,发送成功
 	 if(strncmp((char*)U4_4GrecvBuff, "+MIPOPEN: 1,0",  strlen("+MIPOPEN: 1,0"))==0)//连接平台
 	 {
-
 		 memset(U4_4GrecvBuff,0,BUFFER_SIZE);
 	 }	 
 ///*定位信息(MGNSS)
@@ -770,6 +872,20 @@ void MIPURCHandle(void)
 				}
 				memset(MIPurc,0,rlt);//rlt下发长度 
 			}
+			else if(xxRE == MessageID_Getauth)//获取权限
+			{
+				if(YESorNO==YES)
+				{
+					printf("@权限应答yes\r\n");
+					reAuth=true;
+				}
+				else if(YESorNO==NO)
+				{
+					printf("@权限应答no\r\n");
+					reAuth=false;
+				}
+				memset(MIPurc,0,rlt);//rlt下发长度 
+			}
 		 }
 		 else if(PTXXID == XXID_ptxxtc)	//收到平台消息透传 8900
 		 {

+ 13 - 11
Core/Src/usart.c

@@ -31,6 +31,7 @@ uint8_t U4_4GreFlag = 0;
 uint8_t U4_4GrecvBuff[BUFFER_SIZE];
 uint8_t U4_4GrecvLength = 0;  //接收一帧数据的长度
 
+uint8_t BT_Rebuffer[20];
 uint8_t U5_BTreFlag = 0;
 uint8_t U5_BTrecvBuff[BUFFER_SIZE];
 uint8_t U5_BTrecvBuff1[BUFFER_SIZE];
@@ -637,17 +638,16 @@ PUTCHAR_PROTOTYPE
 //}
 
 
-//void erase_flash(uint32_t ADDR_FLASH){                //进行擦除
-//    FLASH_EraseInitTypeDef erase_init;
-//    erase_init.TypeErase = FLASH_TYPEERASE_PAGES;  // 擦除类型为页擦除
-//    erase_init.PageAddress = ADDR_FLASH;  
-//    erase_init.NbPages = 1;  // 擦除的页数
-//    uint32_t page_error = 0;
-//    HAL_FLASH_Unlock();  // 解锁Flash
-//    HAL_StatusTypeDef status = HAL_FLASHEx_Erase(&erase_init, &page_error);  // 执行擦除操作
-//    HAL_FLASH_Lock();  // 上锁Flash
-//	HAL_Delay(10);
-//}
+void erase_flash(uint32_t ADDR_FLASH){                //进行擦除
+    FLASH_EraseInitTypeDef erase_init;
+    erase_init.TypeErase = FLASH_TYPEERASE_PAGES;  // 擦除类型为页擦除
+    erase_init.PageAddress = ADDR_FLASH;  
+    erase_init.NbPages = 1;  // 擦除的页数
+    uint32_t page_error = 0;
+    HAL_FLASH_Unlock();  // 解锁Flash
+    HAL_StatusTypeDef status = HAL_FLASHEx_Erase(&erase_init, &page_error);  // 执行擦除操作
+    HAL_FLASH_Lock();  // 上锁Flash
+}
 
 //void Write_Info64(uint32_t addr, uint64_t newValue) {//烧写mac号
 //    erase_flash(addr);
@@ -834,6 +834,8 @@ void sendCombinedArray(uint8_t *header, size_t headerLength, uint8_t *command, s
 		
     // 计算combinedArray的CRC校验和
     uint16_t result_frame = crc16(combinedArray, sizeof(combinedArray) - 2);
+	
+	
     // 将result_frame添加到combinedArray
     combinedArray[18] = result_frame & 0xFF;		//低字节在前
     combinedArray[19] = (result_frame >> 8) & 0xFF;

+ 36 - 6
MDK-ARM/dtu.uvoptx

@@ -153,17 +153,17 @@
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>lockinfo</ItemText>
+          <ItemText>macset</ItemText>
         </Ww>
         <Ww>
           <count>1</count>
           <WinNumber>1</WinNumber>
-          <ItemText>macStr</ItemText>
+          <ItemText>U1_485recvBuff</ItemText>
         </Ww>
         <Ww>
           <count>2</count>
           <WinNumber>1</WinNumber>
-          <ItemText>macsetptr</ItemText>
+          <ItemText>lockinfo</ItemText>
         </Ww>
         <Ww>
           <count>3</count>
@@ -173,7 +173,37 @@
         <Ww>
           <count>4</count>
           <WinNumber>1</WinNumber>
-          <ItemText>mac1</ItemText>
+          <ItemText>mac_u16</ItemText>
+        </Ww>
+        <Ww>
+          <count>5</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>macStr_init[i]</ItemText>
+        </Ww>
+        <Ww>
+          <count>6</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>macStr_init</ItemText>
+        </Ww>
+        <Ww>
+          <count>7</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>\\dtu\../Core/Src/main.c\mac[12]</ItemText>
+        </Ww>
+        <Ww>
+          <count>8</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>lockinfo</ItemText>
+        </Ww>
+        <Ww>
+          <count>9</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>macset</ItemText>
+        </Ww>
+        <Ww>
+          <count>10</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>dblocptr</ItemText>
         </Ww>
       </WatchWindow1>
       <WatchWindow2>
@@ -187,7 +217,7 @@
         <Mm>
           <WinNumber>1</WinNumber>
           <SubType>0</SubType>
-          <ItemText>MacDbBodyAddr</ItemText>
+          <ItemText>MacDbHeadAddr</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
@@ -305,7 +335,7 @@
       <GroupNumber>2</GroupNumber>
       <FileNumber>4</FileNumber>
       <FileType>1</FileType>
-      <tvExp>1</tvExp>
+      <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\Core\Src\oled.c</PathWithFileName>