void dispatch_buttons(uint32_t buttons) { int i; uint8_t state; if ((buttons & (1 << btn_map[KEY_POWER]))) { /* hold button 500ms to shut down */ if ((lastbuttons & (1 << btn_map[KEY_POWER]))) { unsigned long elapsed = jiffies - power_hold; if (elapsed > 50) twl3025_power_off(); power_hold++; } else power_hold = jiffies; } if (buttons == lastbuttons) return; uint32_t diff = buttons ^ lastbuttons; for (i = 0; i < BUTTON_CNT; i++) { if (diff & (1 << btn_map[i])) { state = (buttons & (1 << btn_map[i])) ? PRESSED : RELEASED; emit_key(i, state); } } lastbuttons = buttons; }
void dispatch_buttons(uint32_t buttons) { uint8_t state; if (buttons == lastbuttons) return; uint32_t diff = buttons ^ lastbuttons; uint8_t key=KEY_INV; while (diff != 0) { if BTN_TO_KEY(POWER) else if BTN_TO_KEY(0) else if BTN_TO_KEY(1) else if BTN_TO_KEY(2) else if BTN_TO_KEY(3) else if BTN_TO_KEY(4) else if BTN_TO_KEY(5) else if BTN_TO_KEY(6) else if BTN_TO_KEY(7) else if BTN_TO_KEY(8) else if BTN_TO_KEY(9) else if BTN_TO_KEY(STAR) else if BTN_TO_KEY(HASH) else if BTN_TO_KEY(MENU) else if BTN_TO_KEY(LEFT_SB) else if BTN_TO_KEY(RIGHT_SB) else if BTN_TO_KEY(UP) else if BTN_TO_KEY(DOWN) else if BTN_TO_KEY(LEFT) else if BTN_TO_KEY(RIGHT) else if BTN_TO_KEY(OK) else { printf("\nunknown keycode: 0x%08x\n", diff); break; } emit_key(key, state); } lastbuttons = buttons; }