zack 1 gadu atpakaļ
vecāks
revīzija
a5cfd4a5a7

+ 92 - 29
Core/Inc/ConfigMacros.h

@@ -15,7 +15,7 @@
 #define openBT			1	
 #define openUpload		1	
 #define updateMenu		1	
-#define debugkeyinfo	0
+#define debugkeyinfo	1
 #define open16			11	//开字
 #define open16			11	//开字
 #define close16			12	//关字
@@ -28,9 +28,9 @@
 #define PRINT_NUUID(message) 			printf("%s不符合\n",message)
 
 #define Sn1InfoAddr					((uint32_t)0x8050000)  
-#define Sn2InfoAddr					((uint32_t)0x8050100)  
-#define Sn3InfoAddr					((uint32_t)0x8050200)  
-#define Sn4InfoAddr					((uint32_t)0x8050300)  
+#define Sn2InfoAddr					((uint32_t)0x80501F0)  
+#define Sn3InfoAddr					((uint32_t)0x80502F0)  
+#define Sn4InfoAddr					((uint32_t)0x80503F0)  
 
 #define serialNum1Addr				((uint32_t)0x8050400)  
 #define serialNum2Addr				((uint32_t)0x8050500)  
@@ -44,6 +44,9 @@
 #define phoneNumADDR				((uint32_t)0x8051100)  
 #define ReIPAddr					((uint32_t)0x8051200)  
 
+#define MacDbHeadAddr				((uint32_t)0x8052000)  //数据库头部
+#define MacDbBodyAddr				((uint32_t)0x8052100)  //数据库身体
+
 
 
 #define LocDbHeadStart	((uint32_t)0x8060000)  
@@ -116,7 +119,7 @@ do {\
 #define START_PROCESS() \
     do { \
         printf("go\r\n"); \
-        menu.current = 0xBB; \
+        menu.current = 0xB1; \
         tipsflag = Starting; \
         Jump_interface(); \
         OLED_Refresh(); \
@@ -152,8 +155,79 @@ do { \
 } while(0)
 
 
+#define TIPS_MACRO(tips) \
+    do { \
+        menu.current = 0xb1; \
+        tipsflag = tips; \
+        refresh = true; \
+     } while(0)
 
+#define AUTORETURN_INTERFACE(wtime) \
+    do { \
+        if(HAL_GetTick() - enterInterface_time > wtime) { \
+            ReturnInterface = true; \
+        } \
+    } while(0)
+	
+#define SWITCH_MENU_UP4() \
+    do { \
+        if(menu.up != 3) { \
+            menu.up += 1; \
+            menu.next -= 1; \
+        } else if(menu.up == 3) { \
+            menu.up = 0; \
+            menu.next = 3; \
+        } \
+        refresh = true; \
+    } while(0)
+	
+#define SWITCH_MENU_DOWN4() \
+    do { \
+		if(menu.next!=3){ \
+			menu.up-=1; \
+			menu.next+=1; \
+		} else if(menu.next==3) { \
+			menu.up=3; \
+			menu.next=0; \
+		} \
+		refresh=true; \
+    } while(0)
+	
+	
+#define SWITCH_MENU_UP2() \
+    do { \
+		if(menu.up!=1) { \
+			menu.up+=1; \
+			menu.next-=1; \
+		} else if(menu.up==1){ \
+			menu.up=0; \
+			menu.next=1; \
+		} \
+		refresh=true; \
+    } while(0)	
+
+#define SWITCH_MENU_DOWN2() \
+    do { \
+		if(menu.next!=1){ \
+			menu.up-=1; \
+			menu.next+=1; \
+		} else if(menu.next==1) { \
+			menu.up=1; \
+			menu.next=0; \
+		} \
+		refresh=true; \
+    } while(0)		
+	
+typedef struct
+{
+	uint16_t macCount;
+	char MACtemp[13];
+	uint8_t mactemp[6];
+	//MAC
+	uint16_t mac[90];
+	
 
+} MacSet;
 typedef struct
 {
 	//四位数字(施解封显示)
@@ -161,29 +235,24 @@ typedef struct
 	char SN2name[5];
 	char SN3name[5];
 	char SN4name[5];
+	char SN5name[5];
+	char SN6name[5];
+	char SN7name[5];
+	char SN8name[5];
 	//AT连接字符串
-	char* SN1CONN;
-	char* SN1ED;
-	char* SN1DIS;
-	char* SN2CONN;
-	char* SN2ED;
-	char* SN2DIS;
-	char* SN3CONN;
-	char* SN3ED;
-	char* SN3DIS;
-	char* SN4CONN;
-	char* SN4ED;
-	char* SN4DIS;
-	//MAC
-	uint16_t mac1[3];
-	uint16_t mac2[3];
-	uint16_t mac3[3];
-	uint16_t mac4[3];
+	char SNCONN[30];
+	char SNED[30];
+	char SNDIS[30];
 	//Status
 	uint8_t L1status;
 	uint8_t L2status;
 	uint8_t L3status;
 	uint8_t L4status;
+	uint8_t L5status;
+	uint8_t L6status;
+	uint8_t L7status;
+	uint8_t L8status;
+
 } LockInfo;
 
 
@@ -213,13 +282,7 @@ struct keys
 	uint8_t key_time;
 };
 
-// 定义结构体来存储对应信息
-struct BtMenuItem {
-    int key;
-    char *name;
-    char *command;
-    char *feedback;
-};
+
 
 // 定义一个结构体存储对应关系
 typedef struct {

+ 1 - 1
Core/Inc/interface.h

@@ -17,7 +17,7 @@ extern uint8_t Developer_PortalD;
 
 
 extern bool btconn_dtu;
-
+extern bool ReturnInterface;
 
 #endif /*__INTERFACE_H*/
 

+ 10 - 18
Core/Inc/key.h

@@ -11,24 +11,16 @@ void updatekeystate(void);
 void WritekeyInfo(void);
 
 
-
-
-
-extern uint8_t Developer_PortalA;
-extern uint8_t Developer_PortalD;
-
-extern uint8_t preworkUp ;
-
-extern uint8_t presjfUp ;
-
-
-
-
-
-
-
-
-
+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 ;
 
 #endif /*__KEY_H*/
 

+ 3 - 2
Core/Inc/main.h

@@ -38,6 +38,8 @@ extern "C" {
 #include "ml307a.h"
 #include "ConfigMacros.h"
 #include "database.h"
+#include "tt808.h"
+#include "key.h"
 /* USER CODE END Includes */
 
 /* Exported types ------------------------------------------------------------*/
@@ -60,7 +62,7 @@ extern "C" {
 void Error_Handler(void);
 
 /* USER CODE BEGIN EFP */
-
+void ReadSNname(void);
 /* USER CODE END EFP */
 
 /* Private defines -----------------------------------------------------------*/
@@ -88,7 +90,6 @@ void Error_Handler(void);
 #define REST_BT_GPIO_Port GPIOA
 
 /* USER CODE BEGIN Private defines */
-extern uint16_t sys_mode[2];
 extern char version[];
 /* USER CODE END Private defines */
 

+ 1 - 2
Core/Inc/mba32a.h

@@ -16,8 +16,7 @@ uint8_t sendCmd_BT(char *pCmd,char *pRes, uint32_t timeOut, uint8_t sendNum);
 
 
 extern char autoRe[1024];
-void ReU5Proces(void);
-
+void OpenCloseLock(void);
 void event_lock(void);
 
 void open_lock(void);

+ 13 - 7
Core/Inc/tt808.h

@@ -5,9 +5,8 @@
 
 
 
-
-
 char *bin2hex(char *hex, const unsigned char *bin, int size);
+
 int hex2bin(unsigned char *bin, const char *hex);
 void tt808FsFunc(uint8_t* Message, uint8_t length, uint16_t MessageID);
 void MIPURCHandle(void);
@@ -16,17 +15,24 @@ void time_bj(void);
 void ReU4Proces(void);
 
 void printBytes(uint8_t *data, size_t length);
-
+void BindeWork(char TEMP[],uint64_t addr, char sname[],uint16_t mac[],char snconn[],char snced[],char sndis[]);
 void reconn(void);
 uint8_t testHex2Asc(const char *hex) ;
-
+void ReBTcall(void);
 void hexArrayToBcd(uint8_t* array, size_t length, uint8_t* out);
-
-
+extern uint8_t mac1temp[6];
+extern uint8_t mac2temp[6];
+extern uint8_t mac3temp[6];
+extern uint8_t mac4temp[6];
+extern char MAC1temp[13];
+extern char MAC2temp[13];
+extern char MAC3temp[13];
+extern char MAC4temp[13];
 void Regular_reporting_Loc(void);
 void pushpullWork(void);
 extern bool Retrans;
 
+extern MacSet *macsetptr;
 extern bool Offline ;
 void Test485Re(void);
 extern bool Online;
@@ -34,6 +40,6 @@ void hexToBcd_arr(uint8_t* array, size_t length, uint8_t* out);
 extern bool phonenull;
 uint16_t swapBytes16(uint16_t value);
 uint32_t swapBytes32(uint32_t value);
-
+void REPdaMode(void);
 #endif /*__TT808_H*/
 

+ 1 - 1
Core/Inc/usart.h

@@ -72,7 +72,7 @@ void MX_USART3_UART_Init(void);
 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);
-
+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) ;

+ 25 - 30
Core/Src/freertos.c

@@ -160,29 +160,10 @@ void StartScanKeyTask(void const * argument)
 	updatekeystate(); 				//扫描键值
     Jump_interface(); 		    	//跳转界面
     OLED_Refresh(); 				//刷新界面
-	ReU5Proces();
+	Test485Re();//485CMD
+	ReBTcall();//蓝牙回应
 	  
-	Lock_OandC();
-	Test485Re();//模拟入口
-	  
-	  
-	
-	//*开发者
-	if(Developer_PortalA==1 && Developer_PortalD==4)
-	{
-		SET_MENU_STATUS(0xFF,1,0,0);
-		OLED_Refresh();
-		Developer_PortalA=0;
-		Developer_PortalD=0;
-	}
-	
-	 if(tipsflag == ConnOK || tipsflag == Disconn)
-	 {
-		HAL_Delay(2000);
-		menu.current=0;
-		refresh=true;
-	 }
-
+	OpenCloseLock();
 	 
   }
   /* USER CODE END StartScanKeyTask */
@@ -204,12 +185,10 @@ void StarBT4GTask(void const * argument)
   {
     osDelay(1);	
 	{
-
 		Printf_u4u5logbyU1();			//打印log0
 		ReMIPURC();						//各式接收处理1
 		ReU4Proces();					//2
 		MIPURCHandle();					//平台接收处理(鉴权应答等)3 
-
 	}
 
   }
@@ -232,8 +211,24 @@ void StartTestTask(void const * argument)
   {
     osDelay(1);  
 	RESET_4G_MODULE();				//4G启动(复位) 标志位->reset4Gmodule
-	Pre_processing_4G();			//4G传递准备   标志位->module4G_F
-
+	//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);
+	  }
   }
   /* USER CODE END StartTestTask */
 }
