Esempio n. 1
0
File: edit.c Progetto: amsl/RTGUI
void kbd_event_set_key(struct rtgui_event_kbd *ekbd, rt_uint16_t key)
{
	RTGUI_EVENT_KBD_INIT(ekbd);
	ekbd->mod  = RTGUI_KMOD_NONE;
	ekbd->unicode = 0;

	ekbd->key = key;
	ekbd->type = RTGUI_KEYDOWN;
}
Esempio n. 2
0
File: server.c Progetto: eyeye/RTGUI
void rtgui_server_handle_kbd(struct rtgui_event_kbd *event)
{
    struct rtgui_topwin *wnd;

    /* re-init to server thread */
    RTGUI_EVENT_KBD_INIT(event);

    /* todo: handle input method and global shortcut */

    wnd = rtgui_topwin_get_focus();
    if (wnd != RT_NULL)
    {
        RT_ASSERT(wnd->flag & WINTITLE_ACTIVATE)

        /* send to focus window */
        event->wid = wnd->wid;

        /* send keyboard event to thread */
        rtgui_send(wnd->tid, (struct rtgui_event *)event, sizeof(struct rtgui_event_kbd));

        return;
    }
}
Esempio n. 3
0
static void key_thread_entry(void *parameter)
{
#ifdef RT_USING_RTGUI
    rt_time_t next_delay;
    rt_uint8_t i;

    struct rtgui_event_kbd kbd_event;
    
    key_io_init();

    /* init keyboard event */
    RTGUI_EVENT_KBD_INIT(&kbd_event);
    kbd_event.mod  = RTGUI_KMOD_NONE;
    kbd_event.unicode = 0;

    while (1)
    {
        next_delay = RT_TICK_PER_SECOND/10;
        kbd_event.key = RTGUIK_UNKNOWN;
        kbd_event.type = RTGUI_KEYDOWN;

        if (KEY_ENTER_GETVALUE() == 0 )
        {
            for(i=0; ; i++)
            {
                rt_thread_delay( next_delay );
                if (KEY_ENTER_GETVALUE() == 0)
                {
                    if (i>=4)
                    {
                        /* HOME key */
                        kbd_event.key  = RTGUIK_HOME;
                        next_delay = RT_TICK_PER_SECOND/5;
                        break;
                    }
                }
                else
                {
                    kbd_event.key  = RTGUIK_RETURN;
                    break;
                }
            }
        }

        if (KEY_DOWN_GETVALUE() == 0)
        {
            kbd_event.key  = RTGUIK_DOWN;
        }

        if (KEY_UP_GETVALUE() == 0)
        {
            kbd_event.key  = RTGUIK_UP;
        }

        if (KEY_RIGHT_GETVALUE() == 0)
        {
            kbd_event.key  = RTGUIK_RIGHT;
        }

        if (KEY_LEFT_GETVALUE() == 0)
        {
            kbd_event.key  = RTGUIK_LEFT;
        }

        if (kbd_event.key != RTGUIK_UNKNOWN)
        {
            /* post down event */
            rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event));
        }
        else
        {
            kbd_event.type = RTGUI_KEYUP;
            rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event));
        }
        /* wait next key press */
        rt_thread_delay(next_delay);
    }
#else
	extern struct rt_messagequeue mq;
	rt_time_t next_delay;
	struct lcd_msg msg;
	msg.type = KEY_MSG;
	
	key_io_init();
	
	while (1)
	{
		msg.key = NO_KEY;
	
		next_delay = RT_TICK_PER_SECOND/10;
	
		if (KEY_ENTER_GETVALUE() == 0 )
		{
			msg.key  = KEY_ENTER;
		}
	
		if (KEY_DOWN_GETVALUE() == 0)
		{
			msg.key  = KEY_DOWN;
		}
	
		if (KEY_UP_GETVALUE() == 0)
		{
			msg.key  = KEY_UP;
		}
	
		if (KEY_RIGHT_GETVALUE() == 0)
		{
			msg.key  = KEY_RIGHT;
		}
	
		if (KEY_LEFT_GETVALUE() == 0)
		{
			msg.key  = KEY_LEFT;
		}
	
		rt_mq_send(&mq, &msg, sizeof(msg));
	
		/* wait next key press */
		rt_thread_delay(next_delay);
	}
#endif
}
Esempio n. 4
0
static void key_thread_entry(void *parameter)
{
    rt_time_t next_delay;
    struct rtgui_event_kbd kbd_event;

    GPIO_Configuration();
//    EXTI_Configuration();
//    NVIC_Configuration();

    /* init keyboard event */
    RTGUI_EVENT_KBD_INIT(&kbd_event);
    kbd_event.wid = RT_NULL;
    kbd_event.mod  = RTGUI_KMOD_NONE;
    kbd_event.unicode = 0;

    while (1)
    {
        next_delay = 10;
        kbd_event.key = RTGUIK_UNKNOWN;
        kbd_event.type = RTGUI_KEYDOWN;

        if ( key_enter_GETVALUE() == 1 )
        {
            rt_thread_delay( next_delay*4 );
            if (key_enter_GETVALUE() == 1)
            {
                /* 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_up_GETVALUE()    == 1 )
        {
            rt_kprintf("key_up\n");
            kbd_event.key  = RTGUIK_UP;
        }

        if ( key_down_GETVALUE()  == 1 )
        {
            rt_kprintf("key_down\n");
            kbd_event.key  = RTGUIK_DOWN;
        }

        if ( key_left_GETVALUE()  == 1 )
        {
            rt_kprintf("key_left\n");
            kbd_event.key  = RTGUIK_LEFT;
        }

        if ( key_right_GETVALUE() == 1 )
        {
            rt_kprintf("key_right\n");
            kbd_event.key  = RTGUIK_RIGHT;
        }

        if(key_stop_GETVALUE() == 1)
        {
            rt_kprintf("key_stop\n");
        }

        if(key_menu_GETVALUE() == 1)
        {
            rt_kprintf("key_menu\n");
        }

        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);
    }
}