Changes in / [f991b6b:0a549cc] in mainline
- Files:
-
- 5 added
- 20 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/arch/amd64/Makefile.inc
rf991b6b r0a549cc 28 28 29 29 RD_SRVS_ESSENTIAL += \ 30 $(USPACE_PATH)/srv/hw/char/i8042/i8042 \ 30 31 $(USPACE_PATH)/srv/hw/irc/apic/apic \ 31 32 $(USPACE_PATH)/srv/hw/irc/i8259/i8259 … … 38 39 bus/pci/pciintel \ 39 40 bus/isa \ 40 char/i8042 \41 41 char/ns8250 \ 42 char/ps2mouse \43 char/xtkbd \44 42 bus/usb/ehci\ 45 43 bus/usb/ohci \ -
boot/arch/ia64/Makefile.inc
rf991b6b r0a549cc 37 37 RD_SRVS_NON_ESSENTIAL += 38 38 39 RD_SRVS_ESSENTIAL += 39 RD_SRVS_ESSENTIAL += \ 40 $(USPACE_PATH)/srv/hw/char/i8042/i8042 40 41 41 42 SOURCES = \ -
uspace/Makefile
rf991b6b r0a549cc 93 93 srv/hid/fb \ 94 94 srv/hid/input \ 95 srv/hw/char/i8042 \ 95 96 srv/hw/char/s3c24xx_uart \ 96 97 srv/net/il/arp \ … … 104 105 drv/infrastructure/root \ 105 106 drv/infrastructure/rootvirt \ 106 drv/char/i8042 \107 drv/char/ps2mouse \108 drv/char/xtkbd \109 107 drv/test/test1 \ 110 108 drv/test/test2 \ -
uspace/app/init/init.c
rf991b6b r0a549cc 302 302 spawn("/srv/obio"); 303 303 srv_start("/srv/cuda_adb"); 304 srv_start("/srv/i8042"); 304 305 srv_start("/srv/s3c24ser"); 305 306 srv_start("/srv/s3c24ts"); -
uspace/drv/bus/isa/isa.c
rf991b6b r0a549cc 52 52 #include <dirent.h> 53 53 #include <fcntl.h> 54 #include <ipc/irc.h>55 #include <ipc/services.h>56 #include <sysinfo.h>57 #include <ns.h>58 54 #include <sys/stat.h> 59 55 #include <ipc/irc.h> … … 113 109 sysarg_t apic; 114 110 sysarg_t i8259; 115 111 116 112 async_sess_t *irc_sess = NULL; 117 113 118 114 if (((sysinfo_get_value("apic", &apic) == EOK) && (apic)) 119 115 || ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259))) { … … 121 117 SERVICE_IRC, 0, 0); 122 118 } 123 119 124 120 if (!irc_sess) 125 121 return false; 126 122 127 123 assert(isa_fun); 128 124 const hw_resource_list_t *res = &isa_fun->hw_resources; … … 131 127 if (res->resources[i].type == INTERRUPT) { 132 128 const int irq = res->resources[i].res.interrupt.irq; 133 129 134 130 async_exch_t *exch = async_exchange_begin(irc_sess); 135 131 const int rc = 136 132 async_req_1_0(exch, IRC_ENABLE_INTERRUPT, irq); 137 133 async_exchange_end(exch); 138 134 139 135 if (rc != EOK) { 140 136 async_hangup(irc_sess); … … 143 139 } 144 140 } 145 141 146 142 async_hangup(irc_sess); 147 143 return true; … … 401 397 402 398 val = skip_spaces(val); 403 irq = (int)strtol(val, &end, 10);399 irq = (int)strtol(val, &end, 0x10); 404 400 405 401 if (val != end) -
uspace/drv/bus/isa/isa.dev
rf991b6b r0a549cc 9 9 io_range 2f8 8 10 10 11 i8042:12 match 100 isa/ i804211 keyboard: 12 match 100 isa/keyboard 13 13 irq 1 14 irq 12 15 io_range 060 5 16 14 io_range 060 10 17 15 18 16 ne2k: -
uspace/drv/bus/usb/usbhid/mouse/mousedev.c
rf991b6b r0a549cc 52 52 #include "../usbhid.h" 53 53 54 /** Number of simulated arrow-key presses for singel wheel step. */ 55 #define ARROWS_PER_SINGLE_WHEEL 3 56 54 57 #define NAME "mouse" 55 58 … … 66 69 67 70 const char *HID_MOUSE_FUN_NAME = "mouse"; 71 const char *HID_MOUSE_WHEEL_FUN_NAME = "mouse-wheel"; 68 72 const char *HID_MOUSE_CATEGORY = "mouse"; 73 const char *HID_MOUSE_WHEEL_CATEGORY = "keyboard"; 69 74 70 75 /** Default idle rate for mouses. */ … … 121 126 122 127 usb_log_debug("%s: fun->name: %s\n", __FUNCTION__, fun->name); 123 usb_log_debug("%s: mouse_sess: %p\n", 124 __FUNCTION__, mouse_dev->mouse_sess); 128 usb_log_debug("%s: mouse_sess: %p, wheel_sess: %p\n", 129 __FUNCTION__, mouse_dev->mouse_sess, mouse_dev->wheel_sess); 130 131 async_sess_t **sess_ptr = (fun == mouse_dev->mouse_fun) ? 132 &mouse_dev->mouse_sess : &mouse_dev->wheel_sess; 125 133 126 134 async_sess_t *sess = 127 135 async_callback_receive_start(EXCHANGE_SERIALIZE, icall); 128 136 if (sess != NULL) { 129 if ( mouse_dev->mouse_sess== NULL) {130 mouse_dev->mouse_sess= sess;137 if (*sess_ptr == NULL) { 138 *sess_ptr = sess; 131 139 usb_log_debug("Console session to %s set ok (%p).\n", 132 140 fun->name, sess); … … 136 144 fun->name); 137 145 async_answer_0(icallid, ELIMIT); 138 async_hangup(sess);139 146 } 140 147 } else { … … 143 150 } 144 151 } 145 /*----------------------------------------------------------------------------*/ 152 153 /*----------------------------------------------------------------------------*/ 154 155 static void usb_mouse_send_wheel(const usb_mouse_t *mouse_dev, int wheel) 156 { 157 unsigned int key = (wheel > 0) ? KC_UP : KC_DOWN; 158 159 if (mouse_dev->wheel_sess == NULL) { 160 usb_log_warning( 161 "Connection to console not ready, wheel roll discarded.\n"); 162 return; 163 } 164 165 const unsigned count = 166 ((wheel < 0) ? -wheel : wheel) * ARROWS_PER_SINGLE_WHEEL; 167 for (unsigned i = 0; i < count; i++) { 168 /* Send arrow press and release. */ 169 usb_log_debug2("Sending key %d to the console\n", key); 170 171 async_exch_t *exch = async_exchange_begin(mouse_dev->wheel_sess); 172 173 async_msg_4(exch, KBDEV_EVENT, KEY_PRESS, key, 0, 0); 174 async_msg_4(exch, KBDEV_EVENT, KEY_RELEASE, key, 0, 0); 175 176 async_exchange_end(exch); 177 } 178 } 179 180 /*----------------------------------------------------------------------------*/ 181 146 182 static int get_mouse_axis_move_value(uint8_t rid, usb_hid_report_t *report, 147 183 int32_t usage) … … 167 203 return result; 168 204 } 169 /*----------------------------------------------------------------------------*/ 205 170 206 static bool usb_mouse_process_report(usb_hid_dev_t *hid_dev, 171 207 usb_mouse_t *mouse_dev) … … 185 221 &hid_dev->report, USB_HIDUT_USAGE_GENERIC_DESKTOP_WHEEL); 186 222 187 if ( shift_x || shift_y || wheel) {223 if ((shift_x != 0) || (shift_y != 0)) { 188 224 async_exch_t *exch = 189 225 async_exchange_begin(mouse_dev->mouse_sess); 190 226 if (exch != NULL) { 191 async_msg_3(exch, MOUSEEV_MOVE_EVENT, 192 shift_x, shift_y, wheel); 227 async_req_2_0(exch, MOUSEEV_MOVE_EVENT, shift_x, shift_y); 193 228 async_exchange_end(exch); 194 229 } 195 230 } 231 232 if (wheel != 0) 233 usb_mouse_send_wheel(mouse_dev, wheel); 196 234 197 235 /* Buttons */ … … 303 341 mouse->mouse_fun = fun; 304 342 343 /* 344 * Special function for acting as keyboard (wheel) 345 */ 346 usb_log_debug("Creating DDF function %s...\n", 347 HID_MOUSE_WHEEL_FUN_NAME); 348 fun = ddf_fun_create(hid_dev->usb_dev->ddf_dev, fun_exposed, 349 HID_MOUSE_WHEEL_FUN_NAME); 350 if (fun == NULL) { 351 usb_log_error("Could not create DDF function node `%s'.\n", 352 HID_MOUSE_WHEEL_FUN_NAME); 353 FUN_UNBIND_DESTROY(mouse->mouse_fun); 354 mouse->mouse_fun = NULL; 355 return ENOMEM; 356 } 357 358 /* 359 * Store the initialized HID device and HID ops 360 * to the DDF function. 361 */ 362 fun->ops = &mouse->ops; 363 fun->driver_data = mouse; 364 365 rc = ddf_fun_bind(fun); 366 if (rc != EOK) { 367 usb_log_error("Could not bind DDF function `%s': %s.\n", 368 fun->name, str_error(rc)); 369 FUN_UNBIND_DESTROY(mouse->mouse_fun); 370 mouse->mouse_fun = NULL; 371 372 fun->driver_data = NULL; 373 ddf_fun_destroy(fun); 374 return rc; 375 } 376 377 usb_log_debug("Adding DDF function to category %s...\n", 378 HID_MOUSE_WHEEL_CATEGORY); 379 rc = ddf_fun_add_to_category(fun, HID_MOUSE_WHEEL_CATEGORY); 380 if (rc != EOK) { 381 usb_log_error( 382 "Could not add DDF function to category %s: %s.\n", 383 HID_MOUSE_WHEEL_CATEGORY, str_error(rc)); 384 385 FUN_UNBIND_DESTROY(mouse->mouse_fun); 386 mouse->mouse_fun = NULL; 387 FUN_UNBIND_DESTROY(fun); 388 return rc; 389 } 390 mouse->wheel_fun = fun; 391 305 392 return EOK; 306 393 } 307 /*----------------------------------------------------------------------------*/ 394 395 /*----------------------------------------------------------------------------*/ 396 308 397 /** Get highest index of a button mentioned in given report. 309 398 * … … 427 516 } 428 517 518 if (mouse_dev->wheel_sess != NULL) { 519 const int ret = async_hangup(mouse_dev->wheel_sess); 520 if (ret != EOK) 521 usb_log_warning("Failed to hang up wheel session: " 522 "%p, %s.\n", mouse_dev->wheel_sess, str_error(ret)); 523 } 524 429 525 FUN_UNBIND_DESTROY(mouse_dev->mouse_fun); 526 FUN_UNBIND_DESTROY(mouse_dev->wheel_fun); 430 527 431 528 free(mouse_dev->buttons); -
uspace/drv/bus/usb/usbhid/mouse/mousedev.h
rf991b6b r0a549cc 48 48 /** IPC session to console (consumer). */ 49 49 async_sess_t *mouse_sess; 50 async_sess_t *wheel_sess; 50 51 51 52 /* Mouse buttons statuses. */ … … 56 57 /* DDF mouse function */ 57 58 ddf_fun_t *mouse_fun; 59 /* DDF mouse function */ 60 ddf_fun_t *wheel_fun; 58 61 } usb_mouse_t; 59 62 -
uspace/srv/hid/input/Makefile
rf991b6b r0a549cc 43 43 port/adb_mouse.c \ 44 44 port/chardev.c \ 45 port/chardev_mouse.c \ 45 46 port/gxemul.c \ 46 47 port/msim.c \ … … 51 52 proto/adb.c \ 52 53 proto/mousedev.c \ 54 proto/ps2.c \ 53 55 ctl/apple.c \ 54 56 ctl/gxe_fb.c \ -
uspace/srv/hid/input/generic/input.c
rf991b6b r0a549cc 172 172 173 173 /** Mouse pointer has moved. */ 174 void mouse_push_event_move(mouse_dev_t *mdev, int dx, int dy , int dz)174 void mouse_push_event_move(mouse_dev_t *mdev, int dx, int dy) 175 175 { 176 176 async_exch_t *exch = async_exchange_begin(client_sess); 177 if (dx || dy) 178 async_msg_2(exch, INPUT_EVENT_MOVE, dx, dy); 179 if (dz) { 180 // TODO: Implement proper wheel support 181 keycode_t code = dz > 0 ? KC_UP : KC_DOWN; 182 for (int i = 0; i < 3; ++i) { 183 async_msg_4(exch, INPUT_EVENT_KEY, KEY_PRESS, code, 0, 0); 184 } 185 async_msg_4(exch, INPUT_EVENT_KEY, KEY_RELEASE, code, 0, 0); 186 } 177 async_msg_2(exch, INPUT_EVENT_MOVE, dx, dy); 187 178 async_exchange_end(exch); 188 179 } … … 406 397 * them automatically. 407 398 */ 399 #if defined(UARCH_amd64) 400 kbd_add_dev(&chardev_port, &pc_ctl); 401 #endif 408 402 #if defined(UARCH_arm32) && defined(MACHINE_gta02) 409 403 kbd_add_dev(&chardev_port, &stty_ctl); … … 417 411 #if defined(UARCH_arm32) && defined(MACHINE_integratorcp) 418 412 kbd_add_dev(&pl050_port, &pc_ctl); 413 #endif 414 #if defined(UARCH_ia32) 415 kbd_add_dev(&chardev_port, &pc_ctl); 416 #endif 417 #if defined(MACHINE_i460GX) 418 kbd_add_dev(&chardev_port, &pc_ctl); 419 419 #endif 420 420 #if defined(MACHINE_ski) … … 450 450 * them automatically. 451 451 */ 452 #if defined(UARCH_amd64) 453 mouse_add_dev(&chardev_mouse_port, &ps2_proto); 454 #endif 455 #if defined(UARCH_ia32) 456 mouse_add_dev(&chardev_mouse_port, &ps2_proto); 457 #endif 458 #if defined(MACHINE_i460GX) 459 mouse_add_dev(&chardev_mouse_port, &ps2_proto); 460 #endif 452 461 #if defined(UARCH_ppc32) 453 462 mouse_add_dev(&adb_mouse_port, &adb_proto); -
uspace/srv/hid/input/include/mouse.h
rf991b6b r0a549cc 62 62 63 63 extern void mouse_push_data(mouse_dev_t *, sysarg_t); 64 extern void mouse_push_event_move(mouse_dev_t *, int, int , int);64 extern void mouse_push_event_move(mouse_dev_t *, int, int); 65 65 extern void mouse_push_event_button(mouse_dev_t *, int, int); 66 66 -
uspace/srv/hid/input/include/mouse_proto.h
rf991b6b r0a549cc 48 48 49 49 extern mouse_proto_ops_t adb_proto; 50 extern mouse_proto_ops_t ps2_proto; 50 51 extern mouse_proto_ops_t mousedev_proto; 51 52 -
uspace/srv/hid/input/port/chardev.c
rf991b6b r0a549cc 63 63 /** List of devices to try connecting to. */ 64 64 static const char *in_devs[] = { 65 "char/ps2a", 65 66 "char/s3c24ser" 66 67 }; -
uspace/srv/hid/input/proto/adb.c
rf991b6b r0a549cc 82 82 83 83 if (dx != 0 || dy != 0) 84 mouse_push_event_move(mouse_dev, dx, dy , 0);84 mouse_push_event_move(mouse_dev, dx, dy); 85 85 } 86 86 -
uspace/srv/hid/input/proto/mousedev.c
rf991b6b r0a549cc 91 91 switch (IPC_GET_IMETHOD(call)) { 92 92 case MOUSEEV_MOVE_EVENT: 93 mouse_push_event_move(mousedev->mouse_dev, 94 IPC_GET_ARG1(call), IPC_GET_ARG2(call), 95 IPC_GET_ARG3(call)); 93 mouse_push_event_move(mousedev->mouse_dev, IPC_GET_ARG1(call), 94 IPC_GET_ARG2(call)); 96 95 retval = EOK; 97 96 break; 98 97 case MOUSEEV_BUTTON_EVENT: 99 mouse_push_event_button(mousedev->mouse_dev, 100 IPC_GET_ARG 1(call), IPC_GET_ARG2(call));98 mouse_push_event_button(mousedev->mouse_dev, IPC_GET_ARG1(call), 99 IPC_GET_ARG2(call)); 101 100 retval = EOK; 102 101 break;
Note:
See TracChangeset
for help on using the changeset viewer.