diff --git a/bsp/mini2440/key.c b/bsp/mini2440/key.c index 9fc655a02..c0c16836f 100644 --- a/bsp/mini2440/key.c +++ b/bsp/mini2440/key.c @@ -1,110 +1,110 @@ -#include -#include - -#include -#include - -/* -key_enter GPG0 -key_down GPG3 -key_up GPG5 -key_right GPG6 -key_left GPG7 -key_power GPG11 -*/ -#define key_enter_GETVALUE() (GPGDAT & (1 << 0)) -#define key_down_GETVALUE() (GPGDAT & (1 << 3)) -#define key_up_GETVALUE() (GPGDAT & (1 << 5)) -#define key_right_GETVALUE() (GPGDAT & (1 << 6)) -#define key_left_GETVALUE() (GPGDAT & (1 << 7)) -#define key_power_GETVALUE() (GPGDAT & (1 << 11)) - -static void key_thread_entry(void *parameter) -{ - rt_time_t next_delay; - struct rtgui_event_kbd kbd_event; - - /* init gpio configuration */ - GPGCON = GPGCON & (~((3<<22)|(3<<6)|(3<<0)|(3<<10)|(3<<12)|(3<<14))) | - ((2<<22)|(2<<6)|(2<<0)|(2<<10)|(2<<12)|(2<<14)); - - /* init keyboard event */ - RTGUI_EVENT_KBD_INIT(&kbd_event); - kbd_event.mod = RTGUI_KMOD_NONE; - kbd_event.unicode = 0; - - while (1) - { - next_delay = 20; - kbd_event.key = RTGUIK_UNKNOWN; - - kbd_event.type = RTGUI_KEYDOWN; - if ( key_enter_GETVALUE() == 0 ) - { - rt_thread_delay(next_delay); - if (key_enter_GETVALUE() == 0) - { - /* HOME key */ - rt_kprintf("key_home\n"); - kbd_event.key = RTGUIK_HOME; - } - else - { - rt_kprintf("key_enter\n"); - kbd_event.key = RTGUIK_RETURN; - } - } - - if ( key_down_GETVALUE() == 0 ) - { - rt_kprintf("key_down\n"); - kbd_event.key = RTGUIK_DOWN; - } - - if ( key_up_GETVALUE() == 0 ) - { - rt_kprintf("key_up\n"); - kbd_event.key = RTGUIK_UP; - } - - if ( key_right_GETVALUE() == 0 ) - { - rt_kprintf("key_right\n"); - kbd_event.key = RTGUIK_RIGHT; - } - - if ( key_left_GETVALUE() == 0 ) - { - rt_kprintf("key_left\n"); - kbd_event.key = RTGUIK_LEFT; - } - - if (kbd_event.key != RTGUIK_UNKNOWN) - { - /* post down event */ - rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event)); - - next_delay = 10; - /* delay to post up event */ - rt_thread_delay(next_delay); - - /* post up event */ - kbd_event.type = RTGUI_KEYUP; - rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event)); - } - - /* wait next key press */ - rt_thread_delay(next_delay); - } -} - -void rt_hw_key_init() -{ - #if 0 - rt_thread_t key_tid; - key_tid = rt_thread_create("key", - key_thread_entry, RT_NULL, - 512, 30, 5); - if (key_tid != RT_NULL) rt_thread_startup(key_tid); - #endif -} +#include +#include + +#include +#include + +/* +key_enter GPG0 +key_down GPG3 +key_up GPG5 +key_right GPG6 +key_left GPG7 +key_power GPG11 +*/ +#define key_enter_GETVALUE() (GPGDAT & (1 << 0)) +#define key_down_GETVALUE() (GPGDAT & (1 << 3)) +#define key_up_GETVALUE() (GPGDAT & (1 << 5)) +#define key_right_GETVALUE() (GPGDAT & (1 << 6)) +#define key_left_GETVALUE() (GPGDAT & (1 << 7)) +#define key_power_GETVALUE() (GPGDAT & (1 << 11)) + +static void key_thread_entry(void *parameter) +{ + rt_time_t next_delay; + struct rtgui_event_kbd kbd_event; + + /* init gpio configuration */ + GPGCON = GPGCON & (~((3<<22)|(3<<6)|(3<<0)|(3<<10)|(3<<12)|(3<<14))) | + ((2<<22)|(2<<6)|(2<<0)|(2<<10)|(2<<12)|(2<<14)); + + /* init keyboard event */ + RTGUI_EVENT_KBD_INIT(&kbd_event); + kbd_event.mod = RTGUI_KMOD_NONE; + kbd_event.unicode = 0; + + while (1) + { + next_delay = 20; + kbd_event.key = RTGUIK_UNKNOWN; + + kbd_event.type = RTGUI_KEYDOWN; + if ( key_enter_GETVALUE() == 0 ) + { + rt_thread_delay(next_delay); + if (key_enter_GETVALUE() == 0) + { + /* HOME key */ + rt_kprintf("key_home\n"); + kbd_event.key = RTGUIK_HOME; + } + else + { + rt_kprintf("key_enter\n"); + kbd_event.key = RTGUIK_RETURN; + } + } + + if ( key_down_GETVALUE() == 0 ) + { + rt_kprintf("key_down\n"); + kbd_event.key = RTGUIK_DOWN; + } + + if ( key_up_GETVALUE() == 0 ) + { + rt_kprintf("key_up\n"); + kbd_event.key = RTGUIK_UP; + } + + if ( key_right_GETVALUE() == 0 ) + { + rt_kprintf("key_right\n"); + kbd_event.key = RTGUIK_RIGHT; + } + + if ( key_left_GETVALUE() == 0 ) + { + rt_kprintf("key_left\n"); + kbd_event.key = RTGUIK_LEFT; + } + + if (kbd_event.key != RTGUIK_UNKNOWN) + { + /* post down event */ + rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event)); + + next_delay = 10; + /* delay to post up event */ + rt_thread_delay(next_delay); + + /* post up event */ + kbd_event.type = RTGUI_KEYUP; + rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event)); + } + + /* wait next key press */ + rt_thread_delay(next_delay); + } +} + +void rt_hw_key_init() +{ + #if 0 + rt_thread_t key_tid; + key_tid = rt_thread_create("key", + key_thread_entry, RT_NULL, + 512, 30, 5); + if (key_tid != RT_NULL) rt_thread_startup(key_tid); + #endif +}