示例#1
0
文件: ui.c 项目: InSoonPark/asf
void ui_process(uint16_t framenumber)
{
	bool b_btn_state;
	static bool btn0_last_state = false;
	static bool btn1_last_state = false;
	static bool btn2_last_state = false;
	static bool btnq_last_state = false;
	static uint8_t cpt_sof = 0;

	if ((framenumber % 1000) == 0) {
		LED_On(LED1_GPIO);
	}
	if ((framenumber % 1000) == 500) {
		LED_Off(LED1_GPIO);
	}
	// Scan process running each 40ms
	cpt_sof++;
	if (40 > cpt_sof)
		return;
	cpt_sof = 0;

	// Scan buttons on switch 0, 1 and 2
	b_btn_state = (gpio_pin_is_low(GPIO_PUSH_BUTTON_0)) ? true : false;
	if (b_btn_state != btn0_last_state) {
		ui_hid_report[0]=b_btn_state;
		udi_hid_generic_send_report_in(ui_hid_report);
		btn0_last_state = b_btn_state;
	}

	b_btn_state = (gpio_pin_is_low(GPIO_PUSH_BUTTON_1)) ? true : false;
	if (b_btn_state != btn1_last_state) {
		ui_hid_report[0]=b_btn_state;
		udi_hid_generic_send_report_in(ui_hid_report);
		btn1_last_state = b_btn_state;
	}

	b_btn_state = (gpio_pin_is_low(GPIO_PUSH_BUTTON_2)) ? true : false;
	if (b_btn_state != btn2_last_state) {
		ui_hid_report[0]=b_btn_state;
		udi_hid_generic_send_report_in(ui_hid_report);
		btn2_last_state = b_btn_state;
	}

	// Scan QTouch button
	b_btn_state = (!check_touch_key_pressed()) ? true : false;
	if (b_btn_state != btnq_last_state) {
		ui_hid_report[0]=b_btn_state;
		udi_hid_generic_send_report_in(ui_hid_report);
		btnq_last_state = b_btn_state;
	}
}
示例#2
0
/**
 * \brief Check the status of the keyboard
 *
 * \param keybuffer  a keyboard_event struct to store keyboard status
 */
void keyboard_get_key_state(struct keyboard_event *keybuffer)
{
	// Variable to hold the key mask
	static uint8_t key_state;
	char key;

	if ((gpio_pin_is_low(GPIO_PUSH_BUTTON_0)) &&
			!(key_state & KEYBOARD_ENTER_MASK)) {
		// Key pressed
		key_state |= KEYBOARD_ENTER_MASK;
		keybuffer->keycode = KEYBOARD_ENTER;
		keybuffer->type = KEYBOARD_PRESS;
	} else if ((gpio_pin_is_high(GPIO_PUSH_BUTTON_0))
			&& (key_state & KEYBOARD_ENTER_MASK)) {
		// Key released
		key_state &= ~KEYBOARD_ENTER_MASK;
		keybuffer->keycode = KEYBOARD_ENTER;
		keybuffer->type = KEYBOARD_RELEASE;
	} else if ((gpio_pin_is_low(GPIO_PUSH_BUTTON_1)) &&
			!(key_state & KEYBOARD_UP_MASK)) {
		// Key pressed
		key_state |= KEYBOARD_UP_MASK;
		keybuffer->keycode = KEYBOARD_UP;
		keybuffer->type = KEYBOARD_PRESS;
	} else if ((gpio_pin_is_high(GPIO_PUSH_BUTTON_1))
			&& (key_state & KEYBOARD_UP_MASK)) {
		// Key released
		key_state &= ~KEYBOARD_UP_MASK;
		keybuffer->keycode = KEYBOARD_UP;
		keybuffer->type = KEYBOARD_RELEASE;
	} else if ((gpio_pin_is_low(GPIO_PUSH_BUTTON_2)) &&
			!(key_state & KEYBOARD_DOWN_MASK)) {
		// Key pressed
		key_state |= KEYBOARD_DOWN_MASK;
		keybuffer->keycode = KEYBOARD_DOWN;
		keybuffer->type = KEYBOARD_PRESS;
	} else if ((gpio_pin_is_high(GPIO_PUSH_BUTTON_2))
			&& (key_state & KEYBOARD_DOWN_MASK)) {
		// Key released
		key_state &= ~KEYBOARD_DOWN_MASK;
		keybuffer->keycode = KEYBOARD_DOWN;
		keybuffer->type = KEYBOARD_RELEASE;

	// touch key
	} else if ((check_touch_key_pressed()) &&
			!(key_state & KEYBOARD_BACK_MASK)) {
		// Touch key pressed
		key_state |= KEYBOARD_BACK_MASK;
		keybuffer->keycode = KEYBOARD_BACK;
		keybuffer->type = KEYBOARD_PRESS;
	} else if ((!check_touch_key_pressed()) &&
			(key_state & KEYBOARD_BACK_MASK)) {
		// Touch key released
		key_state &= ~KEYBOARD_BACK_MASK;
		keybuffer->keycode = KEYBOARD_BACK;
		keybuffer->type = KEYBOARD_RELEASE;
	} else if ((key = cdc_getkey()) != KEYBOARD_NO_KEY) {
		keybuffer->keycode = key;
		keybuffer->type = KEYBOARD_RELEASE;
	} else {
		keybuffer->keycode = KEYBOARD_NO_KEY;
		keybuffer->type = KEYBOARD_NO_EVENT;
	}
}