2 Commits a5cfd4a5a7 ... a9beb04296

Author SHA1 Message Date
  zack a9beb04296 add newDisplay 1 year ago
  zack d74983113c backup0425 1 year ago

+ 128 - 44
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[30];
-	char SNED[30];
-	char SNDIS[30];
+	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;
@@ -284,16 +375,9 @@ struct keys
 
 
 
-// 定义一个结构体存储对应关系
-typedef struct {
-    char *command;
-    char *connected_msg;
-    char *disconnected_msg;
-    uint64_t mac;
-} MenuInfo;
-
 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;
 

+ 10 - 7
Core/Inc/key.h

@@ -13,15 +13,18 @@ void WritekeyInfo(void);
 
 extern char macStr[20][13]; 
 
-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*/
 
 

+ 2 - 0
Core/Inc/main.h

@@ -91,6 +91,8 @@ 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*/
 

+ 50 - 0
Core/Inc/oledfont.h

@@ -461,6 +461,32 @@ const unsigned char Hzk1[][32]={
 {0x40,0x40,0x42,0xCC,0x00,0x88,0x89,0x8E,0x88,0xF8,0x88,0x8C,0x8B,0x88,0x80,0x00,0x00,0x40,0x20,0x1F,0x20,0x40,0x50,0x48,0x46,0x41,0x42,0x44,0x58,0x40,0x40,0x00},/*"送",53*/
 {0x10,0x0C,0x04,0x24,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x24,0x04,0x14,0x0C,0x00,0x00,0x81,0x81,0x41,0x31,0x0F,0x01,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,0x00},/*"完",54*/
 {0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0x08,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x08,0x00,0x80,0x60,0x1F,0x00,0x10,0x20,0x1F,0x80,0x40,0x21,0x16,0x18,0x26,0x41,0xF8,0x00},/*"成",55*/
+{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"一",56*/
+{0x40,0x30,0xEF,0x24,0x24,0x80,0xE4,0x9C,0x10,0x54,0x54,0xFF,0x54,0x7C,0x10,0x00,0x01,0x01,0x7F,0x21,0x51,0x26,0x18,0x27,0x44,0x45,0x45,0x5F,0x45,0x45,0x44,0x00},/*"键",57*/
+
+
+{0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00},/*"正",58*/
+{0x08,0x08,0x88,0xC8,0x38,0x0C,0x0B,0x08,0x08,0xE8,0x08,0x08,0x08,0x08,0x08,0x00,0x02,0x01,0x00,0xFF,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x00},/*"在",59*/
+{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x1F,0x00,0x00,0x00},/*"申",60*/
+{0x40,0x42,0xCC,0x00,0x00,0x44,0x54,0x54,0x54,0x7F,0x54,0x54,0x54,0x44,0x40,0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x15,0x15,0x15,0x55,0x95,0x7F,0x00,0x00,0x00},/*"请",61*/
+{0x10,0x10,0xD0,0xFF,0x90,0x10,0x02,0x1E,0xE2,0x02,0x02,0x02,0xE2,0x1E,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x83,0x80,0x40,0x20,0x13,0x0C,0x13,0x20,0x40,0x80,0x00},/*"权",62*/
+{0x00,0xFE,0x22,0x5A,0x86,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,0xFF,0x04,0x08,0x07,0x00,0xFF,0x40,0x20,0x03,0x0C,0x14,0x22,0x41,0x40,0x00},/*"限",63*/
+	
+
+{0x40,0x42,0xCC,0x00,0x00,0x44,0x54,0x54,0x54,0x7F,0x54,0x54,0x54,0x44,0x40,0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x15,0x15,0x15,0x55,0x95,0x7F,0x00,0x00,0x00},/*"请",64*/
+{0xFC,0x04,0x04,0xFC,0x20,0x10,0xE8,0x27,0x24,0xE4,0x34,0x2C,0xE0,0x00,0x00,0x00,0x0F,0x04,0x04,0x0F,0x80,0x84,0x47,0x24,0x1C,0x07,0x1C,0x24,0x47,0x84,0x84,0x00},/*"唤",65*/
+{0xF2,0x12,0xFE,0x12,0xFE,0x12,0xF2,0x00,0x00,0xBE,0x2A,0xEA,0x2A,0x3E,0x00,0x00,0xFF,0x4A,0x49,0x48,0x49,0x49,0xFF,0x00,0x42,0x49,0x49,0x7F,0x49,0x49,0x40,0x00},/*"醒",66*/
+{0x04,0x04,0xE4,0x04,0x0F,0xF4,0x04,0x04,0xF4,0x44,0xCF,0x44,0x44,0x44,0x04,0x00,0x40,0x40,0x7D,0x44,0x44,0x7D,0x44,0x45,0x44,0x7C,0x44,0x45,0x7C,0x40,0x40,0x00},/*"蓝",67*/
+{0x00,0x00,0xC2,0xB2,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x80,0x00,0x00,0x20,0x20,0x10,0x08,0x04,0x02,0x41,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00},/*"牙",68*/
+{0x20,0x10,0x2C,0xE7,0x24,0x24,0x00,0xE2,0x2C,0x20,0xBF,0x20,0x28,0xE6,0x00,0x00,0x01,0x01,0x01,0x7F,0x21,0x11,0x80,0x4F,0x20,0x10,0x0F,0x10,0x20,0x4F,0x80,0x00},/*"锁",69*/
+{0x90,0x52,0x34,0x10,0xFF,0x10,0x34,0x52,0x80,0x70,0x8F,0x08,0x08,0xF8,0x08,0x00,0x82,0x9A,0x56,0x63,0x22,0x52,0x8E,0x00,0x80,0x40,0x33,0x0C,0x33,0x40,0x80,0x00},/*"数",70*/
+	
+	
+	
+{0x00,0x00,0xFC,0x24,0x24,0x22,0xE3,0x02,0xFC,0x44,0x44,0x42,0xC3,0x42,0x40,0x00,0x40,0x30,0x0F,0x02,0x02,0x82,0x43,0x30,0x0F,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"所",71*/
+{0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00},/*"有",72*/
+{0x00,0x00,0xE2,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00},/*"已",73*/
+
 
 
 
@@ -517,6 +543,14 @@ const unsigned char Hzk5[][24]={	//12*12
 {0x00,0xFC,0x24,0x24,0xE4,0x04,0xFF,0x04,0x85,0x66,0x04,0x00,0x08,0x07,0x00,0x02,0x0B,0x04,0x02,0x01,0x02,0x04,0x0F,0x00},/*"成",24*/
 {0x04,0x04,0xFC,0x04,0x04,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x02,0x02,0x01,0x09,0x05,0x03,0x00,0x00,0x08,0x08,0x07,0x00},/*"功",25*/
 	
+	
+{0x00,0xF2,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x7E,0x00,0x00,0x00,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x00},/*"已",26*/
+{0xDC,0xB3,0x88,0x00,0x24,0xFF,0x24,0x00,0xFE,0x32,0xCE,0x00,0x04,0x04,0x02,0x08,0x05,0x03,0x01,0x00,0x0F,0x02,0x01,0x00},/*"绑",27*/
+{0x2C,0x24,0xA4,0x24,0x25,0xE6,0x24,0x24,0x24,0x24,0x2C,0x00,0x08,0x04,0x03,0x04,0x08,0x0F,0x09,0x09,0x09,0x09,0x08,0x00},/*"定",28*/
+{0x94,0xF3,0x92,0x00,0xF2,0x14,0x10,0xDF,0x10,0x14,0xF2,0x00,0x00,0x0F,0x04,0x08,0x09,0x04,0x02,0x01,0x02,0x04,0x09,0x00},/*"锁",29*/
+{0x88,0x88,0xFF,0x48,0x70,0x57,0x75,0x85,0x75,0x57,0x70,0x00,0x00,0x08,0x0F,0x00,0x09,0x05,0x03,0x0F,0x03,0x05,0x09,0x00},/*"操",30*/
+{0x20,0x10,0xFC,0x03,0x08,0x07,0xFC,0x24,0x24,0x24,0x04,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x01,0x01,0x01,0x01,0x00},/*"作",31*/
+	
 
 	
 };
@@ -550,8 +584,14 @@ const unsigned char Hzk6[][28]={	//14*14
 
 {0x08,0x08,0xFF,0x88,0x00,0x70,0x57,0x75,0x05,0x75,0x57,0x70,0x00,0x00,0x21,0x21,0x3F,0x00,0x12,0x12,0x0A,0x06,0x3F,0x06,0x0A,0x12,0x12,0x00},/*"操",20*/
 {0x40,0x20,0xF8,0x07,0x20,0x18,0x07,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x3F,0x04,0x04,0x04,0x04,0x04,0x00},/*"作",21*/
+
+{0x00,0xF2,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x7E,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00},/*"已",22*/
+{0x90,0xDC,0xB3,0x98,0x04,0x24,0xFF,0x24,0x00,0xFE,0x02,0x62,0x9E,0x00,0x08,0x08,0x04,0x04,0x21,0x11,0x0F,0x01,0x00,0x3F,0x08,0x08,0x07,0x00},/*"绑",23*/
+{0x0C,0x04,0x24,0x24,0x24,0x25,0xE6,0x24,0x24,0x24,0x24,0x04,0x0C,0x00,0x20,0x10,0x0F,0x10,0x20,0x20,0x3F,0x22,0x22,0x22,0x22,0x20,0x20,0x00},/*"定",24*/
+{0x10,0x28,0xE7,0x24,0x24,0x00,0xF2,0x14,0x10,0xDF,0x10,0x14,0xF2,0x00,0x01,0x01,0x3F,0x11,0x09,0x20,0x27,0x10,0x08,0x07,0x08,0x10,0x27,0x00},/*"锁",25*/
 	
 
+
 	
 };
 
@@ -577,6 +617,16 @@ const unsigned char Hzk7[][54]={	//18*18
 {0x00,0x00,0x10,0xE0,0xFF,0x90,0x90,0x50,0x20,0x98,0x87,0x86,0x88,0x90,0x20,0x60,0x00,0x00,0x00,0x08,0x06,0x01,0xFF,0x00,0x03,0x84,0xB8,0x80,0x86,0x98,0xC0,0xB9,0x86,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"检",13*/
 };
 
+const unsigned char Hzk8[][28]={	//15*15
+
+{0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"一",0*/
+{0x40,0x30,0xCE,0x28,0x28,0x68,0x58,0xD4,0x54,0xFE,0x54,0x78,0x10,0x00,0x00,0x01,0x3F,0x31,0x29,0x16,0x0E,0x15,0x25,0x3F,0x25,0x25,0x20,0x00},/*"键",1*/
+{0x00,0x00,0xF0,0x4E,0xD0,0x08,0x30,0xD8,0x8E,0xF8,0x48,0xC8,0x08,0x00,0x00,0x30,0x1F,0x20,0x1F,0x01,0x01,0x3F,0x20,0x2F,0x24,0x27,0x38,0x00},/*"施",2*/
+{0x00,0x20,0xD8,0xA6,0xF8,0xE8,0x20,0x20,0xDA,0x04,0xC2,0x32,0x0C,0x00,0x00,0x38,0x07,0x02,0x1F,0x3F,0x04,0x07,0x04,0x05,0x1F,0x05,0x04,0x00},/*"解",3*/
+{0x00,0x40,0x48,0x88,0x7E,0x48,0x40,0x20,0xA0,0x20,0xFE,0x22,0x10,0x00,0x00,0x22,0x12,0x12,0x1F,0x12,0x12,0x00,0x01,0x20,0x3F,0x00,0x00,0x00},/*"封",4*/	
+	
+	
+};
 
 
 

+ 4 - 1
Core/Inc/tt808.h

@@ -31,7 +31,7 @@ extern char MAC4temp[13];
 void Regular_reporting_Loc(void);
 void pushpullWork(void);
 extern bool Retrans;
-
+void AtPRocess(char *value, char *conn,char *connected,char* disconn) ;
 extern MacSet *macsetptr;
 extern bool Offline ;
 void Test485Re(void);
@@ -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

+ 51 - 21
Core/Src/freertos.c

@@ -160,10 +160,26 @@ void StartScanKeyTask(void const * argument)
 	updatekeystate(); 				//扫描键值
     Jump_interface(); 		    	//跳转界面
     OLED_Refresh(); 				//刷新界面
+	  
 	Test485Re();//485CMD
+	  
 	ReBTcall();//蓝牙回应
 	  
-	OpenCloseLock();
+   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 */
@@ -211,24 +227,39 @@ 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 */
 }
@@ -252,7 +283,6 @@ void StartloginfoTaskTask(void const * argument)
 	{	
 //		USART_SendString(&huart4, "AT+CSQ\r\n");
 //		USART_SendString(&huart4, "AT+MGNSSLOC\r\n");
-		
 	}
 #endif
 	
@@ -264,7 +294,7 @@ void StartloginfoTaskTask(void const * argument)
 	if(nomalCount==3)
 	{
 		nomalCount=0;
-		if(uploaweork && dblocptr->location.longitudeH!=0)
+		if(uploaweork)
 		{
 			//tt808FsFunc((uint8_t*)&(dblocptr->location.alarmFlagH), 34, MessageID_location);
 		}

File diff suppressed because it is too large
+ 143 - 2007
Core/Src/interface.c


+ 32 - 181
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:
-						{
-							SWITCH_MENU_DOWN4();//四选项选择
-							break;
-						}
-						case 3:
-						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,12 +134,7 @@ uint8_t KEY_2_Scan_PDA(void)
     return 0;
 }
 
-uint8_t preCurrent = 0;
-uint8_t preBind = 0;
-bool L1work = false;
-bool L2work = false;
-bool L3work = false;
-bool L4work = false;
+
 
 char macStr[20][13]; // 长度为13的字符串加上字符串结束符'\0'
 
@@ -210,128 +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*6,Sn1InfoAddr,3);
-								break;
-							}
-							if(preBind==2)//L2确认绑定
-							{
-								L2bd=true;
-								sprintf(lockinfo.SN2name, "%s", macStr[menu.next]+8);
-								Flash_WriteBytes(macsetptr->mac+menu.next*6,Sn2InfoAddr,3);
-								break;
-								
-							}
-							if(preBind==1)//L3确认绑定
-							{
-								L3bd=true;
-								sprintf(lockinfo.SN3name, "%s", macStr[menu.next]+8);
-								Flash_WriteBytes(macsetptr->mac+menu.next*6,Sn3InfoAddr,3);
-								break;
-								
-							}
-							if(preBind==0)//L4确认绑定
-							{
-								L4bd=true;
-								sprintf(lockinfo.SN4name, "%s", macStr[menu.next]+8);
-								Flash_WriteBytes(macsetptr->mac+menu.next*6,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
-							{
-							}
-							else if(preworkUp == 2)	//L2
-							{
-							}
-							else if(preworkUp == 1)	//L3
-							{
-							}
-							else if(preworkUp == 0)	//L4
-							{
-							}
+							}							
 						}
-	
 					}
 
 					#if debugkeyinfo == 1
@@ -376,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;
 						}
 						