@@ -255,13 +250,13 @@ 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
 	
-	PushpullWork();
+	//PushpullWork();
 	
 	
 	//*30s上传信息
@@ -271,7 +266,7 @@ void StartloginfoTaskTask(void const * argument)
 		nomalCount=0;
 		if(uploaweork && dblocptr->location.longitudeH!=0)
 		{
-			tt808FsFunc((uint8_t*)&(dblocptr->location.alarmFlagH), 34, MessageID_location);
+			//tt808FsFunc((uint8_t*)&(dblocptr->location.alarmFlagH), 34, MessageID_location);
 		}
 	}
 #if timingPush ==1

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 846 - 137
Core/Src/interface.c


+ 132 - 725
Core/Src/key.c

@@ -14,16 +14,9 @@ bool sent2_key = false;
 bool sent3_key = false;
 bool sent4_key = false;
 
-//字符串
-char timeout[] = "+CONNECT TIMEOUT";
-
-//字节
-uint32_t enterInterface_time = 0;
-uint8_t Developer_PortalA = 0;
-uint8_t Developer_PortalD = 0;
-uint8_t sys_Mode = 0;
+uint32_t enterInterface_time =0;
 uint8_t preworkUp = 0;
-uint8_t presjfUp = 0;
+uint8_t onOff_Num=0;
 
 uint8_t KEY_1_Scan_PDA(void)
 {
@@ -49,100 +42,42 @@ uint8_t KEY_1_Scan_PDA(void)
 					enterInterface_time = HAL_GetTick();
 					switch(menu.current)
 					{
-							case 0:
-							{
-								Developer_PortalA+=1;
-								SET_MENU_STATUS(0,0,0,0);
-								break;
-							}
-							case 1:
-							{
-								SET_MENU_STATUS(1,1,0,1);
-								break;
-							}
-							case 2:
-							{
-								if(menu.up!=3)
-								{
-									menu.up+=1;
-									menu.next-=1;
-								}
-								else if(menu.up==3)
-								{
-									menu.up=0;
-									menu.next=3;
-								}
-								refresh=true;
-								break;
-							}
-							case 3:
-							{
-								if(menu.up!=3)
-								{
-									menu.up+=1;
-									menu.next-=1;
-								}
-								else if(menu.up==3)
-								{
-									menu.up=0;
-									menu.next=3;
-								}
-								refresh=true;
-								break;
-							}
-							case 4:
-							case 5:
-							case 6:
-							case 7:
-							case 0xA0:
-							case 0xFF:
-							{
-								if(menu.up!=1)
-								{
-									menu.up+=1;
-									menu.next-=1;
-								}
-								else if(menu.up==1)
-								{
-									menu.up=0;
-									menu.next=1;
-								}
-								refresh=true;
-								break;
-							}
-							
-							case 0xA1:
-							{
-								if(menu.up!=0xE)
-								{
-									menu.up+=1;
-									menu.next-=1;
-								}
-								else if(menu.up==0xE)
-								{
-									menu.up=0;
-									menu.next=0xE;
-								}
-								refresh=true;
-								break;
-							}
-							case 0xA2:
-							{
-								if(menu.up!=0xF)
-								{
-									menu.up+=1;
-									menu.next-=1;
-								}
-								else if(menu.up==0xF)
-								{
-									menu.up=0;
-									menu.next=0xF;
-								}
-								
-								refresh=true;
-								break;
-							}
-								
+						case 0:
+						{
+							SET_MENU_STATUS(0,0,0,0);
+							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; \
+							break;
+						}
+						case 4:
+						case 5:
+						case 6:
+						case 7:
+						{
+							SWITCH_MENU_UP2();//上翻2选项
+							break;
+						}
 					}
 					#if debugkeyinfo == 1
 					PRINT_MENU_STATUS("K1");
@@ -188,7 +123,7 @@ uint8_t KEY_2_Scan_PDA(void)
 					{
 						case 0:
 						{
-							SET_MENU_STATUS(0,0,0,0);
+							//SET_MENU_STATUS(1,0,0,0);
 							break;
 						}
 						case 1:
@@ -198,85 +133,31 @@ uint8_t KEY_2_Scan_PDA(void)
 						}
 						case 2:
 						{
-							if(menu.next!=3)
-							{
-								menu.up-=1;
-								menu.next+=1;
-							}
-							else if(menu.next==3)
-							{
-								menu.up=3;
-								menu.next=0;
-							}
-							refresh=true;
+							SWITCH_MENU_DOWN4();//四选项选择
 							break;
 						}
 						case 3:
+						case 8://L绑定
 						{
-							if(menu.next!=3)
-							{
-								menu.up-=1;
-								menu.next+=1;
-							}
-							else if(menu.next==3)
-							{
-								menu.up=3;
-								menu.next=0;
-							}
-							refresh=true;
+							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; 
 							break;
 						}
-						
 						case 4:
 						case 5:
 						case 6:
 						case 7:
-						case 0xA0:
-						case 0xFF:
-						{
-							if(menu.next!=1)
-							{
-								menu.up-=1;
-								menu.next+=1;
-							}
-							else if(menu.next==1)
-							{
-								menu.up=1;
-								menu.next=0;
-							}
-							refresh=true;
-							break;
-						}
-						case 0xA1:
-						{
-							if(menu.next!=0xE)
-							{
-								menu.up-=1;
-								menu.next+=1;
-							}
-							else if(menu.next==0xE)
-							{
-								menu.up=0xE;
-								menu.next=0;
-							}
-							refresh=true;
-							break;
-						}
-						case 0xA2:
 						{
-							if(menu.next!=0xF)
-							{
-								menu.up-=1;
-								menu.next+=1;
-							}
-							else if(menu.next==0xF)
-							{
-								menu.up=0xF;
-								menu.next=0;
-							}
-							refresh=true;
+							SWITCH_MENU_DOWN2();//下翻2选项
 							break;
 						}
+							
 					}
 					#if debugkeyinfo == 1
 					PRINT_MENU_STATUS("K2");
@@ -295,43 +176,15 @@ uint8_t KEY_2_Scan_PDA(void)
 
     return 0;
 }
