#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../inc/key_gpio.h" #include "../inc/config.h" #include "../inc/igpio.h" #define _DEBUG_KEY_PR_ 0 #if _DEBUG_KEY_PR_ #define PR_KEY(...) printf(__VA_ARGS__) #else #define PR_KEY(...) #endif #define KEY_MAX_NUM 6 const uint32 c_key_gpio_arry[KEY_MAX_NUM]= { KEY1_GP_NUM, // LEFT KEY2_GP_NUM, // RIGHT ---> UP KEY3_GP_NUM, // UP KEY4_GP_NUM, // DOWN KEY5_GP_NUM, // EXIT KEY6_GP_NUM, // OK }; uint8 pr_key(uint8 keyvalue) { uint8 key = KEY_NULL; switch(keyvalue) { case 2: key=KEY_RIGHT; break; case 1: key=KEY_LEFT; break; case 4: key=KEY_UP; break; case 8: key=KEY_DOWN; break; case 16: key=KEY_ENTER; break; case 14: key=KEY_RIGHT_UP_DOWN; break; case 12: key=KEY_UP_DOWN; break; case 3: key=KEY_LEFT_RIGHT; break; case 13: key=KEY_LEFT_UP_DOWN; break; case 32: key=KEY_EXIT; break; default: break; } return key; } uint8 get_key_value(void) { uint8 key = KEY_NULL; uint8 i=0; uint8 high_level=0; uint8 tmpval=0; for(i = 0; i < KEY_MAX_NUM; i++) { get_gpio_value(c_key_gpio_arry[i], &high_level); if(high_level) { tmpval &= ~(uint8)(1 << i); } else { tmpval |= (uint8)(1 << i); } } key = pr_key(tmpval); if(key != KEY_NULL) { PR_KEY("\n======KeyVal=%d======\n\n", tmpval); } return key; } uint8 printf_key_longpress(uint8 tmpval) { uint8 key = KEY_NULL; switch(tmpval) { case 1: key=KEY_LEFT; PR_KEY("\n long press LEFT\n\n"); break; case 2: key=KEY_RIGHT; PR_KEY("\n long press RIGHT\n\n"); break; case 4: key=KEY_UP; PR_KEY("\n long press UP\n\n"); break; case 8: key=KEY_DOWN; PR_KEY("\n long press DOWN\n\n"); break; default: break; } return key; } char key_value[] = {0x01,0x02,0x04,0x08,0x10,0x20}; char key_value_index[] = {0,0,1,0,2,0,0,0,3}; uint8 check_long_press(uint8 key) { int i = 0; uint8 high_level = 0; if(key == key_value[2] || key == key_value[3]) { i = key_value_index[key]; get_gpio_value(c_key_gpio_arry[i], &high_level); return high_level ? 0 : 1; } return 0; } uint8 get_long_press(void) { uint8 key = 0x00; uint8 high_level = 0; int i = 0; for(i=0; i<4; i++) { get_gpio_value(c_key_gpio_arry[i], &high_level); if(high_level==0) { key += key_value[i]; } } return printf_key_longpress(key); }