@@ -425,7 +277,6 @@ uint8_t KEY_4_Scan_PDA(void)
 
 
 
-
 void updatekeystate(void)
 {
 	KEY_1_Scan_PDA();

+ 87 - 30
Core/Src/main.c

@@ -132,9 +132,12 @@ int main(void)
     
   
   MBA32A_Init();
-  //reset4Gmodule = true;
+  reset4Gmodule = true;
 
   ReadSNname();
+  
+  
+  
   /* USER CODE END 2 */
 
   /* Call init function for freertos objects (in freertos.c) */
@@ -202,67 +205,121 @@ void SystemClock_Config(void)
     Error_Handler();
   }
 }
-
-/* USER CODE BEGIN 4 */
+/* USER CODE BEGIN 4 */	
+char mac[120];
+char macStr_init[8][13]; // 长度为13的字符串加上字符串结束符'\0'
+uint16_t mac_u16[24];
 void ReadSNname(void)
 {
-	char mac[100];
-	char macStr_init[8][13]; // 长度为13的字符串加上字符串结束符'\0'
-	uint16_t mac1[3];
-	uint16_t mac2[3];
-	uint16_t mac3[3];
-	uint16_t mac4[3];
-	Flash_ReadBytes(mac1,Sn1InfoAddr,3);
-	Flash_ReadBytes(mac2,Sn2InfoAddr,3);
-	Flash_ReadBytes(mac3,Sn3InfoAddr,3);
-	Flash_ReadBytes(mac4,Sn4InfoAddr,3);
+	Flash_ReadBytes(&macsetptr->macCount,MacDbHeadAddr,1);//获取共存多少MAC(用于重启写入)
+	if(macsetptr->macCount==0xFFFF)
+	{
+		macsetptr->macCount=0;
+	}
+	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, 6);//将uint16数组转换成char数组 (FLASH中的字符串)
-	bin2hex(mac+6, (unsigned char *)mac2, 6);//将uint16数组转换成char数组 (FLASH中的字符串)
-	bin2hex(mac+12, (unsigned char *)mac3, 6);//将uint16数组转换成char数组 (FLASH中的字符串)
-	bin2hex(mac+18, (unsigned char *)mac4, 6);//将uint16数组转换成char数组 (FLASH中的字符串)
 	// 分割mac并放入macStr数组中
 	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