-// 定义menu_dict存储menu.next对应的信息
-MenuInfo menu_dict[] = {
-    {"AT+CONN=101000000001\r\n", "+CONNECTED:0,101000000001", "+DISCONN:0,101000000001", 0x101000000001},
-    {"AT+CONN=101000000002\r\n", "+CONNECTED:0,101000000002", "+DISCONN:0,101000000002", 0x101000000002},
-    {"AT+CONN=101000000003\r\n", "+CONNECTED:0,101000000003", "+DISCONN:0,101000000003", 0x101000000003},
-    {"AT+CONN=101000000004\r\n", "+CONNECTED:0,101000000004", "+DISCONN:0,101000000004", 0x101000000004},
-    {"AT+CONN=101000000005\r\n", "+CONNECTED:0,101000000005", "+DISCONN:0,101000000005", 0x101000000005},
-    {"AT+CONN=101000000006\r\n", "+CONNECTED:0,101000000006", "+DISCONN:0,101000000006", 0x101000000006},
-    {"AT+CONN=101000000007\r\n", "+CONNECTED:0,101000000007", "+DISCONN:0,101000000007", 0x101000000007},
-    {"AT+CONN=101000000008\r\n", "+CONNECTED:0,101000000008", "+DISCONN:0,101000000008", 0x101000000008},
-    {"AT+CONN=101000000009\r\n", "+CONNECTED:0,101000000009", "+DISCONN:0,101000000009", 0x101000000009},
-    {"AT+CONN=10100000000A\r\n", "+CONNECTED:0,10100000000A", "+DISCONN:0,10100000000A", 0x10100000000A},
-    {"AT+CONN=10100000000B\r\n", "+CONNECTED:0,10100000000B", "+DISCONN:0,10100000000B", 0x10100000000B},
-    {"AT+CONN=10100000000C\r\n", "+CONNECTED:0,10100000000C", "+DISCONN:0,10100000000C", 0x10100000000C},
-    {"AT+CONN=10100000000D\r\n", "+CONNECTED:0,10100000000D", "+DISCONN:0,10100000000D", 0x10100000000D},
-    {"AT+CONN=10100000000E\r\n", "+CONNECTED:0,10100000000E", "+DISCONN:0,10100000000E", 0x10100000000E},
-    {"AT+CONN=10100000000F\r\n", "+CONNECTED:0,10100000000F", "+DISCONN:0,10100000000F", 0x10100000000F},
-	
-    {"AT+CONN=101000000010\r\n", "+CONNECTED:0,101000000010", "+DISCONN:0,101000000010", 0x101000000010},
-    {"AT+CONN=101000000011\r\n", "+CONNECTED:0,101000000011", "+DISCONN:0,101000000011", 0x101000000011},
-    {"AT+CONN=101000000012\r\n", "+CONNECTED:0,101000000012", "+DISCONN:0,101000000012", 0x101000000012},
-    {"AT+CONN=101000000013\r\n", "+CONNECTED:0,101000000013", "+DISCONN:0,101000000013", 0x101000000013},
-    {"AT+CONN=101000000014\r\n", "+CONNECTED:0,101000000014", "+DISCONN:0,101000000014", 0x101000000014},
-    {"AT+CONN=101000000015\r\n", "+CONNECTED:0,101000000015", "+DISCONN:0,101000000015", 0x101000000015},
-    {"AT+CONN=101000000016\r\n", "+CONNECTED:0,101000000016", "+DISCONN:0,101000000016", 0x101000000016},
-    {"AT+CONN=101000000017\r\n", "+CONNECTED:0,101000000017", "+DISCONN:0,101000000017", 0x101000000017},
-    {"AT+CONN=101000000018\r\n", "+CONNECTED:0,101000000018", "+DISCONN:0,101000000018", 0x101000000018},
-    {"AT+CONN=101000000019\r\n", "+CONNECTED:0,101000000019", "+DISCONN:0,101000000019", 0x101000000019},
-    {"AT+CONN=10100000001A\r\n", "+CONNECTED:0,10100000001A", "+DISCONN:0,10100000001A", 0x10100000001A},
-    {"AT+CONN=10100000001B\r\n", "+CONNECTED:0,10100000001B", "+DISCONN:0,10100000001B", 0x10100000001B},
-    {"AT+CONN=10100000001C\r\n", "+CONNECTED:0,10100000001C", "+DISCONN:0,10100000001C", 0x10100000001C},
-    {"AT+CONN=10100000001D\r\n", "+CONNECTED:0,10100000001D", "+DISCONN:0,10100000001D", 0x10100000001D},
-    {"AT+CONN=10100000001E\r\n", "+CONNECTED:0,10100000001E", "+DISCONN:0,10100000001E", 0x10100000001E},
-    {"AT+CONN=10100000001F\r\n", "+CONNECTED:0,10100000001F", "+DISCONN:0,10100000001F", 0x10100000001F},
-    // 其他项依次类推
-};
 
