Changeset 5da7199 in mainline for uspace/drv
- Timestamp:
- 2011-09-09T17:18:06Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3781092, b7c33b0
- Parents:
- c69646f8
- Location:
- uspace/drv/bus/usb/usbhid
- Files:
-
- 5 edited
-
kbd/kbddev.c (modified) (9 diffs)
-
kbd/kbddev.h (modified) (3 diffs)
-
mouse/mousedev.c (modified) (11 diffs)
-
mouse/mousedev.h (modified) (2 diffs)
-
multimedia/multimedia.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbhid/kbd/kbddev.c
rc69646f8 r5da7199 43 43 #include <ipc/kbdev.h> 44 44 #include <async.h> 45 #include <async_obsolete.h>46 45 #include <fibril.h> 47 46 #include <fibril_synch.h> … … 70 69 71 70 #include "../usbhid.h" 72 73 // FIXME: remove this header74 #include <abi/ipc/methods.h>75 71 76 72 /*----------------------------------------------------------------------------*/ … … 167 163 * 168 164 * Currently recognizes only one method (IPC_M_CONNECT_TO_ME), in which case it 169 * assumes the caller is the console and thus it stores IPC phone to it for165 * assumes the caller is the console and thus it stores IPC session to it for 170 166 * later use by the driver to notify about key events. 171 167 * … … 178 174 { 179 175 sysarg_t method = IPC_GET_IMETHOD(*icall); 180 int callback; 181 182 usb_kbd_t *kbd_dev = (usb_kbd_t *)fun->driver_data; 176 177 usb_kbd_t *kbd_dev = (usb_kbd_t *) fun->driver_data; 183 178 if (kbd_dev == NULL) { 184 179 usb_log_debug("default_connection_handler: " … … 187 182 return; 188 183 } 189 190 switch (method) { 191 case IPC_M_CONNECT_TO_ME: 192 callback = IPC_GET_ARG5(*icall); 193 194 if (kbd_dev->console_phone != -1) { 184 185 async_sess_t *sess = 186 async_callback_receive_start(EXCHANGE_SERIALIZE, icall); 187 if (sess != NULL) { 188 if (kbd_dev->console_sess == NULL) { 189 kbd_dev->console_sess = sess; 190 usb_log_debug("default_connection_handler: OK\n"); 191 async_answer_0(icallid, EOK); 192 } else { 195 193 usb_log_debug("default_connection_handler: " 196 "console phonealready set\n");194 "console session already set\n"); 197 195 async_answer_0(icallid, ELIMIT); 198 return; 199 } 200 201 kbd_dev->console_phone = callback; 202 203 usb_log_debug("default_connection_handler: OK\n"); 204 async_answer_0(icallid, EOK); 205 break; 206 case KBDEV_SET_IND: 207 kbd_dev->mods = IPC_GET_ARG1(*icall); 208 usb_kbd_set_led(kbd_dev->hid_dev, kbd_dev); 209 async_answer_0(icallid, EOK); 210 break; 211 default: 212 usb_log_debug("default_connection_handler: Wrong function.\n"); 213 async_answer_0(icallid, EINVAL); 214 break; 196 } 197 } else { 198 switch (method) { 199 case KBDEV_SET_IND: 200 kbd_dev->mods = IPC_GET_ARG1(*icall); 201 usb_kbd_set_led(kbd_dev->hid_dev, kbd_dev); 202 async_answer_0(icallid, EOK); 203 break; 204 default: 205 usb_log_debug("default_connection_handler: Wrong function.\n"); 206 async_answer_0(icallid, EINVAL); 207 break; 208 } 215 209 } 216 210 } … … 301 295 { 302 296 usb_log_debug2("Sending kbdev event %d/%d to the console\n", type, key); 303 if (kbd_dev->console_ phone < 0) {297 if (kbd_dev->console_sess == NULL) { 304 298 usb_log_warning( 305 299 "Connection to console not ready, key discarded.\n"); … … 307 301 } 308 302 309 async_obsolete_msg_2(kbd_dev->console_phone, KBDEV_EVENT, type, key); 303 async_exch_t *exch = async_exchange_begin(kbd_dev->console_sess); 304 async_msg_2(exch, KBDEV_EVENT, type, key); 305 async_exchange_end(exch); 310 306 } 311 307 … … 510 506 } 511 507 512 kbd_dev->console_ phone = -1;508 kbd_dev->console_sess = NULL; 513 509 kbd_dev->initialized = USB_KBD_STATUS_UNINITIALIZED; 514 510 … … 785 781 } 786 782 787 // hangup phoneto the console788 async_ obsolete_hangup(kbd_dev->console_phone);783 // hangup session to the console 784 async_hangup(kbd_dev->console_sess); 789 785 790 786 if (kbd_dev->repeat_mtx != NULL) { -
uspace/drv/bus/usb/usbhid/kbd/kbddev.h
rc69646f8 r5da7199 38 38 39 39 #include <stdint.h> 40 40 #include <async.h> 41 41 #include <fibril_synch.h> 42 43 42 #include <usb/hid/hid.h> 44 43 #include <usb/hid/hidparser.h> … … 58 57 * data, such as currently pressed keys, modifiers and lock keys. 59 58 * 60 * Also holds a IPC phoneto the console (since there is now no other way to59 * Also holds a IPC session to the console (since there is now no other way to 61 60 * communicate with it). 62 61 * … … 83 82 unsigned lock_keys; 84 83 85 /** IPC phoneto the console device (for sending key events). */86 int console_phone;84 /** IPC session to the console device (for sending key events). */ 85 async_sess_t *console_sess; 87 86 88 87 /** @todo What is this actually? */ -
uspace/drv/bus/usb/usbhid/mouse/mousedev.c
rc69646f8 r5da7199 42 42 #include <errno.h> 43 43 #include <async.h> 44 #include <async_obsolete.h>45 44 #include <str_error.h> 46 45 #include <ipc/mouseev.h> … … 56 55 #define ARROWS_PER_SINGLE_WHEEL 3 57 56 58 // FIXME: remove this header 59 #include <abi/ipc/methods.h> 60 61 #define NAME "mouse" 57 #define NAME "mouse" 62 58 63 59 /*----------------------------------------------------------------------------*/ … … 128 124 ipc_callid_t icallid, ipc_call_t *icall) 129 125 { 130 sysarg_t method = IPC_GET_IMETHOD(*icall); 131 132 usb_mouse_t *mouse_dev = (usb_mouse_t *)fun->driver_data; 126 usb_mouse_t *mouse_dev = (usb_mouse_t *) fun->driver_data; 133 127 134 128 if (mouse_dev == NULL) { … … 141 135 usb_log_debug("default_connection_handler: fun->name: %s\n", 142 136 fun->name); 143 usb_log_debug("default_connection_handler: mouse_phone: %d, wheel " 144 "phone: %d\n", mouse_dev->mouse_phone, mouse_dev->wheel_phone); 145 146 int *phone = (str_cmp(fun->name, HID_MOUSE_FUN_NAME) == 0) 147 ? &mouse_dev->mouse_phone : &mouse_dev->wheel_phone; 148 149 if (method == IPC_M_CONNECT_TO_ME) { 150 int callback = IPC_GET_ARG5(*icall); 151 152 if (*phone != -1) { 137 usb_log_debug("default_connection_handler: mouse_sess: %p, " 138 "wheel_sess: %p\n", mouse_dev->mouse_sess, mouse_dev->wheel_sess); 139 140 async_sess_t **sess_ptr = 141 (str_cmp(fun->name, HID_MOUSE_FUN_NAME) == 0) ? 142 &mouse_dev->mouse_sess : &mouse_dev->wheel_sess; 143 144 async_sess_t *sess = 145 async_callback_receive_start(EXCHANGE_SERIALIZE, icall); 146 if (sess != NULL) { 147 if (*sess_ptr == NULL) { 148 *sess_ptr = sess; 149 usb_log_debug("Console session to mouse set ok (%p).\n", 150 sess); 151 async_answer_0(icallid, EOK); 152 } else { 153 153 usb_log_debug("default_connection_handler: Console " 154 " phoneto mouse already set.\n");154 "session to mouse already set.\n"); 155 155 async_answer_0(icallid, ELIMIT); 156 return;157 156 } 158 159 *phone = callback; 160 usb_log_debug("Console phone to mouse set ok (%d).\n", *phone); 161 async_answer_0(icallid, EOK); 162 return; 163 } 164 165 usb_log_debug("default_connection_handler: Invalid function.\n"); 166 async_answer_0(icallid, EINVAL); 157 } else { 158 usb_log_debug("default_connection_handler: Invalid function.\n"); 159 async_answer_0(icallid, EINVAL); 160 } 167 161 } 168 162 … … 175 169 return NULL; 176 170 } 177 mouse->mouse_ phone = -1;178 mouse->wheel_ phone = -1;171 mouse->mouse_sess = NULL; 172 mouse->wheel_sess = NULL; 179 173 180 174 return mouse; … … 187 181 assert(mouse_dev != NULL); 188 182 189 // hangup phone to the console 190 if (mouse_dev->mouse_phone >= 0) { 191 async_obsolete_hangup(mouse_dev->mouse_phone); 192 } 193 194 if (mouse_dev->wheel_phone >= 0) { 195 async_obsolete_hangup(mouse_dev->wheel_phone); 196 } 183 // hangup session to the console 184 if (mouse_dev->mouse_sess != NULL) 185 async_hangup(mouse_dev->mouse_sess); 186 187 if (mouse_dev->wheel_sess != NULL) 188 async_hangup(mouse_dev->wheel_sess); 197 189 } 198 190 … … 203 195 unsigned int key = (wheel > 0) ? KC_UP : KC_DOWN; 204 196 205 if (mouse_dev->wheel_ phone < 0) {197 if (mouse_dev->wheel_sess == NULL) { 206 198 usb_log_warning( 207 199 "Connection to console not ready, wheel roll discarded.\n"); … … 215 207 /* Send arrow press and release. */ 216 208 usb_log_debug2("Sending key %d to the console\n", key); 217 async_obsolete_msg_4(mouse_dev->wheel_phone, KBDEV_EVENT, 218 KEY_PRESS, key, 0, 0); 219 async_obsolete_msg_4(mouse_dev->wheel_phone, KBDEV_EVENT, 220 KEY_RELEASE, key, 0, 0); 209 210 async_exch_t *exch = async_exchange_begin(mouse_dev->wheel_sess); 211 212 async_msg_4(exch, KBDEV_EVENT, KEY_PRESS, key, 0, 0); 213 async_msg_4(exch, KBDEV_EVENT, KEY_RELEASE, key, 0, 0); 214 215 async_exchange_end(exch); 221 216 } 222 217 } … … 253 248 assert(mouse_dev != NULL); 254 249 255 if (mouse_dev->mouse_ phone < 0) {256 usb_log_warning(NAME " No console phone.\n");250 if (mouse_dev->mouse_sess == NULL) { 251 usb_log_warning(NAME " No console session.\n"); 257 252 return true; 258 253 } … … 266 261 267 262 if ((shift_x != 0) || (shift_y != 0)) { 268 async_obsolete_req_2_0(mouse_dev->mouse_phone, 269 MOUSEEV_MOVE_EVENT, shift_x, shift_y); 270 } 271 272 if (wheel != 0) { 263 async_exch_t *exch = async_exchange_begin(mouse_dev->mouse_sess); 264 async_req_2_0(exch, MOUSEEV_MOVE_EVENT, shift_x, shift_y); 265 async_exchange_end(exch); 266 } 267 268 if (wheel != 0) 273 269 usb_mouse_send_wheel(mouse_dev, wheel); 274 }275 270 276 271 /* … … 292 287 if (mouse_dev->buttons[field->usage - field->usage_minimum] == 0 293 288 && field->value != 0) { 294 async_obsolete_req_2_0(mouse_dev->mouse_phone, 295 MOUSEEV_BUTTON_EVENT, field->usage, 1); 289 async_exch_t *exch = 290 async_exchange_begin(mouse_dev->mouse_sess); 291 async_req_2_0(exch, MOUSEEV_BUTTON_EVENT, field->usage, 1); 292 async_exchange_end(exch); 293 296 294 mouse_dev->buttons[field->usage - field->usage_minimum] 297 295 = field->value; 298 296 } else if (mouse_dev->buttons[field->usage - field->usage_minimum] != 0 299 297 && field->value == 0) { 300 async_obsolete_req_2_0(mouse_dev->mouse_phone, 301 MOUSEEV_BUTTON_EVENT, field->usage, 0); 298 async_exch_t *exch = 299 async_exchange_begin(mouse_dev->mouse_sess); 300 async_req_2_0(exch, MOUSEEV_BUTTON_EVENT, field->usage, 0); 301 async_exchange_end(exch); 302 302 303 mouse_dev->buttons[field->usage - field->usage_minimum] = 303 304 field->value; -
uspace/drv/bus/usb/usbhid/mouse/mousedev.h
rc69646f8 r5da7199 38 38 39 39 #include <usb/dev/driver.h> 40 #include <async.h> 40 41 41 42 struct usb_hid_dev; … … 45 46 /** Container for USB mouse device. */ 46 47 typedef struct { 47 /** IPC phoneto console (consumer). */48 int mouse_phone;49 int wheel_phone;48 /** IPC session to console (consumer). */ 49 async_sess_t *mouse_sess; 50 async_sess_t *wheel_sess; 50 51 51 52 int32_t *buttons; -
uspace/drv/bus/usb/usbhid/multimedia/multimedia.c
rc69646f8 r5da7199 47 47 #include <errno.h> 48 48 #include <async.h> 49 #include <async_obsolete.h>50 49 #include <str_error.h> 51 50 … … 53 52 #include <io/console.h> 54 53 55 // FIXME: remove this header 56 #include <abi/ipc/methods.h> 57 58 #define NAME "multimedia-keys" 54 #define NAME "multimedia-keys" 59 55 60 56 /*----------------------------------------------------------------------------*/ … … 69 65 /** Count of stored keys (i.e. number of keys in the report). */ 70 66 //size_t key_count; 71 /** IPC phoneto the console device (for sending key events). */72 int console_phone;67 /** IPC session to the console device (for sending key events). */ 68 async_sess_t *console_sess; 73 69 } usb_multimedia_t; 74 70 … … 79 75 * 80 76 * Currently recognizes only one method (IPC_M_CONNECT_TO_ME), in which case it 81 * assumes the caller is the console and thus it stores IPC phone to it for77 * assumes the caller is the console and thus it stores IPC session to it for 82 78 * later use by the driver to notify about key events. 83 79 * … … 91 87 usb_log_debug(NAME " default_connection_handler()\n"); 92 88 93 sysarg_t method = IPC_GET_IMETHOD(*icall);94 95 89 usb_multimedia_t *multim_dev = (usb_multimedia_t *)fun->driver_data; 96 90 … … 99 93 return; 100 94 } 101 102 if (method == IPC_M_CONNECT_TO_ME) { 103 int callback = IPC_GET_ARG5(*icall); 104 105 if (multim_dev->console_phone != -1) { 95 96 async_sess_t *sess = 97 async_callback_receive_start(EXCHANGE_SERIALIZE, icall); 98 if (sess != NULL) { 99 if (multim_dev->console_sess == NULL) { 100 multim_dev->console_sess = sess; 101 usb_log_debug(NAME " Saved session to console: %p\n", 102 sess); 103 async_answer_0(icallid, EOK); 104 } else 106 105 async_answer_0(icallid, ELIMIT); 107 return; 108 } 109 110 multim_dev->console_phone = callback; 111 usb_log_debug(NAME " Saved phone to console: %d\n", callback); 112 async_answer_0(icallid, EOK); 113 return; 114 } 115 116 async_answer_0(icallid, EINVAL); 106 } else 107 async_answer_0(icallid, EINVAL); 117 108 } 118 109 … … 155 146 156 147 usb_log_debug2(NAME " Sending key %d to the console\n", ev.key); 157 if (multim_dev->console_ phone < 0) {148 if (multim_dev->console_sess == NULL) { 158 149 usb_log_warning( 159 150 "Connection to console not ready, key discarded.\n"); … … 161 152 } 162 153 163 async_obsolete_msg_4(multim_dev->console_phone, KBDEV_EVENT, ev.type, ev.key, 164 ev.mods, ev.c); 154 async_exch_t *exch = async_exchange_begin(multim_dev->console_sess); 155 async_msg_4(exch, KBDEV_EVENT, ev.type, ev.key, ev.mods, ev.c); 156 async_exchange_end(exch); 165 157 } 166 158 … … 222 214 } 223 215 224 multim_dev->console_ phone = -1;216 multim_dev->console_sess = NULL; 225 217 226 218 /*! @todo Autorepeat */ … … 250 242 if (data != NULL) { 251 243 usb_multimedia_t *multim_dev = (usb_multimedia_t *)data; 252 // hangup phoneto the console253 async_ obsolete_hangup(multim_dev->console_phone);244 // hangup session to the console 245 async_hangup(multim_dev->console_sess); 254 246 } 255 247 }
Note:
See TracChangeset
for help on using the changeset viewer.