+	{
+		sprintf(lockinfo.SN1name, "%s",macStr_init[0]);
+	}
+	
+	if(mac[12]==0)
+	{
+		//Todo
+		printf("mac2未绑定\r\n");
+	}
+	else
+	{
+		sprintf(lockinfo.SN2name, "%s",macStr_init[1]);
+	}	
+	if(mac[24]==0)
 	{
 		//Todo
+		printf("mac3未绑定\r\n");
 	}
 	else
 	{
-		L1bd=true;
-		sprintf(lockinfo.SN1name, "%s",macStr_init[0]+8 );
+		sprintf(lockinfo.SN3name, "%s",macStr_init[2]);
+	}		
+	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(mac2[0]==0xFFFF)
+	if(mac[60]==0)//6
 	{
 		//Todo
+		printf("mac6未绑定\r\n");
 	}
 	else
 	{
-		L2bd=true;
-		sprintf(lockinfo.SN2name, "%s",macStr_init[1]+8 );
+		sprintf(lockinfo.SN6name, "%s",macStr_init[5]);
 	}	
-	if(mac3[0]==0xFFFF)
+	
+	if(mac[72]==0)//7
 	{
 		//Todo
+		printf("mac7未绑定\r\n");
 	}
 	else
 	{
-		L3bd=true;
-		sprintf(lockinfo.SN3name, "%s",macStr_init[2]+8 );
+		sprintf(lockinfo.SN7name, "%s",macStr_init[6]);
 	}		