+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'
 
 uint8_t KEY_3_Scan_PDA(void)
 {
@@ -355,17 +208,15 @@ uint8_t KEY_3_Scan_PDA(void)
             {
 				if (!sent3_key) {
 					enterInterface_time = HAL_GetTick();
-					switch (menu.current) {
+					switch (menu.current) 
+					{
 						case 0://跳转到菜单界面
 						{
-							SET_MENU_STATUS(1,1,0,1);
+							SET_MENU_STATUS(1,1,0,1);//跳转操作界面
 							break;
 						}
 						case 1://跳转到L绑定界面
 						{
-							
-							Developer_PortalA=0;
-							Developer_PortalD=0;
 							if(menu.up==1)
 							{
 								SET_MENU_STATUS(2,3,0,2);
@@ -378,12 +229,61 @@ uint8_t KEY_3_Scan_PDA(void)
 						}
 						case 2:
 						{
+							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中的字符串)
 							
-							menu.PreNext=menu.next;//L1 - L4
-							SET_MENU_STATUS(0xA0,1,0,3);
+							// 分割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);
 							break;
 						}
-						case 3://施解封操作
+						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:
 						{
 							if(menu.up==3)//L1操作
 							{
@@ -408,84 +308,28 @@ uint8_t KEY_3_Scan_PDA(void)
 								preworkUp=menu.up;
 								SET_MENU_STATUS(7,1,0,3);
 								break;
-							}			
+							}		
 						}
 						case 4:
 						case 5:
 						case 6:
 						case 7:
 						{
-//							if(lockinfo.SN1CONN == NULL || lockinfo.SN2CONN == NULL || lockinfo.SN3CONN == NULL ||lockinfo.SN4CONN == NULL)
-//							{
-//								menu.current=0xBB;
-//								tipsflag = Nosn;
-//								SET_MENU_STATUS(3,3,0,2);
-//							}
-//							else
-//							{
-								presjfUp = menu.up;
-								printf("%d",presjfUp);
-								menu.current=0xBB;
-								tipsflag = Btconn;
-								refresh = true;
-								if(preworkUp == 3)//L1
-								{
-									USART_SendString(&huart5, lockinfo.SN1CONN);//连接
-								}
-								else if(preworkUp == 2)//L2
-								{
-									USART_SendString(&huart5, lockinfo.SN2CONN);//连接
-								}
-								else if(preworkUp == 1)//L3
-								{
-									USART_SendString(&huart5, lockinfo.SN3CONN);//连接
-								}
-								else if(preworkUp == 0)//L4
-								{
-									USART_SendString(&huart5, lockinfo.SN4CONN);//连接
-								}
-//							}
-
-							
-							break;
-						}
-							
-						case 0xA0:
-						{
-							if(menu.up==1)
+							preCurrent = menu.current;
+							onOff_Num = menu.up;//1:施封  0:解封
+							printf("%d\r\n",onOff_Num);
+							if(preworkUp == 3)		//L1
 							{
-								SET_MENU_STATUS(0xA1,0xE,0,3);
 							}
-							else if(menu.up==0)
+							else if(preworkUp == 2)	//L2
 							{
-								SET_MENU_STATUS(0xA2,0xF,0,3);
 							}
-							break;
-						}
-						case 0xA1:
-						case 0xA2:
-						{
-							WritekeyInfo();//写入MAC保存状态
-							SET_MENU_STATUS(2,3,0,2);
-							break;
-						}
-						case 0xFF:
-						{
-							if(menu.up==1)//PDA 0x0000
+							else if(preworkUp == 1)	//L3
 							{
-								signal = true;
-								sys_mode[1]=PDA_MODE;
 							}
-							else if(menu.up==0)//DTU 0x0001
+							else if(preworkUp == 0)	//L4
 							{
-								signal = true;
-								sys_mode[1]=DTU_MODE;
 							}
-							Flash_WriteBytes(&sys_mode[1],SysModeAddr,1);
-							Flash_ReadBytes(sys_mode, SysModeAddr, 1);//读取一个2B的,系统模式
-							menu.current=0;//回到初始
-							refresh=true;
-							break;
 						}
 	
 					}
@@ -529,16 +373,9 @@ uint8_t KEY_4_Scan_PDA(void)
             {
 				enterInterface_time = HAL_GetTick();
 				if (!sent4_key) {//返回
-					switch (menu.current) {
+					switch (menu.current) 
+					{
 						case 0:
-						{
-							SET_MENU_STATUS(0,0,0,0);
-							if(Developer_PortalA!=0)
-							{
-								Developer_PortalD+=1;
-							}
-							break;
-						}
 						case 1:
 						{
 							SET_MENU_STATUS(0,0,0,0);
@@ -547,6 +384,7 @@ uint8_t KEY_4_Scan_PDA(void)
 						case 2:
 						case 3:
 						{
+
 							SET_MENU_STATUS(1,1,0,1);
 							break;
 						}
@@ -555,27 +393,16 @@ uint8_t KEY_4_Scan_PDA(void)
 						case 6:
 						case 7:
 						{
-							SET_MENU_STATUS(3,3,0,2);
 							USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
+							SET_MENU_STATUS(3,3,0,2);
 							break;
 						}	
-						case 0xA0:
+						case 8:
 						{
 							SET_MENU_STATUS(2,3,0,2);
 							break;
 						}
-						case 0xA1:
-						case 0xA2:
-						{
-							SET_MENU_STATUS(0xA0,1,0,3);
-							break;
-						}
-						case 0xBB:
-						{
-							SET_MENU_STATUS(3,3,0,2);
-							USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
-							break;
-						}
+						
 					}
 					#if debugkeyinfo == 1
 					PRINT_MENU_STATUS("K4");
@@ -596,434 +423,14 @@ uint8_t KEY_4_Scan_PDA(void)
 }
 
 
-uint8_t KEY_1_Scan_DTU(void)
-{
-    static uint8_t key_state = 0;
-    static uint8_t last_key_state = 0;
-    static uint32_t debounce_time = 0;
-
-    key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3); 
-
-    if (key_state != last_key_state) // 检测按键状态变化
-    {
-        last_key_state = key_state;
-        debounce_time = HAL_GetTick(); // 记录当前时间
-    }
-    else
-    {
-        if (HAL_GetTick() - debounce_time > 30) // 去抖时间
-        {
-            if (key_state == GPIO_PIN_RESET) // 按键按下
-            {
-				if(!sent1_key)
-				{
-					enterInterface_time = HAL_GetTick();
-					switch(menu.current)
-					{
-						case 0:
-						{
-							Developer_PortalA+=1;
-							SET_MENU_STATUS(0,0,0,0);
-							break;
-						}
-						case 0xFF:
-						{
-							if(menu.up!=1)
-							{
-								menu.up=1;
-								menu.next=0;
-							}
-							else if(menu.up==1)
-							{
-								menu.up=0;
-								menu.next=1;
-							}
-							refresh=true;
-							break;
-						}
-								
-					}
-					#if debugkeyinfo == 1
-					PRINT_MENU_STATUS("K1");
-					#endif
-					sent1_key = true;
-				}
-				return 1;
-            }
-            else // 按键释放
-            {
-				sent1_key = false;
-                return 0;
-            }
-        }
-    }
-
-    return 0;
-}
-
-uint8_t KEY_2_Scan_DTU(void)
-{
-    static uint8_t key_state = 0;
-    static uint8_t last_key_state = 0;
-    static uint32_t debounce_time = 0;
-
-    key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4); 
-
-    if (key_state != last_key_state) // 检测按键状态变化
-    {
-        last_key_state = key_state;
-        debounce_time = HAL_GetTick(); // 记录当前时间
-    }
-    else
-    {
-        if (HAL_GetTick() - debounce_time > 30) // 去抖时间
-        {
-            if (key_state == GPIO_PIN_RESET) // 按键按下
-            {
-				if (!sent2_key)
-				{
-					enterInterface_time = HAL_GetTick();
-					switch (menu.current)
-					{
-						case 0xFF:
-						{
-							if(menu.next!=1)
-							{
-								menu.up=0;
-								menu.next=1;
-							}
-							else if(menu.next==1)
-							{
-								menu.up=1;
-								menu.next=0;
-							}
-							refresh=true;
-							break;
-						}
-					}
-					#if debugkeyinfo == 1
-					PRINT_MENU_STATUS("K2");
-					#endif
-					sent2_key = true;
-				}
-				return 1;
-            }
-            else // 按键释放
-            {
-				sent2_key = false;
-                return 0;
-            }
-        }
-    }
-
-    return 0;
-}
-
-uint8_t KEY_3_Scan_DTU(void)
-{
-    static uint8_t key_state = 0;
-    static uint8_t last_key_state = 0;
-    static uint32_t debounce_time = 0;
-
-
-    key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5); 
-
-    if (key_state != last_key_state) // 检测按键状态变化
-    {
-        last_key_state = key_state;
-        debounce_time = HAL_GetTick(); // 记录当前时间
-    }
-    else
-    {
-        if (HAL_GetTick() - debounce_time > 30) // 去抖时间
-        {
-            if (key_state == GPIO_PIN_RESET) // 按键按下
-            {
-				if (!sent3_key) {
-					enterInterface_time = HAL_GetTick();
-					switch (menu.current) 
-					{
-						case 0xFF:
-						{
-							if(menu.up==1)//PDA 0x0000
-							{
-								sys_mode[1]=PDA_MODE;
-								if(sendCmd_BT("AT+ADV=0\r\n","OK",1,1))//开启广播
-								{
-									signal = true;
-									printf("关闭广播\r\n");
-								}
-							}
-							else if(menu.up==0)//DTU 0x0001
-							{
-								sys_mode[1]=DTU_MODE;
-								if(sendCmd_BT("AT+ADV=1\r\n","OK",1,1))//开启广播
-								{
-									signal = true;
-									printf("开启广播\r\n");
-								}
-							}
-							Flash_WriteBytes(&sys_mode[1],SysModeAddr,1);
-							Flash_ReadBytes(sys_mode, SysModeAddr, 1);//读取一个2B的,系统模式
-							menu.current=0;//回到初始
-							refresh=true;
-							break;
-						}
-					}
-
-					#if debugkeyinfo == 1
-					PRINT_MENU_STATUS("K3");
-					#endif
-					sent3_key = true;
-				}
-				return 1;
-            }
-            else // 按键释放
-            {
-				sent3_key = false;
-                return 0;
-            }
-        }
-    }
-
-    return 0;
-}
-
-uint8_t KEY_4_Scan_DTU(void)
-{
-    static uint8_t key_state = 0;
-    static uint8_t last_key_state = 0;
-    static uint32_t debounce_time = 0;
-
-    key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6); 
-
-    if (key_state != last_key_state) // 检测按键状态变化
-    {
-        last_key_state = key_state;
-        debounce_time = HAL_GetTick(); // 记录当前时间
-    }
-    else
-    {
-        if (HAL_GetTick() - debounce_time > 30) // 去抖时间
-        {
-            if (key_state == GPIO_PIN_RESET) // 按键按下
-            {
-				enterInterface_time = HAL_GetTick();
-				if (!sent4_key) {//返回
-					switch (menu.current) 
-					{
-						case 0:
-						{
-							SET_MENU_STATUS(0,0,0,0);
-							if(Developer_PortalA!=0)
-							{
-								Developer_PortalD+=1;
-							}
-							break;
-						}
-					}
-					#if debugkeyinfo == 1
-					PRINT_MENU_STATUS("K4");
-					#endif
-					sent4_key = true;
-				}
-				return 1;
-            }
-            else // 按键释放
-            {
-				sent4_key = false;
-                return 0;
-            }
-        }
-    }
 
-    return 0;
-}
 
 
 void updatekeystate(void)
 {
-	if(sys_mode[1] == PDA_MODE)//PDAmode 需DTU开锁
-	{
-		KEY_1_Scan_PDA();
-		KEY_2_Scan_PDA();
-		KEY_3_Scan_PDA();
-		KEY_4_Scan_PDA();
-	}
-	else if(sys_mode[1] == DTU_MODE )
-	{
-		KEY_1_Scan_DTU();
-		KEY_2_Scan_DTU();
-		KEY_3_Scan_DTU();
-		KEY_4_Scan_DTU();
-	}
-
-}
-
-uint16_t Mac1[4];
-uint16_t Mac2[4];
-uint16_t Mac3[4];
-uint16_t Mac4[4];
-
-void WritekeyInfo(void)
-{
-	switch(menu.PreNext)
-	{
-		case 0:
-		{
-			if(menu.current!=0xA2)//A1界面
-			{
-				for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
-					if (menu.next == i) {											
-						
-						lockinfo.SN1CONN = menu_dict[i].command;
-						lockinfo.SN1ED 	 = menu_dict[i].connected_msg;
-						lockinfo.SN1DIS  = menu_dict[i].disconnected_msg;
-
-						Mac1[0] = (menu_dict[i].mac >> 32) & 0xFFFF;
-						Mac1[1] = (menu_dict[i].mac >> 16) & 0xFFFF;
-						Mac1[2] = menu_dict[i].mac & 0xFFFF;
-						Flash_WriteBytes(Mac1,Sn1InfoAddr,3);//占用6个字节
-						Flash_ReadBytes(lockinfo.mac1, Sn1InfoAddr, 3);
-					}
-				}
-			}
-			else
-			{
-				for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
-					if ((menu.next+0xf) == i) {
-						lockinfo.SN1CONN = menu_dict[i].command;
-						lockinfo.SN1ED   = menu_dict[i].connected_msg;
-						lockinfo.SN1DIS  = menu_dict[i].disconnected_msg;
-						Mac1[0] = (menu_dict[i].mac >> 32) & 0xFFFF;
-						Mac1[1] = (menu_dict[i].mac >> 16) & 0xFFFF;
-						Mac1[2] = menu_dict[i].mac & 0xFFFF;
-						Flash_WriteBytes(Mac1,Sn1InfoAddr,3);//占用6个字节
-						Flash_ReadBytes(lockinfo.mac1, Sn1InfoAddr, 3);
-					}
-				}
-			}
-			menu.home &= 0x0FFF;
-			sprintf(lockinfo.SN1name, "%04X", lockinfo.mac1[2]);
-			L1bd = true;
-			break;
-		}
-		case 1:
-		{
-			if(menu.current!=0xA2)
-			{
-				for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
-					if (menu.next == i) {											
-						
-						lockinfo.SN2CONN = menu_dict[i].command;
-						lockinfo.SN2ED 	 = menu_dict[i].connected_msg;
-						lockinfo.SN2DIS  = menu_dict[i].disconnected_msg;
-						Mac2[0] = (menu_dict[i].mac >> 32) & 0xFFFF;
-						Mac2[1] = (menu_dict[i].mac >> 16) & 0xFFFF;
-						Mac2[2] = menu_dict[i].mac & 0xFFFF;
-						Flash_WriteBytes(Mac2,Sn2InfoAddr,3);//占用6个字节
-						Flash_ReadBytes(lockinfo.mac2, Sn2InfoAddr, 3);
-					}
-				}
-			}
-			else
-			{
-				for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
-					if ((menu.next+0xf) == i) {
-						lockinfo.SN2CONN = menu_dict[i].command;
-						lockinfo.SN2ED   = menu_dict[i].connected_msg;
-						lockinfo.SN2DIS  = menu_dict[i].disconnected_msg;
-						Mac2[0] = (menu_dict[i].mac >> 32) & 0xFFFF;
-						Mac2[1] = (menu_dict[i].mac >> 16) & 0xFFFF;
-						Mac2[2] = menu_dict[i].mac & 0xFFFF;
-						Flash_WriteBytes(Mac2,Sn2InfoAddr,3);//占用6个字节
-						Flash_ReadBytes(lockinfo.mac2, Sn2InfoAddr, 3);
-					}
-				}
-			}								
-			menu.home &= 0xF0FF;
-			sprintf(lockinfo.SN2name, "%04X", lockinfo.mac2[2]);
-			L2bd = true;
-			break;
-		}
-		case 2:
-		{
-			if(menu.current!=0xA2)
-			{
-				for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
-					if (menu.next == i) {											
-						
-						lockinfo.SN3CONN = menu_dict[i].command;
-						lockinfo.SN3ED 	 = menu_dict[i].connected_msg;
-						lockinfo.SN3DIS  = menu_dict[i].disconnected_msg;
-						Mac3[0] = (menu_dict[i].mac >> 32) & 0xFFFF;
-						Mac3[1] = (menu_dict[i].mac >> 16) & 0xFFFF;
-						Mac3[2] = menu_dict[i].mac & 0xFFFF;
-						Flash_WriteBytes(Mac3,Sn3InfoAddr,3);//占用6个字节
-						Flash_ReadBytes(lockinfo.mac3, Sn3InfoAddr, 3);
-					}
-				}
-			}
-			else
-			{
-				for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
-					if ((menu.next+0xf) == i) {
-						lockinfo.SN3CONN = menu_dict[i].command;
-						lockinfo.SN3ED   = menu_dict[i].connected_msg;
-						lockinfo.SN3DIS  = menu_dict[i].disconnected_msg;
-						Mac3[0] = (menu_dict[i].mac >> 32) & 0xFFFF;
-						Mac3[1] = (menu_dict[i].mac >> 16) & 0xFFFF;
-						Mac3[2] = menu_dict[i].mac & 0xFFFF;
-						Flash_WriteBytes(Mac3,Sn3InfoAddr,3);//占用6个字节
-						Flash_ReadBytes(lockinfo.mac3, Sn3InfoAddr, 3);
-					}
-				}
-			}						
-			sprintf(lockinfo.SN3name, "%04X", lockinfo.mac3[2]);	
-			menu.home &= 0xFF0F;
-			L3bd = true;
-			break;
-		}
-		case 3:
-		{
-			if(menu.current!=0xA2)
-			{
-				for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
-					if (menu.next == i) {											
-						
-						lockinfo.SN4CONN = menu_dict[i].command;
-						lockinfo.SN4ED 	 = menu_dict[i].connected_msg;
-						lockinfo.SN4DIS  = menu_dict[i].disconnected_msg;
-						Mac4[0] = (menu_dict[i].mac >> 32) & 0xFFFF;
-						Mac4[1] = (menu_dict[i].mac >> 16) & 0xFFFF;
-						Mac4[2] = menu_dict[i].mac & 0xFFFF;
-						Flash_WriteBytes(Mac4,Sn4InfoAddr,3);//占用6个字节
-						Flash_ReadBytes(lockinfo.mac4, Sn4InfoAddr, 3);
-					}
-				}
-			}
-			else
-			{
-				for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
-					if ((menu.next+0xf) == i) {
-						lockinfo.SN4CONN = menu_dict[i].command;
-						lockinfo.SN4ED   = menu_dict[i].connected_msg;
-						lockinfo.SN4DIS  = menu_dict[i].disconnected_msg;
-						Mac4[0] = (menu_dict[i].mac >> 32) & 0xFFFF;
-						Mac4[1] = (menu_dict[i].mac >> 16) & 0xFFFF;
-						Mac4[2] = menu_dict[i].mac & 0xFFFF;
-						Flash_WriteBytes(Mac4,Sn4InfoAddr,3);//占用6个字节
-						Flash_ReadBytes(lockinfo.mac4, Sn4InfoAddr, 3);
-					}
-				}
-			}								
-			menu.home &= 0xFFF0;
-			sprintf(lockinfo.SN4name, "%04X", lockinfo.mac4[2]);
-			L4bd = true;
-			break;
-		}
-		
-	}
+	KEY_1_Scan_PDA();
+	KEY_2_Scan_PDA();
+	KEY_3_Scan_PDA();
+	KEY_4_Scan_PDA();
 }
 
