#include "key.h" #include "usart.h" #include "interface.h" //结构体 LockInfo lockinfo; extern Menu_table menu; extern TipsFlag tipsflag; struct keys key[1]={0}; //布尔 bool sent1_key = false; 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; uint8_t preworkUp = 0; uint8_t presjfUp = 0; uint8_t KEY_1_Scan_PDA(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 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; } } #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_PDA(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 0: { SET_MENU_STATUS(0,0,0,0); break; } case 1: { SET_MENU_STATUS(1,0,1,1); break; } 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; break; } case 3: { if(menu.next!=3) { menu.up-=1; menu.next+=1; } else if(menu.next==3) { menu.up=3; 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; break; } } #if debugkeyinfo == 1 PRINT_MENU_STATUS("K2"); #endif sent2_key = true; } return 1; } else // 按键释放 { sent2_key = false; return 0; } } } 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 KEY_3_Scan_PDA(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 0://跳转到菜单界面 { 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); } else { SET_MENU_STATUS(3,3,0,2); } break; } case 2: { menu.PreNext=menu.next;//L1 - L4 SET_MENU_STATUS(0xA0,1,0,3); break; } case 3://施解封操作 { if(menu.up==3)//L1操作 { preworkUp=menu.up; SET_MENU_STATUS(4,1,0,3); break; } if(menu.up==2)//2操作 { preworkUp=menu.up; SET_MENU_STATUS(5,1,0,3); break; } if(menu.up==1)//3操作 { preworkUp=menu.up; SET_MENU_STATUS(6,1,0,3); 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: { // 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) { SET_MENU_STATUS(0xA1,0xE,0,3); } else if(menu.up==0) { 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 { signal = true; sys_mode[1]=PDA_MODE; } else if(menu.up==0)//DTU 0x0001 { 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; } } #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_PDA(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; } case 1: { SET_MENU_STATUS(0,0,0,0); break; } case 2: case 3: { SET_MENU_STATUS(1,1,0,1); break; } case 4: case 5: case 6: case 7: { SET_MENU_STATUS(3,3,0,2); USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接 break; } case 0xA0: { 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"); #endif sent4_key = true; } return 1; } else // 按键释放 { sent4_key = false; return 0; } } } return 0; } 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; } } }