#include "key.h" #include "delay.h" #include "bsp.h" key_status_t key_status[KEY_MAX]; // timeout_t tt_key; key_para_t key_para[KEY_MAX]; void key_init(void) { SYS_EnableAPBClock(APB_MASK_GPIO1); // SYS_DisableJTDO(); GPIO_SetInput(GPIO1,0x70); key_status_init(); // timeout_setValue(&tt_key,10,0xff); } //获取按键电平 uint8_t get_key_bit(uint8_t key) { uint8_t status; switch (key) { case KEY1: status = GET_KEY1(); break; case KEY2: status = GET_KEY2(); break; case KEY3: status = GET_KEY3(); break; default: status = 0; break; } return status; } /*! * \brief 上电读取按键电平 * \param 无 */ void key_status_init(void) { int i; for(i = 0; i < KEY_MAX; i++) { key_status[i].last_level = get_key_bit(i); } } /*! * \brief 实时读取按键电平 * \param 无 */ void get_key_bit_realtime(void) { int i; uint8_t status; // if(!timeout_isOut(&tt_key)) // return; delay_ms(10); for(i = 0; i < KEY_MAX; i++) { status = get_key_bit(i); if(status != key_status[i].last_level) { key_status[i].flag = 1; if(status)//高电平 抬起 { key_status[i].status = KEY_STATUS_UP; } else { key_status[i].status = KEY_STATUS_DN; } key_status[i].last_level = status; } } } /*! * \brief 按键处理函数 * \param 无 */ void key_handle(void) { uint8_t i; get_key_bit_realtime();//实时读取按键电平 for(i = 0; i < KEY_MAX; i++) { if(key_status[i].flag) { key_status[i].flag = 0; if(key_status[i].status == KEY_STATUS_UP)//抬起 { // switch(i) // { // case KEY1: // // printf("key1 up\n"); // break; // case KEY2: // // printf("key2 up\n"); // // GPIO_SetHigh(ITSF_PWR_N_PORT,ITSF_PWR_N_BIT); // // YTSF_GPIO_REV4_EN(); // // YTSF_GPIO_REV1_RST(); // // delay_ms(500); // // YTSF_GPIO_REV1_SET(); // break; // case KEY3: // // printf("key3 up\n"); // // GPIO_SetHigh(ITSF_PWR_P_PORT,ITSF_PWR_N_BIT); // break; // default: // break; // } } else if(key_status[i].status == KEY_STATUS_DN)//按下 { // if(key_para[i].flag==0) // { // key_para[i].flag = 1; // key_para[i].num = 0; // timeout_setValue(&key_para[i].tt_key,KEY_TIMEOUT,1); // } // key_para[i].num++; // printf("key%d,key num:%d\n",i+1,key_para[i].num); switch(i) { case KEY1: // ytsf_test(); // lora_test(); printf("key1 down\n"); break; case KEY2: // tax_test(); // SPI_FLASH_Test(); // I2C_Test(); printf("key2 down\n"); // GPIO_SetLow(ITSF_PWR_N_PORT,ITSF_PWR_N_BIT); // YTSF_GPIO_REV4_DN(); // SYS_SoftwareReset(); // update_test();//升级测试 // FLASH_Unlock(); // FLASH_EraseSector(0x80020000); // FLASH_Lock(); // printf("1\n"); break; case KEY3: printf("key3 down\n"); // GPIO_SetLow(ITSF_PWR_P_PORT,ITSF_PWR_N_BIT); break; default: break; } } } } // key_timeout_handle(); } // //按键功能 // void key_func(uint8_t key, uint8_t num) // { // printf("key%d,time%d,num%d\n",key+1,KEY_TIMEOUT,num); // switch(key) // { // case KEY1: // switch(num) // { // case 1: // // SPI_FLASH_Test(); // // lora_send_query_firm(device_info.device_sn);//发送 // break; // case 2: // // SX126xReset(); // // lora_init(); // // printf("lora reset\n"); // break; // case 3://离线升级 // // printf("lora index = %d\n",lora_para_choice); // device_fixed_info.master_updata_start = 1; // ota_state.offline_mode = KEY_TRIGGER; // break; // case 4: // // lora_power_init(); // // lora_init(); // break; // default: // break; // } // break; // case KEY2: // switch(num) // { // case 1: // break; // case 2: // break; // case 3: // device_fixed_info.master_updata_start = 1; // ota_state.offline_mode = KEY_TRIGGER; // break; // default: // break; // } // break; // case KEY3: // switch(num) // { // case 1: // break; // case 2: // break; // case 3: // break; // default: // break; // } // break; // default: // break; // } // } // //按键超时处理 // void key_timeout_handle(void) // { // uint8_t i; // for(i = 0; i < KEY_MAX; i++) // { // if(timeout_isOut(&key_para[i].tt_key)) // { // key_func(i,key_para[i].num); // key_para[i].flag = 0; // key_para[i].num = 0; // } // } // }