-

+ 66 - 5
Core/Src/main.c

@@ -49,6 +49,8 @@
 extern bool refresh;
 extern TipsFlag tipsflag;
 extern Menu_table menu;
+
+extern LockInfo lockinfo;
 void Jump_interface_PDA(void);
 
 uint16_t sys_mode[2];
@@ -126,13 +128,13 @@ int main(void)
   __HAL_UART_ENABLE_IT(&huart5, UART_IT_RXNE);//开启BT接收中断
 
   START_PROCESS();
-  Database_init(0x760,0x760,0x5,0x5);//760
+  //Database_init(0x760,0x760,0x5,0x5);//760
+    
   
   MBA32A_Init();
-  reset4Gmodule = true;
- 
-    
+  //reset4Gmodule = true;
 
+  ReadSNname();
   /* USER CODE END 2 */
 
   /* Call init function for freertos objects (in freertos.c) */
@@ -202,7 +204,66 @@ void SystemClock_Config(void)
 }
 
 /* USER CODE BEGIN 4 */
-
+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);
+	
+	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)
+	{
+		//Todo
+	}
+	else
+	{
+		L1bd=true;
+		sprintf(lockinfo.SN1name, "%s",macStr_init[0]+8 );
+	}
+	
+	if(mac2[0]==0xFFFF)
+	{
+		//Todo
+	}
+	else
+	{
+		L2bd=true;
+		sprintf(lockinfo.SN2name, "%s",macStr_init[1]+8 );
+	}	
+	if(mac3[0]==0xFFFF)
+	{
+		//Todo
+	}
+	else
+	{
+		L3bd=true;
+		sprintf(lockinfo.SN3name, "%s",macStr_init[2]+8 );
+	}		
+	if(mac4[0]==0xFFFF)
+	{
+		//Todo
+	}
+	else
+	{
+		L4bd=true;
+		sprintf(lockinfo.SN4name, "%s",macStr_init[3]+8 );
+	}	
+}
 /* USER CODE END 4 */
 
 /**

+ 65 - 268
Core/Src/mba32a.c

@@ -38,6 +38,7 @@ void MBA32AReset(void);
 
 uint16_t resetdev[2];
 
+extern TipsFlag tipsflag;	
 /**
   * @breaf 蓝牙启动位读写检查
   */