-	if(mac4[0]==0xFFFF)
+	
+	if(mac[84]==0)//8
 	{
 		//Todo
+		printf("mac8未绑定\r\n");
 	}
 	else
 	{
-		L4bd=true;
-		sprintf(lockinfo.SN4name, "%s",macStr_init[3]+8 );
+		sprintf(lockinfo.SN8name, "%s",macStr_init[7]);
 	}	
+	
+	
 }
 /* USER CODE END 4 */
 

+ 231 - 56
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,46 +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(L1work && preworkUp==3)//L1操作(操作完成置位)
+	if(temp==0)
+	{
+		if(sendCmd_BT(macsetptr->SN1CONN,macsetptr->SN1ED,1,1))
+		{
+			//printf("%s连接成功\r\n",lockinfo.SN1name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+				return 1;
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+				return 1;
+			}
+		}
+		else
+		{
+			//printf("%s连接失败\r\n",lockinfo.SN1name);
+		}	
+	}
+	else if(temp==1)
 	{
-		if(onOff_Num)//1:施封 0:解封
+		if(sendCmd_BT(macsetptr->SN2CONN,macsetptr->SN2ED,1,1))
 		{
-			close_lock();
+			//printf("%s连接成功\r\n",lockinfo.SN2name);
+			if(close)
+			{
+				close_lock(btframe); //施封操作
+			}
+			else
+			{
+				open_lock(btframe); //解封操作
+			}
 		}
 		else
 		{
-			open_lock();
+			//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); //解封操作
+			}
 		}
