123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574 |
- #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;
- uint32_t enterInterface_time =0;
- uint8_t preworkUp = 0;
- uint8_t onOff_Num=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:
- {
- 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");
- #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(1,0,0,0);
- break;
- }
- case 1:
- {
- SET_MENU_STATUS(1,0,1,1);
- break;
- }
- case 2:
- case 3:
- {
- SWITCH_MENU_DOWN4();//四选项选择
- break;
- }
- case 8://L绑定
- {
- if(menu.next!=macsetptr->macCount){
- menu.up-=1;
- menu.next+=1;
- } else if(menu.next==macsetptr->macCount) {
- menu.up=macsetptr->macCount;
- menu.next=0;
- }
- refresh=true;
- break;
- }
- case 4:
- case 5:
- case 6:
- case 7:
- {
- SWITCH_MENU_DOWN2();//下翻2选项
- break;
- }
-
- }
- #if debugkeyinfo == 1
- PRINT_MENU_STATUS("K2");
- #endif
- sent2_key = true;
- }
- return 1;
- }
- else // 按键释放
- {
- sent2_key = false;
- return 0;
- }
- }
- }
- return 0;
- }
- uint8_t preCurrent = 0;
- uint8_t preBind = 0;
- uint8_t L1Work_open =0;//1:开锁
- uint8_t L1Work_close=0;//1:关锁
- uint8_t L2Work_open =0;//1:开锁
- uint8_t L2Work_close=0;//1:关锁
- uint8_t L3Work_open =0;//1:开锁
- uint8_t L3Work_close=0;//1:关锁
- uint8_t L4Work_open =0;//1:开锁
- uint8_t L4Work_close=0;//1:关锁
- uint8_t L5Work_open =0;//1:开锁
- uint8_t L5Work_close=0;//1:关锁
- uint8_t L6Work_open =0;//1:开锁
- uint8_t L6Work_close=0;//1:关锁
- uint8_t L7Work_open =0;//1:开锁
- uint8_t L7Work_close=0;//1:关锁
- uint8_t L8Work_open =0;//1:开锁
- uint8_t L8Work_close=0;//1:关锁
- char macStr[20][13]; // 长度为13的字符串加上字符串结束符'\0'
- 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绑定界面
- {
- if(menu.up==1)
- {
- SET_MENU_STATUS(2,3,0,2);
- }
- else
- {
- SET_MENU_STATUS(3,3,0,2);
- }
- break;
- }
- 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中的字符串)
-
- // 分割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 8:
- {
- if(preBind==3)//L1确认绑定
- {
- L1bd=true;
- sprintf(lockinfo.SN1name, "%s", macStr[menu.next]+8);
- Flash_WriteBytes(macsetptr->mac+menu.next*3,Sn1InfoAddr,3);
- break;
- }
- if(preBind==2)//L2确认绑定
- {
- L2bd=true;
- sprintf(lockinfo.SN2name, "%s", macStr[menu.next]+8);
- Flash_WriteBytes(macsetptr->mac+menu.next*3,Sn2InfoAddr,3);
- break;
-
- }
- if(preBind==1)//L3确认绑定
- {
- L3bd=true;
- sprintf(lockinfo.SN3name, "%s", macStr[menu.next]+8);
- Flash_WriteBytes(macsetptr->mac+menu.next*3,Sn3InfoAddr,3);
- break;
-
- }
- if(preBind==0)//L4确认绑定
- {
- L4bd=true;
- sprintf(lockinfo.SN4name, "%s", macStr[menu.next]+8);
- Flash_WriteBytes(macsetptr->mac+menu.next*3,Sn4InfoAddr,3);
- break;
- }
- }
- case 3:
- {
- 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:
- {
- preCurrent = menu.current;
- onOff_Num = menu.up;//1:关锁 0:开锁
- printf("%d\r\n",onOff_Num);
- if(preworkUp == 3) //L1
- {
- if(onOff_Num)
- {
- L1Work_close=1;
- printf("关锁\r\n");
-
- }
- else
- {
- L1Work_open=1;
- printf("开锁\r\n");
- }
- uint16_t mac1[3];
- Flash_ReadBytes_mac(mac1,Sn1InfoAddr,3);
-
- char SNconn[50];
- char *ptr = SNconn;
- ptr += sprintf(ptr, "AT+CONN=");
- for (int i = 0; i < 3; i++) {
- ptr += sprintf(ptr, "%04X", mac1[i]);
- }
- sprintf(ptr, "\r\n");
- char SNF[50];
- char *ptr1 = SNF;
- ptr1 += sprintf(ptr1, "+CONNECTED:0,");
- for (int i = 0; i < 3; i++) {
- ptr1 += sprintf(ptr1, "%04X", mac1[i]);
- }
- lockinfo.SNCONN = SNconn;
- lockinfo.SNED = SNF;
- // if(sendCmd_BT(lockinfo.SNCONN,"ERROR",1,1))
- // {
- // USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
- // printf("断开连接\r\n");
- // SET_MENU_STATUS(3,3,0,2);
- // }
- // else
- // {
- sendCmd_BT(lockinfo.SNCONN,lockinfo.SNED,2,20);
- // }
- }
- else if(preworkUp == 2) //L2
- {
- uint16_t mac2[3];
- Flash_ReadBytes_mac(mac2,Sn2InfoAddr,3);
-
- char SNconn[50];
- char *ptr = SNconn;
- ptr += sprintf(ptr, "AT+CONN=");
- for (int i = 0; i < 3; i++) {
- ptr += sprintf(ptr, "%04X", mac2[i]);
- }
- sprintf(ptr, "\r\n");
- char SNF[50];
- char *ptr1 = SNF;
- ptr1 += sprintf(ptr1, "+CONNECTED:0,");
- for (int i = 0; i < 3; i++) {
- ptr1 += sprintf(ptr1, "%04X", mac2[i]);
- }
- lockinfo.SNCONN = SNconn;
- lockinfo.SNED = SNF;
- // if(sendCmd_BT(lockinfo.SNCONN,"ERROR",1,1))
- // {
- // USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
- // printf("断开连接\r\n");
- // SET_MENU_STATUS(3,3,0,2);
- // }
- // else
- // {
- sendCmd_BT(lockinfo.SNCONN,lockinfo.SNED,2,20);
- // }
- }
- else if(preworkUp == 1) //L3
- {
- uint16_t mac3[3];
- Flash_ReadBytes_mac(mac3,Sn3InfoAddr,3);
-
- char SNconn[50];
- char *ptr = SNconn;
- ptr += sprintf(ptr, "AT+CONN=");
- for (int i = 0; i < 3; i++) {
- ptr += sprintf(ptr, "%04X", mac3[i]);
- }
- sprintf(ptr, "\r\n");
- char SNF[50];
- char *ptr1 = SNF;
- ptr1 += sprintf(ptr1, "+CONNECTED:0,");
- for (int i = 0; i < 3; i++) {
- ptr1 += sprintf(ptr1, "%04X", mac3[i]);
- }
- lockinfo.SNCONN = SNconn;
- lockinfo.SNED = SNF;
- if(sendCmd_BT(lockinfo.SNCONN,"ERROR",1,1))
- {
- USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
- printf("断开连接\r\n");
- SET_MENU_STATUS(3,3,0,2);
- }
- else
- {
- sendCmd_BT(lockinfo.SNCONN,lockinfo.SNED,2,20);
- }
- }
- else if(preworkUp == 0) //L4
- {
- uint16_t mac4[3];
- Flash_ReadBytes_mac(mac4,Sn4InfoAddr,3);
-
- char SNconn[50];
- char *ptr = SNconn;
- ptr += sprintf(ptr, "AT+CONN=");
- for (int i = 0; i < 3; i++) {
- ptr += sprintf(ptr, "%04X", mac4[i]);
- }
- sprintf(ptr, "\r\n");
- char SNF[50];
- char *ptr1 = SNF;
- ptr1 += sprintf(ptr1, "+CONNECTED:0,");
- for (int i = 0; i < 3; i++) {
- ptr1 += sprintf(ptr1, "%04X", mac4[i]);
- }
- lockinfo.SNCONN = SNconn;
- lockinfo.SNED = SNF;
- if(sendCmd_BT(lockinfo.SNCONN,"ERROR",1,1))
- {
- USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
- printf("断开连接\r\n");
- SET_MENU_STATUS(3,3,0,2);
- }
- else
- {
- sendCmd_BT(lockinfo.SNCONN,lockinfo.SNED,2,20);
- }
- }
- }
-
- }
- #if debugkeyinfo == 1
- 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:
- 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:
- {
- 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);
- 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)
- {
- KEY_1_Scan_PDA();
- KEY_2_Scan_PDA();
- KEY_3_Scan_PDA();
- KEY_4_Scan_PDA();
- }
|