@@ -82,6 +83,7 @@ void Start_Read_resetFlag16(void)
   */
 void MBA32A_Init(void)
 {
+
 	btframe.userId 	  = 0x64747531; 
 	btframe.Autoseal  = 0xFF; //自动施封时间
 	
@@ -159,9 +161,6 @@ void MBA32A_Init(void)
 					printf("#04设置发射功率成功\n");
 					btstep++;
 				}
-
-				
-				
 			}
 			else
 			{	//ERROR 其他值
@@ -172,7 +171,8 @@ void MBA32A_Init(void)
 			
 	}
 
-
+//menu.current=0;
+//refresh=true;
 	
 
 }
@@ -228,14 +228,53 @@ void MBA32AReset(void)
 }
 
 
-void event_lock(void)			
-{
 
+void open_lock(void)			//蓝牙开锁信息帧
+{
+	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};//开锁命令帧
+	
+	uint32_t serialNum;
+	if(menu.current==4)
+	{
+		serialNum = btframe.serialNum1;//流水号
+	}
+	if(menu.current==5)
+	{
+		serialNum = btframe.serialNum2;//流水号
+	}
+	if(menu.current==6)
+	{
+		serialNum = btframe.serialNum3;//流水号
+	}
+	if(menu.current==7)
+	{
+		serialNum = btframe.serialNum4;//流水号
+	}
+	open_CMD[2]=(serialNum>>24) & 0xff;
+	open_CMD[3]=(serialNum>>16) & 0xff;
+	open_CMD[4]=(serialNum>>8) & 0xff;
+	open_CMD[5]= serialNum & 0xff;
+												
+	uint32_t userid = btframe.userId;//用户id
+	open_CMD[6]=(userid>>24) & 0xff;
+	open_CMD[7]=(userid>>16) & 0xff;
+	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;				
+												
+	open_CMD[14] = btframe.Autoseal;//自动施封时间										
+													
+	sendCombinedArray(header,sizeof(header),open_CMD,sizeof(open_CMD),1);//加密
 }
 
-/**
-  * @breaf 蓝牙关锁信息帧
-  */
 void close_lock(void)		//蓝牙关锁信息帧
 {
 	printf("施封\r\n");
@@ -283,280 +322,38 @@ void close_lock(void)		//
 	close_CMD[13]= (dblocptr->location.timeStamp) & 0xff;									
 	
 	sendCombinedArray(header,sizeof(header),close_CMD,sizeof(close_CMD),1);
-	//Echo_BT(20);
-}
-/**
-  * @breaf 蓝牙开锁信息帧
-  */
-void open_lock(void)			//蓝牙开锁信息帧
-{
-	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};//开锁命令帧
 	
-	uint32_t serialNum;
-	if(menu.current==4)
-	{
-		serialNum = btframe.serialNum1;//流水号
-	}
-	if(menu.current==5)
-	{
-		serialNum = btframe.serialNum2;//流水号
-	}
-	if(menu.current==6)
-	{
-		serialNum = btframe.serialNum3;//流水号
-	}
-	if(menu.current==7)
-	{
-		serialNum = btframe.serialNum4;//流水号
-	}
-	open_CMD[2]=(serialNum>>24) & 0xff;
-	open_CMD[3]=(serialNum>>16) & 0xff;
-	open_CMD[4]=(serialNum>>8) & 0xff;
-	open_CMD[5]= serialNum & 0xff;
-												
-	uint32_t userid = btframe.userId;//用户id
-	open_CMD[6]=(userid>>24) & 0xff;
-	open_CMD[7]=(userid>>16) & 0xff;
-	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;				
-												
-	open_CMD[14] = btframe.Autoseal;//自动施封时间										
-													
-	sendCombinedArray(header,sizeof(header),open_CMD,sizeof(open_CMD),1);//加密
-	//Echo_BT(20);
 }
+
 uint16_t serialNum1[2];
 uint16_t serialNum2[2];
 uint16_t serialNum3[2];
 uint16_t serialNum4[2];