-		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);
-		L1work=false;
+		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");
-		reconn();//重连
+		//wdiFlag = true;
 	}
 }
 

+ 2 - 0
Core/Src/oled.c

@@ -327,6 +327,8 @@ void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t num,uint8_t size1,uint8_t mode
 				{temp=Hzk6[num][i];}//调用14*14字体
 		else if(size1==18)
 				{temp=Hzk7[num][i];}//调用18*18字体
+		else if(size1==15)
+				{temp=Hzk8[num][i];}//调用15*15字体
 				
 		else return;
 		for(m=0;m<8;m++)

+ 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 */

+ 146 - 60
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,92 +555,157 @@ 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 BindeProcess(char TEMP[], uint8_t temp[],uint64_t addr, char sname[],uint16_t mac[],char snconn[],char snced[],char sndis[])
+void Process_str_collections()
 {
-	memcpy(TEMP,U1_485recvBuff+10,12);
-	const char *hex = (const char *)TEMP;  // 将 uint8_t * 转换为 const char *
+	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[])
+{
+	
+	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(temp, bin, rlt);  // 将 bin 中的 rlt 个字节复制到 MIPurc1 中						接收到的数据放入MIPurc1中
+	memcpy(mactemp, bin, rlt);  // 将 bin 中的 rlt 个字节复制到 MIPurc1 中						接收到的数据放入MIPurc1中
 	free(bin);  // 释放内存  
-	{
-//		if(addr==MAC1Addr)
-//		{
-//			L1bd=true;
-//			printf("\r\n绑定L1:%s\r\n",TEMP);
-//		}
-//		if(addr==MAC2Addr)
-//		{
-//			L2bd=true;
-//			printf("\r\n绑定L2:%s\r\n",TEMP);
-//		}
-//		if(addr==MAC3Addr)
-//		{
-//			L3bd=true;
-//			printf("\r\n绑定L3:%s\r\n",TEMP);
-//		}
-//		if(addr==MAC4Addr)
-//		{
-//			L4bd=true;
-//			printf("\r\n绑定L4:%s\r\n",TEMP);
-//		}
-		mac[0]=temp[0]<<8|temp[1];
-		mac[1]=temp[2]<<8|temp[3];
-		mac[2]=temp[4]<<8|temp[5];
-		sprintf(sname, "%04X", mac[2]);
-		printf("%04x%04x%04x\r\n",mac[0],mac[1],mac[2]);
-		Flash_WriteBytes(mac,addr,3);
-		AtPRocess(TEMP,snconn,snced,sndis);
-	}
+	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);
 	 }
 }
 void ReBTcall(void)
 {
-	 if(strncmp((char*)U5_BTrecvBuff, "+CONNECTED:0,",  strlen("+CONNECTED:0,"))==0)
+	 if(strncmp((char*)autoRe, "+CONNECTED:0,",  strlen("+CONNECTED:0,"))==0)
 	 {
-		 TIPS_MACRO(ConnOK);//连接成功
-		 printf("设备已连接\r\n");
+		 memset(autoRe,0,BUFFER_SIZE);
 	 }
-	memset(U5_BTrecvBuff,0,BUFFER_SIZE);
+
 }
 //*工作命令
 void ReMIPURC(void)//DTU
