static void process_console_records(void) { INPUT_RECORD record; DWORD bytesRead; DWORD n = 0; if (FALSE == GetNumberOfConsoleInputEvents(SLw32_Hstdin, &n)) return; while (n > 0) { ReadConsoleInput(SLw32_Hstdin, &record, 1, &bytesRead); switch (record.EventType) { case KEY_EVENT: (void) process_key_event(&record.Event.KeyEvent); break; case MOUSE_EVENT: process_mouse_event(&record.Event.MouseEvent); break; case WINDOW_BUFFER_SIZE_EVENT: /* process_resize_records(&record.Event.WindowBufferSizeEvent); */ break; } n--; } }
void JoystickKeyboardController::process_event(const SDL_Event& event) { switch(event.type) { case SDL_KEYUP: case SDL_KEYDOWN: process_key_event(event.key); break; case SDL_JOYAXISMOTION: process_axis_event(event.jaxis); break; case SDL_JOYHATMOTION: process_hat_event(event.jhat); break; case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: process_button_event(event.jbutton); break; default: break; } }
co_rc_t console_widget_NT_t::loop() { DWORD r; if (!GetNumberOfConsoleInputEvents(input, &r)) return CO_RC(ERROR); if (r == 0) return CO_RC(OK); INPUT_RECORD i; ReadConsoleInput(input, &i, 1, &r); if (ctrl_exit) { window->detach(); return CO_RC(OK); } switch ( i.EventType ) { case KEY_EVENT: process_key_event(i.Event.KeyEvent); break; case FOCUS_EVENT: /* MSDN says this events should be ignored ??? */ process_focus_event(i.Event.FocusEvent); break; case MOUSE_EVENT: /* *TODO: must be enabled first also */ break; } return CO_RC(OK); }
gint scorearea_keypress_event (GtkWidget * widget, GdkEventKey * event) { if(!Denemo.keyboard_state_locked) { Denemo.keyboard_state |= (0xf & klock_mask (event->keyval)); Denemo.keyboard_state ^= llock_mask (event->keyval); // if((event->keyval==GDK_Alt_L)||(event->keyval==GDK_Alt_R)) // Denemo.keyboard_state |= CHORD_MASK; set_midi_in_status (); } //g_print("press Denemo %x state %x klock %x\n", Denemo.keyboard_state, event->state, klock_mask(event->keyval)); //g_debug("State eored %x\n", (lock_mask(event->keyval)^event->state)); if (divert_key_event && !isModifier (event) && divert_key_id == Denemo.project->id) { dnm_clean_event (event); *divert_key_event = event; //g_object_ref(event); FIXME do we need to keep it around? gtk_main_quit (); return TRUE; //*is* reached main loop exits to the caller of the loop when it next gains control } (void) process_key_event (event, perform_command); return TRUE; //I think this means do not run any other handlers after this. }
void read_event(int fd) { // {{{ if (fd < 0) return; struct input_event events[64]; size_t read_count = read(fd, events, sizeof(events)); if (read_count < sizeof(struct input_event)) { perror("Cannot read enough data from input device"); } for (size_t i = 0; i < (read_count / sizeof(struct input_event)); ++i) { if (EV_KEY == events[i].type) { process_key_event(events[i]); } } } // }}}
static void synaptics_ts_work_func(struct work_struct *work) { int ret=0; uint8_t buf[30];// 02h ~ 1Fh uint8_t i2c_addr = 0x02; int i = 0; static uint8_t touch_key_new = 0; static uint8_t touch_key_old = 0; uint8_t finger = 0; struct synaptics_ts_data *ts = container_of(work, struct synaptics_ts_data, work); ret = tsp_i2c_read( i2c_addr, buf, sizeof(buf)); if (ret <= 0) { printk("[TSP] i2c failed : ret=%d, ln=%d\n",ret, __LINE__); goto work_func_out; } finger = buf[0] & 0x07; fingerInfo[0].x = (buf[1] << 8) |buf[2]; fingerInfo[0].y = (buf[3] << 8) |buf[4]; fingerInfo[0].z = buf[5]/2; fingerInfo[0].id = (buf[6] >>4)& 0x0f; fingerInfo[1].x = (buf[7] << 8) |buf[8]; fingerInfo[1].y = (buf[9] << 8) |buf[10]; fingerInfo[1].z = buf[11]/2; fingerInfo[1].id = buf[6] & 0x0f; /* check key event*/ if(board_hw_revision >= 0x3) { touch_key_new = buf[0] & 0xf0; } else { touch_key_new = buf[29] & 0x0f; } //touch_key_new = buf[0] & 0x80; DPRINTK("[TSP] touch_key_new[%d],touch_key_old[%d]\n",touch_key_new,touch_key_old); if(touch_key_new != touch_key_old) { process_key_event(buf); touch_key_old = touch_key_new; } /* check touch event */ for ( i= 0; i<MAX_USING_FINGER_NUM; i++ ) { if(fingerInfo[i].id >=1) // press interrupt { if(i==0 && fingerInfo[1].status != 1) { if((fingerInfo[2].id != fingerInfo[0].id)&&(fingerInfo[2].id != 0))// no release with finger id change { // if(fingerInfo[1].id ==0) { input_report_abs(ts->input_dev, ABS_MT_POSITION_X, fingerInfo[2].x); input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, fingerInfo[2].y); input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0); input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, fingerInfo[2].z); input_mt_sync(ts->input_dev); input_sync(ts->input_dev); printk("[TSP] [%d] 01 (%d, %d, %x)\n", i, fingerInfo[2].x, fingerInfo[2].y, fingerInfo[2].z); fingerInfo[1].status = -1; } } else if(fingerInfo[2].id != 0) // check x or y jump with same finger id { if(ABS(fingerInfo[2].x,fingerInfo[0].x)>150) { input_report_abs(ts->input_dev, ABS_MT_POSITION_X, fingerInfo[2].x); input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, fingerInfo[2].y); input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0); input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, fingerInfo[2].z); input_mt_sync(ts->input_dev); input_sync(ts->input_dev); printk("[TSP] [%d] 02 (%d, %d, %x)\n", i, fingerInfo[2].x, fingerInfo[2].y, fingerInfo[2].z); fingerInfo[1].status = -1; } else if(ABS(fingerInfo[2].y,fingerInfo[0].y)>150) { input_report_abs(ts->input_dev, ABS_MT_POSITION_X, fingerInfo[2].x); input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, fingerInfo[2].y); input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0); input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, fingerInfo[2].z); input_mt_sync(ts->input_dev); input_sync(ts->input_dev); printk("[TSP] [%d] 03 (%d, %d, %x)\n", i, fingerInfo[2].x, fingerInfo[2].y, fingerInfo[2].z); fingerInfo[1].status = -1; } else // no jump { if(fingerInfo[i].status != -2) // force release fingerInfo[i].status = 1; else fingerInfo[i].status = -2; } } else // single touch with normal condition { if(fingerInfo[i].status != -2) // force release fingerInfo[i].status = 1; else fingerInfo[i].status = -2; } } else { if(fingerInfo[i].status != -2) // force release fingerInfo[i].status = 1; else fingerInfo[i].status = -2; } } else if(fingerInfo[i].id ==0) // release interrupt (only first finger) { if(fingerInfo[i].status == 1 || fingerInfo[i].status == -3) // prev status is press fingerInfo[i].status = 0; else if(fingerInfo[i].status == 0 || fingerInfo[i].status == -2) // release already or force release fingerInfo[i].status = -1; } if(fingerInfo[i].status < 0) continue; input_report_abs(ts->input_dev, ABS_MT_POSITION_X, fingerInfo[i].x); input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, fingerInfo[i].y); input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, fingerInfo[i].status); input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, fingerInfo[i].z); input_mt_sync(ts->input_dev); printk("[TSP1] [%d] %d (%d, %d, %x) %x\n", i, fingerInfo[i].id, fingerInfo[i].x, fingerInfo[i].y, fingerInfo[i].z, fingerInfo[i].status); } input_sync(ts->input_dev); fingerInfo[2].x = fingerInfo[0].x; fingerInfo[2].y = fingerInfo[0].y; fingerInfo[2].z = fingerInfo[0].z; fingerInfo[2].id = fingerInfo[0].id; work_func_out: ts->use_irq = 1; //psyke83: hack to workaround bug in new workqueue behaviour if (ts->use_irq) { enable_irq(ts->client->irq); } }
internal int process_event(struct sdl_event_context *event_ctx, struct human_input *input) { switch (event_ctx->event->type) { case SDL_QUIT: return 1; break; case SDL_KEYUP: case SDL_KEYDOWN: process_key_event(event_ctx, input); break; case SDL_WINDOWEVENT: if (event_ctx->event->window.windowID != event_ctx->win_id) { /* not our event? */ break; } switch (event_ctx->event->window.event) { case SDL_WINDOWEVENT_NONE: /* (docs say never used) */ break; case SDL_WINDOWEVENT_SHOWN: break; case SDL_WINDOWEVENT_HIDDEN: break; case SDL_WINDOWEVENT_EXPOSED: /* window should be redrawn */ break; case SDL_WINDOWEVENT_MOVED: /* window moved to data1, data2 */ break; case SDL_WINDOWEVENT_RESIZED: /* window resized to data1 x data2 */ /* always preceded by */ /* SDL_WINDOWEVENT_SIZE_CHANGED */ sdl_resize_texture_buf(event_ctx->window, event_ctx->renderer, event_ctx->texture_buf); break; case SDL_WINDOWEVENT_SIZE_CHANGED: /* either as a result of an API call */ /* or through the system or user action */ /* this event is followed by */ /* SDL_WINDOWEVENT_RESIZED if the size was */ /* changed by an external event, (user or the window manager) */ break; case SDL_WINDOWEVENT_MINIMIZED: break; case SDL_WINDOWEVENT_MAXIMIZED: break; case SDL_WINDOWEVENT_RESTORED: break; case SDL_WINDOWEVENT_ENTER: /* window has gained mouse focus */ break; case SDL_WINDOWEVENT_LEAVE: /* window has lost mouse focus */ break; case SDL_WINDOWEVENT_FOCUS_GAINED: /* window has gained keyboard focus */ break; case SDL_WINDOWEVENT_FOCUS_LOST: /* window has lost keyboard focus */ break; case SDL_WINDOWEVENT_CLOSE: /* the window manager requests close */ event_ctx->event->type = SDL_QUIT; SDL_PushEvent(event_ctx->event); break; default: /* (how did we get here? */ break; } break; default: break; } return 0; }