-void Lock_OandC(void)
+void OpenCloseLock(void)
 {
-    if(L1Working)		//在四个界面,按下确认
-    {	
-		if(presjfUp==1)//施
+	if(L1work && preworkUp==3)//L1操作(操作完成置位)
+	{
+		if(onOff_Num)//1:施封 0:解封
 		{
-			close_lock(); //施封操作需要写入0x40
-			printf("发送施封完成\r\n");
-			tipsflag = SendOK;
-
+			close_lock();
 		}
-		else if(presjfUp==0)//施封
+		else
 		{
-			open_lock(); //解封操作 需要写入0x60
-			printf("发送施封完成\r\n");
-			tipsflag = SendOK;
-
-
+			open_lock();
 		}
 		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);
-		L1Working = false;
-	}
-    if(L2Working)		//在四个界面,按下确认
-    {	
-		if(presjfUp==1)//施封
-		{
-			close_lock(); //施封操作需要写入0x40
-			printf("发送施封完成\r\n");
-			tipsflag = SendOK;
-
-		}
-		else if(presjfUp==0)//施封
-		{
-			open_lock(); //解封操作 需要写入0x60
-			printf("发送施封完成\r\n");
-			tipsflag = SendOK;
-
-
-		}
-		serialNum2[0] = (uint16_t)((btframe.serialNum2 >> 24) & 0xff) << 8 | ((btframe.serialNum2 >> 16) & 0xff);
-		serialNum2[1] = (uint16_t)((btframe.serialNum2 >> 8)  & 0xff) << 8 | (btframe.serialNum2 & 0xff);
-		
-		Flash_WriteBytes(serialNum2,serialNum2Addr,2);
-		L2Working = false;
-	}
-    if(L3Working)		//在四个界面,按下确认
-    {	
-		if(presjfUp==1)//施封
-		{
-			close_lock(); //施封操作需要写入0x40
-			printf("发送施封完成\r\n");
-			tipsflag = SendOK;
-
-		}
-		else if(presjfUp==0)//施封
-		{
-			open_lock(); //解封操作 需要写入0x60
-			printf("发送施封完成\r\n");
-			tipsflag = SendOK;
-
-
-		}
-		serialNum3[0] = (uint16_t)((btframe.serialNum3 >> 24) & 0xff) << 8 | ((btframe.serialNum3 >> 16) & 0xff);
-		serialNum3[1] = (uint16_t)((btframe.serialNum3 >> 8)  & 0xff) << 8 | (btframe.serialNum3 & 0xff);
-		
-		Flash_WriteBytes(serialNum3,serialNum3Addr,2);
-		L3Working = false;
-	}
-    if(L4Working)		//在四个界面,按下确认
-    {	
-		if(presjfUp==1)//施封
-		{
-			close_lock(); //施封操作需要写入0x40
-			printf("发送施封完成\r\n");
-			tipsflag = SendOK;
-
-		}
-		else if(presjfUp==0)//施封
-		{
-			open_lock(); //解封操作 需要写入0x60
-			printf("发送施封完成\r\n");
-			tipsflag = SendOK;
-
-
-		}
-		serialNum4[0] = (uint16_t)((btframe.serialNum4 >> 24) & 0xff) << 8 | ((btframe.serialNum4 >> 16) & 0xff);
-		serialNum4[1] = (uint16_t)((btframe.serialNum4 >> 8)  & 0xff) << 8 | (btframe.serialNum4 & 0xff);
-		
-		Flash_WriteBytes(serialNum4,serialNum4Addr,2);
-		L4Working = false;
-	}
-}
-
-
-
-
-void ReU5Proces(void)
-{
-	if(autoRe[9]==0x54 && autoRe[10]==0x49 && autoRe[11]==0x4D && autoRe[12]==0x45 && autoRe[13]==0x4F && autoRe[14]==0x55 && autoRe[15]==0x54)//TIMEOUT
-	{
-		tipsflag = Timeout;
-		HAL_Delay(1000);
-		if(preworkUp==3)
-		{
-			SET_MENU_STATUS(4,1,0,3);
-		}
-		else if(preworkUp==2)
-		{
-			SET_MENU_STATUS(5,1,0,3);
-		}
-		else if(preworkUp==1)
-		{
-			SET_MENU_STATUS(6,1,0,3);
-		}
-		else if(preworkUp==0)
-		{
-			SET_MENU_STATUS(7,1,0,3);
-		}
-		memset(autoRe,0,1024);
-	}
-	else if(autoRe[1]==0x43 && autoRe[2]==0x4F && autoRe[3]==0x4E && autoRe[4]==0x4E && autoRe[5]==0x45 && autoRe[6]==0x43 && autoRe[7]==0x54 && autoRe[8]==0x45 && autoRe[9]==0x44 \
-		&& autoRe[10]==0x3A)//CONNECTED:1 做从设备  0:做主设备autoRe[11]
-	{
-		if(sys_mode[1]==DTU_MODE)
-		{
-			tipsflag = ConnOK;
-			menu.current = 0xBB;
-			btconn_dtu=true;
-			refresh=true;
-		}
-		else if(sys_mode[1]==PDA_MODE)
-		{
-			tipsflag = ConnOK;
-			refresh=true;
-			HAL_Delay(1000);
-			tipsflag = Working;
-			refresh=true;
-			HAL_Delay(1000);
-			if(preworkUp==3)
-			{
-				L1Working= true;
-			}
-			else if(preworkUp==2)
-			{
-				L2Working= true;
-			}
-			else if(preworkUp==1)
-			{
-				L3Working= true;
-			}
-			else if(preworkUp==0)
-			{
-				L4Working= true;
-			}
-		}
-
-		memset(autoRe,0,1024);
-	}
-	//*44 49 53 43 4f 4e 4e 3a 31 
-	else if(autoRe[1]==0x44 && autoRe[2]==0x49 && autoRe[3]==0x53 && autoRe[4]==0x43 && autoRe[5]==0x4f && autoRe[6]==0x4e && autoRe[7]==0x4e && autoRe[8]==0x3a)//disCONNECTED:1 做从设备  0:做主设备
-	{
-		if(sys_mode[1]==DTU_MODE && autoRe[9]==0x31)
-		{
-			tipsflag = Disconn;
-			menu.current = 0xBB;
-			
-			btconn_dtu=false;
-			refresh=true;
-		}
-		else if(sys_mode[1]==PDA_MODE && autoRe[9]==0x30)
-		{
-			tipsflag = ConnOK;
-			refresh=true;
-			HAL_Delay(1000);
-			tipsflag = Working;
-			refresh=true;
-			HAL_Delay(1000);
-			if(preworkUp==3)
-			{
-				L1Working= true;
-			}
-			else if(preworkUp==2)
-			{
-				L2Working= true;
-			}
-			else if(preworkUp==1)
-			{
-				L3Working= true;
-			}
-			else if(preworkUp==0)
-			{
-				L4Working= true;
-			}
-		}
-		memset(autoRe,0,1024);
-	}
-	else if(autoRe[0]==0x45 && autoRe[1]==0x52 && autoRe[2]==0x52 && autoRe[3]==0x4f && autoRe[4]==0x52)//ERROR
-	{
-		tipsflag = ConnFail;
-		HAL_Delay(1000);
-		//SET_MENU_STATUS(3,3,0,2);//回到操作界面
-		//USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
-		memset(autoRe,0,1024);
+		L1work=false;
 	}
 	
 	
-	//*接收PDA信息
-	else if(autoRe[0]==0x66)
-	{
-		for (int i = 0; i < U5_BTrecvLength; i++)
-		{
-			PDA_pushArr[i] = (uint16_t)(autoRe[2*i] << 8) | autoRe[2*i+1];
-		}
-		
-		memset(autoRe,0,1024);
-	}
 	
-}	
-
-
+	
+	
+	
+	
+	
+	
+	
+}

+ 2 - 80
Core/Src/ml307a.c

@@ -88,8 +88,6 @@ void ML307A_Init(void)
 					ICCID[20]=0x00;
 					ICCID[21]=0x01;//版本号(待修改)
 				}
-
-				
 				step4g++;
 			}
 			else
@@ -97,9 +95,7 @@ void ML307A_Init(void)
 				ML307AReset();
 				break;
 			}
-			
 		}
-
 		case 1:
 		{
 			if (sendCmd_4G("AT+CPIN?\r\n", "+CPIN: READY", 1, 5)) 
@@ -117,7 +113,6 @@ void ML307A_Init(void)
 				printf("#4G模组附着正常\r\n");
 				printf("#4G模组初始化完成\r\n");
 				step4g++;
-				tipsflag = Back;
 			}	
 
 			//break;
@@ -175,7 +170,6 @@ void ML307A_Init(void)
 			{
 				reset4Gmodule=false;
 			}
-
 			printf("#TCP设置完成\r\n");
 			Time_inquiry(0);
 			if(tipsflag == NoSIM)
@@ -191,80 +185,8 @@ void ML307A_Init(void)
 		}
 		
 	}
-	
-	Flash_ReadBytes(sys_mode, SysModeAddr, 1);//读取一个2B的,系统模式
-	if(sys_mode[0]==0xFFFF)
-	{
-		sys_mode[1]=DTU_MODE;//默认进入
-		menu.current=0xFF;
-		if(!module4G_F)
-		{
-			menu.current=0xBB;
-			if(tipsflag == NoSIM)
-			{
-				tipsflag = NoSIM;
-			}
-			else
-			{
-				tipsflag = Fail4G;
-			}
-		}
-	}
-	menu.current=0;//默认进入DTU
-//	else if(sys_mode[0]==DTU_MODE)
-//	{
-//		sys_mode[1]=DTU_MODE;
-//		if(sendCmd_BT("AT+ADV=1\r\n","OK",1,1))//开启广播
-//		{
-//			printf("开启广播\r\n");
-//			
-//			USART_SendString(&huart5, "AT+DISCONN=1\r\n");
-//			menu.current=0;
-//		}
-//		else if(!module4G_F)
-//		{
-//			menu.current=0xBB;
-//			if(tipsflag == NoSIM)
-//			{
-//				tipsflag = NoSIM;
-//			}
-//			else
-//			{
-//				tipsflag = Fail4G;
-//			}
-//		}
-//		else
-//		{
-//			//Todo
-//		}
-//		
-//	}
-//	else if(sys_mode[0]==PDA_MODE)
-//	{
-//		sys_mode[1]=PDA_MODE;
-//		if(sendCmd_BT("AT+ADV=0\r\n","OK",1,1))//关闭广播
-//		{
-//			USART_SendString(&huart5, "AT+DISCONN=0\r\n");
-//			printf("关闭广播\r\n");
-//			menu.current=0;
-//		}
-//		else if(!module4G_F)
-//		{
-//			menu.current=0xBB;
-//			if(tipsflag == NoSIM)
-//			{
-//				tipsflag = NoSIM;
-//			}
-//			else
-//			{
-//				tipsflag = Fail4G;
-//			}
-//		}
-//		else
-//		{
-//			//Todo
-//		}
-//	}
+
+	menu.current=0;//默认进入PDA
 	refresh=true;	
 
 }

+ 4 - 4
Core/Src/stm32f1xx_it.c

@@ -391,12 +391,12 @@ void USART1_IRQHandler(void)
 		U1_485recvLength  =  BUFFER_SIZE - temp; //总计数减去未传输的数据个数,得到已经接收的数据个数
 	
 		U1_485reFlag = 1;//清除接收结束标志位
+		U1_485recvLength = 0;//清除计数
 
 //**初始化测试		
-		HAL_UART_Transmit_DMA(&huart1, U1_485recvBuff, U1_485recvLength);
-		U1_485recvLength = 0;//清除计数
-		U1_485reFlag = 0;//清除接收结束标志位
-		memset(U1_485recvBuff,0,U1_485recvLength);
+		//HAL_UART_Transmit_DMA(&huart1, U1_485recvBuff, U1_485recvLength);
+//		U1_485reFlag = 0;//清除接收结束标志位
+//		memset(U1_485recvBuff,0,U1_485recvLength);
 		
 		HAL_UART_Receive_DMA(&huart1, U1_485recvBuff, BUFFER_SIZE);//重新打开DMA接收,不然只能接收一次数据
 	 }

+ 107 - 62
Core/Src/tt808.c

@@ -19,10 +19,10 @@ uint8_t MIPurcXXTCSJ[100];//平台
 uint8_t speedBegin=0;
 uint8_t speedEnd=0;
 uint8_t speed[10];		//处理头部