@@ -645,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)
@@ -805,9 +872,28 @@ 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
 		 {
+			authFlag = true;
+			Offline=false;	//待判定假消息
+			Online = true;	//待判定假消息
+			uploaweork=true;
+			 
 			 uint8_t tcsjLen = MIPurc[13];
 			 memcpy(MIPurcXXTCSJ,&MIPurc[13],xxtcLen);
 			 printf("@得到透传数据,%d\r\n",tcsjLen);

+ 13 - 13
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);
@@ -827,7 +827,6 @@ void sendCombinedArray(uint8_t *header, size_t headerLength, uint8_t *command, s
 		AES_init_ctx_iv(&ctx, DtuBtKey, iv);
 		AES_CBC_encrypt_buffer(&ctx, cmd_array, 16);
 	}
-	
     // 将cmd_array添加到combinedArray
     for (int i = 0; i < 16; i++) {
         combinedArray[i + headerLength] = cmd_array[i];
@@ -835,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;
@@ -842,7 +843,6 @@ void sendCombinedArray(uint8_t *header, size_t headerLength, uint8_t *command, s
     USART_SendHexArray(&huart5, combinedArray, sizeof(combinedArray));
 }
 
-
 uint32_t convertGPS(double temp) {
 //*WGS-84坐标
 	if(temp > 40)

+ 41 - 6
MDK-ARM/dtu.uvoptx

@@ -153,22 +153,57 @@
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>lockinfo</ItemText>
+          <ItemText>macset</ItemText>
         </Ww>
         <Ww>
           <count>1</count>
           <WinNumber>1</WinNumber>
-          <ItemText>macsetptr</ItemText>
+          <ItemText>U1_485recvBuff</ItemText>
         </Ww>
         <Ww>
           <count>2</count>
           <WinNumber>1</WinNumber>
-          <ItemText>macStr[2]</ItemText>
+          <ItemText>lockinfo</ItemText>
         </Ww>
         <Ww>
           <count>3</count>
           <WinNumber>1</WinNumber>
-          <ItemText>macStr</ItemText>
+          <ItemText>mac</ItemText>
+        </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
+          <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>
@@ -182,7 +217,7 @@
         <Mm>
           <WinNumber>1</WinNumber>
           <SubType>0</SubType>
-          <ItemText>MacDbBodyAddr</ItemText>
+          <ItemText>MacDbHeadAddr</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
@@ -384,7 +419,7 @@
       <GroupNumber>2</GroupNumber>
       <FileNumber>11</FileNumber>
       <FileType>1</FileType>
-      <tvExp>1</tvExp>
+      <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>../Core/Src/main.c</PathWithFileName>