Пример #1
0
static void keyboard_report_event(void * device, u32_t flag, u8_t data, enum key_value_t press)
{
	u32_t key;
	u32_t i;

	for(i = 0; i < ARRAY_SIZE(map); i++)
	{
		if(map[i].data == data)
		{
			if( (flag & KBD_CAPS_LOCK) )
				key = map[i].caps_key;
			else if( (flag & (KBD_LEFT_SHIFT | KBD_RIGHT_SHIFT)) )
				key = map[i].shift_key;
			else if( (flag & (KBD_LEFT_CTRL | KBD_RIGHT_CTRL)) )
				key = 0;
			else
				key = map[i].key;

			if(key != 0)
			{
				if(press == KEY_BUTTON_DOWN)
					push_event_key_down(device, key);
				else if(press == KEY_BUTTON_UP)
					push_event_key_up(device, key);
			}
		}
	}
}
Пример #2
0
static int key_gpio_timer_function(struct timer_t * timer, void * data)
{
	struct input_t * input = (struct input_t *)(data);
	struct key_gpio_private_data_t * dat = (struct key_gpio_private_data_t *)input->priv;
	struct key_gpio_data_t * rdat = (struct key_gpio_data_t *)dat->rdat;
	enum event_type_t type;
	int i, val;

	for(i = 0; i < rdat->nbutton; i++)
	{
		val = gpio_get_value(rdat->buttons[i].gpio);
		if(val != dat->state[i])
		{
			if(rdat->buttons[i].active_low)
				type = val ? EVENT_TYPE_KEY_UP : EVENT_TYPE_KEY_DOWN;
			else
				type = val ? EVENT_TYPE_KEY_DOWN : EVENT_TYPE_KEY_UP;

			if(type == EVENT_TYPE_KEY_DOWN)
				push_event_key_down(input, rdat->buttons[i].key);
			else if(type == EVENT_TYPE_KEY_UP)
				push_event_key_up(input, rdat->buttons[i].key);
		}
		dat->state[i] = val;
	}

	timer_forward_now(timer, ms_to_ktime(100));
	return 1;
}
Пример #3
0
static void key_rc5t620_interrupt(void * data)
{
	struct input_t * input = (struct input_t *)data;
	struct key_rc5t620_pdata_t * pdat = (struct key_rc5t620_pdata_t *)input->priv;
	u8_t val = 0;

	rc5t620_read(pdat->dev, RC5T620_PWRMON, &val);
	if(val & 0x1)
		push_event_key_down(input, KEY_POWER);
	else
		push_event_key_up(input, KEY_POWER);

	rc5t620_read(pdat->dev, RC5T620_PWRIRQ, &val);
	val &= ~(0x1 << 0);
	rc5t620_write(pdat->dev, RC5T620_PWRIRQ, val);
}