-
 uint8_t DTUurc[100];	//接收平台数据
 uint8_t DTUurc1[15];	//接收平台数据
 
+
 int pushpullcount = 0;
 double dSpeed=0;
 double dlatitude=0;
@@ -42,6 +42,7 @@ TT808 tt808;
 extern TipsFlag tipsflag;	
 extern Menu_table menu;	
 extern bool refresh;
+extern LockInfo lockinfo;
 //*布尔
 bool authFlag = false;
 bool GnssFlag = false;
@@ -56,12 +57,12 @@ eg.+MGNSSLOC: 015032.301,3014.8605N,12001.9250E,1.8,			17.6,		3,
 
 void reconn(void)
 {
-		char TCPconnvalue[120];
-		TcpConn(TCPconnvalue, 1, JLPTIP, JLPTPORT,0);		//cid=1		tcpConnmode=0 普通模式
-		if(sendCmd_4G(TCPconnvalue, "+MIPOPEN: 1,0", 1, 1))	//TCP连接 0普通模式  2缓存模式  1透传模式
-		{
-			printf("重连成功\r\n");
-		}
+	char TCPconnvalue[120];
+	TcpConn(TCPconnvalue, 1, JLPTIP, JLPTPORT,0);		//cid=1		tcpConnmode=0 普通模式
+	if(sendCmd_4G(TCPconnvalue, "+MIPOPEN: 1,0", 1, 1))	//TCP连接 0普通模式  2缓存模式  1透传模式
+	{
+		printf("重连成功\r\n");
+	}
 }
 uint8_t Messagetemp_length=0;
 uint8_t MessageHandleData[100];	//放入封装后数据
@@ -458,8 +459,11 @@ char reIp2[10];
 char reIp3[10];
 char reIpP[10];
 Ipaddr ipaddr;
+MacSet macset;
+MacSet *macsetptr = &macset;
 char Newip[30];
 extern bool wdiFlag;
+
 //*485测试命令
 void Test485Re(void)
 {
@@ -543,10 +547,100 @@ void Test485Re(void)
 		printf("%s\r\n",version);
 		memset(U1_485recvBuff,0,BUFFER_SIZE);
 	 }
+
+
+	 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 BindeProcess(char TEMP[], uint8_t temp[],uint64_t addr, char sname[],uint16_t mac[],char snconn[],char snced[],char sndis[])
+{
+	memcpy(TEMP,U1_485recvBuff+10,12);
+	const char *hex = (const char *)TEMP;  // 将 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中
+	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);
+	}
 }
 
+void REPdaMode(void)
+{
+	//*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;
+		if(WriteSta == HAL_OK)
+		{
+			printf("更新MAC存储完成\r\n");
+		}
+		WriteSta = Flash_WriteBytes(&macsetptr->macCount,MacDbHeadAddr,1);
+		if(WriteSta == HAL_OK)
+		{
+			printf("更新存储刻度完成\r\n");
+		}	
+		memset(U1_485recvBuff,0,BUFFER_SIZE);
+	 }
+}
+void ReBTcall(void)
+{
+	 if(strncmp((char*)U5_BTrecvBuff, "+CONNECTED:0,",  strlen("+CONNECTED:0,"))==0)
+	 {
+		 TIPS_MACRO(ConnOK);//连接成功
+		 printf("设备已连接\r\n");
+	 }
+	memset(U5_BTrecvBuff,0,BUFFER_SIZE);
+}
 //*工作命令
-void ReMIPURC(void)
+void ReMIPURC(void)//DTU
 {
 //*设备上线,发送成功
 	 if(strncmp((char*)U4_4GrecvBuff, "+MIPOPEN: 1,0",  strlen("+MIPOPEN: 1,0"))==0)//连接平台
@@ -674,6 +768,10 @@ void MIPURCHandle(void)
 				{
 					printf("@鉴权应答yes\r\n");
 					authFlag = true;
+					
+					Offline=false;	//待判定假消息
+					Online = true;	//待判定假消息
+					uploaweork=true;
 				}
 				else if(YESorNO==NO)
 				{
@@ -686,9 +784,6 @@ void MIPURCHandle(void)
 				if(YESorNO==YES)
 				{
 					printf("@心跳应答yes\r\n");
-					Offline=false;	//待判定假消息
-					Online = true;	//待判定假消息
-					uploaweork=true;
 					printf("@TCP连接成功!!\r\n");
 				}
 				else if(YESorNO==NO)
@@ -801,62 +896,12 @@ void ReU4Proces(void)
 		
 		
 		dblocptr->location.speed  = (uint16_t)dSpeed;
-		
-//		if(dSpeed !=0 && dlongitude!=0 && dlatitude!=0) //有数据进行更新!
-//		{
-//			signal = true;		
-//			if(menu.current == 0xBB && tipsflag!= ConnOK)
-//			{
-//				//menu.current = 0;
-//				refresh=true;
-//			}
-//			else if(tipsflag == Back && signal)
-//			{
-//				//menu.current = 0;
-//				refresh=true;
-//			}
-//		}
-// 		else
-//		{
-//			if(signal && sys_mode[0]!=0xFFFF)
-//			{ 
-//				signal = false;
-//				menu.current = 0xBB;
-//				tipsflag = Nosignal;
-//				refresh=true;
-//			}
-//		}
+
 		memset(MGNSSLOC,0,100);
 
 	}
 }
 
-//int countregular = 0;
-//void Regular_reporting_Loc(void)
-//{
-//	countregular+=1;
-//	if(countregular==3 && !Offline )//在线状态10s更新状态,30s上传  (各种状态正常在线,直接上传信息)
-//	{
-//		countregular=0;
-//		tt808FsFunc((uint8_t*)&(dblocptr->location.alarmFlagH), 34, MessageID_location);
-//	}
-
-//	
-//}
-//+MIPURC: "disconn",1,1
-
-
-
-
-
-
-
-
-
-
-
-
-
 
 //*离线蓝牙锁
 

+ 15 - 1
Core/Src/usart.c

@@ -697,7 +697,18 @@ void Flash_ReadBytes(uint16_t* sorBuf,uint32_t FlashAddr,uint16_t len)
 		*p++ = j<<8|i;
 	}
 }
-
+void Flash_ReadBytes_mac(uint16_t* sorBuf,uint32_t FlashAddr,uint16_t len)
+{
+	uint16_t* p = sorBuf;
+	uint8_t i = 0,j = 0;
+	uint32_t addr = FlashAddr;
+	while(len--)
+	{
+		i = *(uint32_t*)addr++;
+		j = *(uint32_t*)addr++;
+		*p++ = i<<8|j;
+	}
+}
 
 HAL_StatusTypeDef WriteSta;
 // ¶¨ÒåFlash»º³åÇø
@@ -858,4 +869,7 @@ uint32_t convertGPS(double temp) {
 	}
 	
 }
+
+
+
 /* USER CODE END 1 */

+ 7 - 17
MDK-ARM/dtu.uvoptx

@@ -153,32 +153,22 @@
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>reIp0</ItemText>
+          <ItemText>lockinfo</ItemText>
         </Ww>
         <Ww>
           <count>1</count>
           <WinNumber>1</WinNumber>
-          <ItemText>reIp1</ItemText>
+          <ItemText>macsetptr</ItemText>
         </Ww>
         <Ww>
           <count>2</count>
           <WinNumber>1</WinNumber>
-          <ItemText>reIp2</ItemText>
+          <ItemText>macStr[2]</ItemText>
         </Ww>
         <Ww>
           <count>3</count>
           <WinNumber>1</WinNumber>
-          <ItemText>reIp3</ItemText>
-        </Ww>
-        <Ww>
-          <count>4</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>input_strings</ItemText>
-        </Ww>
-        <Ww>
-          <count>5</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>reIpP</ItemText>
+          <ItemText>macStr</ItemText>
         </Ww>
       </WatchWindow1>
       <WatchWindow2>
@@ -192,7 +182,7 @@
         <Mm>
           <WinNumber>1</WinNumber>
           <SubType>0</SubType>
-          <ItemText>LocDbHeadStart</ItemText>
+          <ItemText>MacDbBodyAddr</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
@@ -200,7 +190,7 @@
         <Mm>
           <WinNumber>2</WinNumber>
           <SubType>0</SubType>
-          <ItemText>LocDbBodyStart</ItemText>
+          <ItemText>Sn1InfoAddr</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow2>
@@ -394,7 +384,7 @@
       <GroupNumber>2</GroupNumber>
       <FileNumber>11</FileNumber>
       <FileType>1</FileType>
-      <tvExp>0</tvExp>
+      <tvExp>1</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>../Core/Src/main.c</PathWithFileName>