Changeset 1d1bb0f in mainline
- Timestamp:
- 2011-06-19T13:38:37Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b72efe8
- Parents:
- adfdbd5 (diff), 9724d7f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 2 added
- 1 deleted
- 34 edited
- 36 moved
Legend:
- Unmodified
- Added
- Removed
-
boot/arch/amd64/Makefile.inc
radfdbd5 r1d1bb0f 43 43 isa \ 44 44 ns8250 \ 45 ehci _hcd\45 ehci\ 46 46 ohci \ 47 uhci _hcd\48 uhci _rhd\47 uhci \ 48 uhcirh \ 49 49 usbflbk \ 50 50 usbhub \ -
uspace/Makefile
radfdbd5 r1d1bb0f 101 101 drv/test2 \ 102 102 drv/test3 \ 103 drv/ehci _hcd\103 drv/ehci \ 104 104 drv/ohci \ 105 drv/uhci _hcd\106 drv/uhci _rhd\105 drv/uhci \ 106 drv/uhcirh \ 107 107 drv/usbflbk \ 108 108 drv/usbhid \ -
uspace/app/mkbd/main.c
radfdbd5 r1d1bb0f 52 52 #include <usb/hid/hiddescriptor.h> 53 53 #include <usb/hid/usages/consumer.h> 54 #include <io/console.h> 55 #include <io/keycode.h> 54 56 #include <assert.h> 55 57 … … 166 168 167 169 usb_hid_report_path_free(path); 170 } 171 172 static int wait_for_quit_fibril(void *arg) 173 { 174 console_ctrl_t *con = console_init(stdin, stdout); 175 176 printf("Press <ESC> to quit the application.\n"); 177 178 while (1) { 179 kbd_event_t ev; 180 bool ok = console_get_kbd_event(con, &ev); 181 if (!ok) { 182 printf("Connection with console broken: %s.\n", 183 str_error(errno)); 184 break; 185 } 186 187 if (ev.key == KC_ESCAPE) { 188 break; 189 } 190 } 191 192 console_done(con); 193 194 exit(0); 195 196 return EOK; 168 197 } 169 198 … … 242 271 } 243 272 273 fid_t quit_fibril = fibril_create(wait_for_quit_fibril, NULL); 274 if (quit_fibril == 0) { 275 printf("Failed to start extra fibril.\n"); 276 return -1; 277 } 278 fibril_add_ready(quit_fibril); 279 244 280 size_t actual_size; 245 281 int event_nr; 246 282 247 283 while (true) { 248 284 /** @todo Try blocking call. */ -
uspace/app/usbinfo/Makefile
radfdbd5 r1d1bb0f 31 31 32 32 LIBS = \ 33 $(LIBUSBHID_PREFIX)/libusbhid.a \ 33 34 $(LIBUSBDEV_PREFIX)/libusbdev.a \ 34 35 $(LIBUSB_PREFIX)/libusb.a \ … … 37 38 -I$(LIBUSB_PREFIX)/include \ 38 39 -I$(LIBUSBDEV_PREFIX)/include \ 40 -I$(LIBUSBHID_PREFIX)/include \ 39 41 -I$(LIBDRV_PREFIX)/include 40 42 … … 43 45 dev.c \ 44 46 dump.c \ 47 hid.c \ 45 48 info.c \ 46 49 main.c -
uspace/app/usbinfo/main.c
radfdbd5 r1d1bb0f 56 56 printf("Usage: %s [options] device [device [device [ ... ]]]\n", 57 57 app_name); 58 printf(_INDENT "The device is a devman path to the device.\n"); 58 printf(_INDENT "The device can be specified in two ways.\n"); 59 printf(_INDENT " o Using its devman path, e.g. /hw/pci0/.../usb00_a1.\n"); 60 printf(_INDENT " o Or using BUS.ADDR numbers as printed by lsusb.\n"); 59 61 60 62 _OPTION("-h --help", "Print this help and exit."); … … 65 67 _OPTION("-s --strings", "Try to print all string descriptors."); 66 68 _OPTION("-S --status", "Get status of the device."); 69 _OPTION("-r --hid-report", "Dump HID report descriptor."); 70 _OPTION("-r --hid-report-usages", "Dump usages of HID report."); 67 71 68 72 printf("\n"); … … 82 86 {"strings", no_argument, NULL, 's'}, 83 87 {"status", no_argument, NULL, 'S'}, 88 {"hid-report", no_argument, NULL, 'r'}, 89 {"hid-report-usages", no_argument, NULL, 'R'}, 84 90 {0, 0, NULL, 0} 85 91 }; 86 static const char *short_options = "himtTsS ";92 static const char *short_options = "himtTsSrR"; 87 93 88 94 static usbinfo_action_t actions[] = { … … 115 121 .opt = 'S', 116 122 .action = dump_status, 123 .active = false 124 }, 125 { 126 .opt = 'r', 127 .action = dump_hidreport_raw, 128 .active = false 129 }, 130 { 131 .opt = 'R', 132 .action = dump_hidreport_usages, 117 133 .active = false 118 134 }, -
uspace/app/usbinfo/usbinfo.h
radfdbd5 r1d1bb0f 85 85 void dump_strings(usbinfo_device_t *); 86 86 void dump_status(usbinfo_device_t *); 87 void dump_hidreport_raw(usbinfo_device_t *); 88 void dump_hidreport_usages(usbinfo_device_t *); 87 89 88 90 -
uspace/app/vuhid/Makefile
radfdbd5 r1d1bb0f 36 36 $(LIBUSBHID_PREFIX)/libusbhid.a \ 37 37 $(LIBUSBDEV_PREFIX)/libusbdev.a \ 38 $(LIBUSB_PREFIX)/libusb.a 38 $(LIBUSB_PREFIX)/libusb.a \ 39 $(LIBDRV_PREFIX)/libdrv.a 39 40 EXTRA_CFLAGS = \ 40 41 -I$(LIBUSB_PREFIX)/include \ -
uspace/drv/ehci/Makefile
radfdbd5 r1d1bb0f 38 38 -I$(LIBDRV_PREFIX)/include 39 39 40 BINARY = ehci _hcd40 BINARY = ehci 41 41 42 42 SOURCES = \ -
uspace/drv/ehci/ehci.h
radfdbd5 r1d1bb0f 38 38 #include <usbhc_iface.h> 39 39 40 #define NAME "ehci _hcd"40 #define NAME "ehci" 41 41 42 42 extern usbhc_iface_t ehci_hc_iface; -
uspace/drv/ehci/hc_iface.c
radfdbd5 r1d1bb0f 45 45 46 46 #define UNSUPPORTED(methodname) \ 47 usb_log_warning("Unsupported interface method `%s()' in %s:%d.\n", \ 47 usb_log_debug("Client called unsupported interface method " \ 48 "`%s()' in %s:%d.\n", \ 48 49 methodname, __FILE__, __LINE__) 49 50 -
uspace/drv/ohci/hc.c
radfdbd5 r1d1bb0f 65 65 device_keeper_get_free_address(&instance->manager, USB_SPEED_FULL); 66 66 if (hub_address <= 0) { 67 usb_log_error("Failed (%d) to get OHCI root hub address.\n",68 hub_address);67 usb_log_error("Failed to get OHCI root hub address: %s\n", 68 str_error(hub_address)); 69 69 return hub_address; 70 70 } … … 445 445 /* HC is in reset (hw startup) => no other driver 446 446 * maintain reset for at least the time specified in USB spec (50 ms)*/ 447 usb_log_ info("HC found in reset.\n");447 usb_log_debug("Host controller found in reset state.\n"); 448 448 async_usleep(50000); 449 449 } … … 516 516 517 517 instance->registers->control &= (C_HCFS_OPERATIONAL << C_HCFS_SHIFT); 518 usb_log_ info("OHCI HC up and running(%x).\n",518 usb_log_debug("OHCI HC up and running (ctl_reg=0x%x).\n", 519 519 instance->registers->control); 520 520 } -
uspace/drv/ohci/root_hub.c
radfdbd5 r1d1bb0f 232 232 return ENOMEM; 233 233 234 usb_log_info(" OHCI root hub with %zu portsinitialized.\n",234 usb_log_info("Root hub (%zu ports) initialized.\n", 235 235 instance->port_count); 236 236 … … 251 251 int opResult; 252 252 if (request->ep->transfer_type == USB_TRANSFER_CONTROL) { 253 usb_log_ info("Root hub got CONTROL packet\n");253 usb_log_debug("Root hub got CONTROL packet\n"); 254 254 opResult = process_ctrl_request(instance, request); 255 255 usb_transfer_batch_finish_error(request, opResult); 256 256 } else if (request->ep->transfer_type == USB_TRANSFER_INTERRUPT) { 257 usb_log_ info("Root hub got INTERRUPT packet\n");257 usb_log_debug("Root hub got INTERRUPT packet\n"); 258 258 create_interrupt_mask_in_instance(instance); 259 259 if (is_zeros(instance->interrupt_buffer, … … 521 521 case USB_DESCTYPE_HUB: 522 522 { 523 usb_log_debug ("USB_DESCTYPE_HUB\n");523 usb_log_debug2("USB_DESCTYPE_HUB\n"); 524 524 result_descriptor = instance->hub_descriptor; 525 525 size = instance->descriptor_size; … … 528 528 case USB_DESCTYPE_DEVICE: 529 529 { 530 usb_log_debug ("USB_DESCTYPE_DEVICE\n");530 usb_log_debug2("USB_DESCTYPE_DEVICE\n"); 531 531 result_descriptor = &ohci_rh_device_descriptor; 532 532 size = sizeof (ohci_rh_device_descriptor); … … 535 535 case USB_DESCTYPE_CONFIGURATION: 536 536 { 537 usb_log_debug ("USB_DESCTYPE_CONFIGURATION\n");537 usb_log_debug2("USB_DESCTYPE_CONFIGURATION\n"); 538 538 result_descriptor = instance->descriptors.configuration; 539 539 size = instance->descriptors.configuration_size; … … 542 542 case USB_DESCTYPE_INTERFACE: 543 543 { 544 usb_log_debug ("USB_DESCTYPE_INTERFACE\n");544 usb_log_debug2("USB_DESCTYPE_INTERFACE\n"); 545 545 result_descriptor = &ohci_rh_iface_descriptor; 546 546 size = sizeof (ohci_rh_iface_descriptor); … … 549 549 case USB_DESCTYPE_ENDPOINT: 550 550 { 551 usb_log_debug ("USB_DESCTYPE_ENDPOINT\n");551 usb_log_debug2("USB_DESCTYPE_ENDPOINT\n"); 552 552 result_descriptor = &ohci_rh_ep_descriptor; 553 553 size = sizeof (ohci_rh_ep_descriptor); … … 556 556 default: 557 557 { 558 usb_log_debug ("USB_DESCTYPE_EINVAL %d \n",558 usb_log_debug2("USB_DESCTYPE_EINVAL %d \n", 559 559 setup_request->value); 560 usb_log_debug ("\ttype %d\n\trequest %d\n\tvalue "560 usb_log_debug2("\ttype %d\n\trequest %d\n\tvalue " 561 561 "%d\n\tindex %d\n\tlen %d\n ", 562 562 setup_request->request_type, … … 789 789 } 790 790 if (setup_request->request_type == USB_HUB_REQ_TYPE_SET_PORT_FEATURE) { 791 usb_log_debug ("USB_HUB_REQ_TYPE_SET_PORT_FEATURE\n");791 usb_log_debug2("USB_HUB_REQ_TYPE_SET_PORT_FEATURE\n"); 792 792 return process_port_feature_clear_request(instance, 793 793 setup_request->value, … … 854 854 return EINVAL; 855 855 } 856 usb_log_ info("CTRL packet: %s.\n",856 usb_log_debug("CTRL packet: %s.\n", 857 857 usb_debug_str_buffer( 858 858 (const uint8_t *) request->setup_buffer, 8, 8)); … … 864 864 case USB_DEVREQ_GET_DESCRIPTOR: 865 865 case USB_DEVREQ_GET_CONFIGURATION: 866 usb_log_debug ("Processing request with output\n");866 usb_log_debug2("Processing request with output\n"); 867 867 opResult = process_request_with_output( 868 868 instance, request); … … 871 871 case USB_DEVREQ_SET_FEATURE: 872 872 case USB_DEVREQ_SET_ADDRESS: 873 usb_log_debug ("Processing request without "873 usb_log_debug2("Processing request without " 874 874 "additional data\n"); 875 875 opResult = process_request_without_data( … … 878 878 case USB_DEVREQ_SET_DESCRIPTOR: 879 879 case USB_DEVREQ_SET_CONFIGURATION: 880 usb_log_debug("Processing request with " 881 "input\n"); 880 usb_log_debug2("Processing request with input\n"); 882 881 opResult = process_request_with_input( 883 882 instance, request); … … 885 884 break; 886 885 default: 887 usb_log_warning("Received unsuported request: " 888 "%d\n", 889 setup_request->request 890 ); 886 usb_log_warning("Received unsupported request: %d.\n", 887 setup_request->request); 891 888 opResult = ENOTSUP; 892 889 } -
uspace/drv/uhci/Makefile
radfdbd5 r1d1bb0f 38 38 -I$(LIBDRV_PREFIX)/include 39 39 40 BINARY = uhci _hcd40 BINARY = uhci 41 41 42 42 SOURCES = \ -
uspace/drv/uhci/batch.c
radfdbd5 r1d1bb0f 147 147 + sizeof(qh_t); 148 148 void *data_buffer = setup + setup_size; 149 usb_target_t target =150 { .address = ep->address, .endpoint = ep->endpoint };151 149 usb_transfer_batch_init(instance, ep, buffer, data_buffer, buffer_size, 152 150 setup, setup_size, func_in, func_out, arg, fun, … … 154 152 155 153 memcpy(instance->setup_buffer, setup_buffer, setup_size); 156 usb_log_debug("Batch(%p) %d:%d memory structures ready.\n", 157 instance, target.address, target.endpoint); 154 usb_log_debug2("Batch %p " USB_TRANSFER_BATCH_FMT 155 " memory structures ready.\n", instance, 156 USB_TRANSFER_BATCH_ARGS(*instance)); 158 157 return instance; 159 158 } … … 205 204 return true; 206 205 } 206 207 #define LOG_BATCH_INITIALIZED(batch, name) \ 208 usb_log_debug2("Batch %p %s " USB_TRANSFER_BATCH_FMT " initialized.\n", \ 209 (batch), (name), USB_TRANSFER_BATCH_ARGS(*(batch))) 210 207 211 /*----------------------------------------------------------------------------*/ 208 212 /** Prepares control write transfer. … … 219 223 batch_control(instance, USB_PID_OUT, USB_PID_IN); 220 224 instance->next_step = usb_transfer_batch_call_out_and_dispose; 221 usb_log_debug("Batch(%p) CONTROL WRITE initialized.\n", instance);225 LOG_BATCH_INITIALIZED(instance, "control write"); 222 226 } 223 227 /*----------------------------------------------------------------------------*/ … … 233 237 batch_control(instance, USB_PID_IN, USB_PID_OUT); 234 238 instance->next_step = usb_transfer_batch_call_in_and_dispose; 235 usb_log_debug("Batch(%p) CONTROL READ initialized.\n", instance);239 LOG_BATCH_INITIALIZED(instance, "control read"); 236 240 } 237 241 /*----------------------------------------------------------------------------*/ … … 247 251 batch_data(instance, USB_PID_IN); 248 252 instance->next_step = usb_transfer_batch_call_in_and_dispose; 249 usb_log_debug("Batch(%p) INTERRUPT IN initialized.\n", instance);253 LOG_BATCH_INITIALIZED(instance, "interrupt in"); 250 254 } 251 255 /*----------------------------------------------------------------------------*/ … … 263 267 batch_data(instance, USB_PID_OUT); 264 268 instance->next_step = usb_transfer_batch_call_out_and_dispose; 265 usb_log_debug("Batch(%p) INTERRUPT OUT initialized.\n", instance);269 LOG_BATCH_INITIALIZED(instance, "interrupt out"); 266 270 } 267 271 /*----------------------------------------------------------------------------*/ … … 277 281 batch_data(instance, USB_PID_IN); 278 282 instance->next_step = usb_transfer_batch_call_in_and_dispose; 279 usb_log_debug("Batch(%p) BULK IN initialized.\n", instance);283 LOG_BATCH_INITIALIZED(instance, "bulk in"); 280 284 } 281 285 /*----------------------------------------------------------------------------*/ … … 293 297 batch_data(instance, USB_PID_OUT); 294 298 instance->next_step = usb_transfer_batch_call_out_and_dispose; 295 usb_log_debug("Batch(%p) BULK OUT initialized.\n", instance);299 LOG_BATCH_INITIALIZED(instance, "bulk out"); 296 300 } 297 301 /*----------------------------------------------------------------------------*/ -
uspace/drv/uhci/hw_struct/transfer_descriptor.c
radfdbd5 r1d1bb0f 103 103 td_print_status(instance); 104 104 if (pid == USB_PID_SETUP) { 105 usb_log_debug ("SETUP BUFFER: %s\n",105 usb_log_debug2("SETUP BUFFER: %s\n", 106 106 usb_debug_str_buffer(buffer, 8, 8)); 107 107 } -
uspace/drv/uhci/iface.c
radfdbd5 r1d1bb0f 64 64 } 65 65 66 usb_log_debug ("%s %d:%d %zu(%zu).\n",66 usb_log_debug2("%s %d:%d %zu(%zu).\n", 67 67 name, target.address, target.endpoint, size, ep->max_packet_size); 68 68 … … 172 172 speed = ep_speed; 173 173 } 174 usb_log_debug("Register endpoint %d:%d %s %s(%d) %zu(%zu) %u.\n",174 usb_log_debug("Register endpoint %d:%d %s-%s %s %zuB %ums.\n", 175 175 address, endpoint, usb_str_transfer_type(transfer_type), 176 usb_str_speed(speed), direction, size, max_packet_size, interval); 176 usb_str_direction(direction), usb_str_speed(speed), 177 max_packet_size, interval); 177 178 178 179 return usb_endpoint_manager_add_ep(&hc->ep_manager, address, endpoint, … … 187 188 hc_t *hc = fun_to_hc(fun); 188 189 assert(hc); 189 usb_log_debug("Unregister endpoint %d:%d % d.\n",190 address, endpoint, direction);190 usb_log_debug("Unregister endpoint %d:%d %s.\n", 191 address, endpoint, usb_str_direction(direction)); 191 192 return usb_endpoint_manager_unregister_ep(&hc->ep_manager, address, 192 193 endpoint, direction); -
uspace/drv/uhci/main.c
radfdbd5 r1d1bb0f 41 41 #include "uhci.h" 42 42 43 #define NAME "uhci _hcd"43 #define NAME "uhci" 44 44 45 45 static int uhci_add_device(ddf_dev_t *device); -
uspace/drv/uhci/transfer_list.c
radfdbd5 r1d1bb0f 141 141 list_append(&batch->link, &instance->batch_list); 142 142 143 usb_transfer_batch_t *first = list_get_instance( 144 instance->batch_list.next, usb_transfer_batch_t, link); 145 usb_log_debug("Batch(%p) added to queue %s, first is %p.\n", 146 batch, instance->name, first); 143 usb_log_debug("Batch %p " USB_TRANSFER_BATCH_FMT " scheduled in queue %s.\n", 144 batch, USB_TRANSFER_BATCH_ARGS(*batch), instance->name); 147 145 fibril_mutex_unlock(&instance->guard); 148 146 } … … 234 232 /* Remove from the batch list */ 235 233 list_remove(&batch->link); 236 usb_log_debug("Batch(%p) removed (%s) from %s, next: %x.\n", 237 batch, qpos, instance->name, batch_qh(batch)->next); 234 usb_log_debug2("Batch %p " USB_TRANSFER_BATCH_FMT " removed (%s) " 235 "from %s, next: %x.\n", 236 batch, USB_TRANSFER_BATCH_ARGS(*batch), 237 qpos, instance->name, batch_qh(batch)->next); 238 238 } 239 239 /** -
uspace/drv/uhcirh/Makefile
radfdbd5 r1d1bb0f 38 38 -I$(LIBDRV_PREFIX)/include 39 39 40 BINARY = uhci _rhd40 BINARY = uhcirh 41 41 42 42 SOURCES = \ -
uspace/drv/uhcirh/main.c
radfdbd5 r1d1bb0f 46 46 #include "root_hub.h" 47 47 48 #define NAME "uhci _rhd"48 #define NAME "uhcirh" 49 49 50 50 static int hc_get_my_registers(const ddf_dev_t *dev, -
uspace/drv/usbhid/Makefile
radfdbd5 r1d1bb0f 43 43 BINARY = usbhid 44 44 45 SUBDRIVER_SOURCES = \ 46 kbd/conv.c \ 47 kbd/kbddev.c \ 48 kbd/kbdrepeat.c \ 49 mouse/mousedev.c \ 50 multimedia/multimedia.c \ 51 multimedia/keymap.c 52 45 53 SOURCES = \ 46 54 main.c \ 47 55 usbhid.c \ 48 56 subdrivers.c \ 49 kbd/conv.c \50 kbd/kbddev.c \51 kbd/kbdrepeat.c \52 57 generic/hiddev.c \ 53 mouse/mousedev.c \ 54 multimedia/multimedia.c \ 55 multimedia/keymap.c \ 56 $(STOLEN_LAYOUT_SOURCES) 58 $(SUBDRIVER_SOURCES) 57 59 58 60 include $(USPACE_PREFIX)/Makefile.common -
uspace/drv/usbhid/generic/hiddev.c
radfdbd5 r1d1bb0f 231 231 /*----------------------------------------------------------------------------*/ 232 232 233 bool usb_generic_hid_polling_callback(usb_hid_dev_t *hid_dev, void *data, 234 uint8_t *buffer, size_t buffer_size) 235 { 236 usb_log_debug2("usb_hid_polling_callback(%p, %p, %zu)\n", 237 hid_dev, buffer, buffer_size); 238 usb_debug_str_buffer(buffer, buffer_size, 0); 233 bool usb_generic_hid_polling_callback(usb_hid_dev_t *hid_dev, void *data) 234 { 239 235 return true; 240 236 } -
uspace/drv/usbhid/generic/hiddev.h
radfdbd5 r1d1bb0f 50 50 int usb_generic_hid_init(struct usb_hid_dev *hid_dev, void **data); 51 51 52 bool usb_generic_hid_polling_callback(struct usb_hid_dev *hid_dev, void *data, 53 uint8_t *buffer, size_t buffer_size); 52 bool usb_generic_hid_polling_callback(struct usb_hid_dev *hid_dev, void *data); 54 53 55 54 #endif // USB_HID_HIDDDEV_H_ -
uspace/drv/usbhid/kbd/kbddev.c
radfdbd5 r1d1bb0f 46 46 #include <fibril.h> 47 47 #include <fibril_synch.h> 48 49 #include <ddf/log.h> 48 50 49 51 #include <usb/usb.h> … … 317 319 } 318 320 321 static size_t find_in_array_int32(int32_t val, int32_t *arr, size_t arr_size) 322 { 323 for (size_t i = 0; i < arr_size; i++) { 324 if (arr[i] == val) { 325 return i; 326 } 327 } 328 329 return (size_t) -1; 330 } 331 319 332 /*----------------------------------------------------------------------------*/ 320 333 /** … … 337 350 { 338 351 unsigned int key; 339 unsigned int i, j;352 size_t i; 340 353 341 354 /* … … 347 360 * whole input report. 348 361 */ 349 i = 0; 350 while (i < kbd_dev->key_count && kbd_dev->keys[i] != ERROR_ROLLOVER) { 351 ++i; 352 } 353 if (i != kbd_dev->key_count) { 354 usb_log_debug("Phantom state occured.\n"); 355 // phantom state, do nothing 362 i = find_in_array_int32(ERROR_ROLLOVER, kbd_dev->keys, 363 kbd_dev->key_count); 364 if (i != (size_t) -1) { 365 usb_log_debug("Detected phantom state.\n"); 356 366 return; 357 367 } 358 368 359 369 /* 360 * 1) Key releases 361 */ 362 for (j = 0; j < kbd_dev->key_count; ++j) { 363 // try to find the old key in the new key list 364 i = 0; 365 while (i < kbd_dev->key_count 366 && kbd_dev->keys[i] != kbd_dev->keys_old[j]) { 367 ++i; 368 } 369 370 if (i == kbd_dev->key_count) { 371 // not found, i.e. the key was released 372 key = usbhid_parse_scancode(kbd_dev->keys_old[j]); 370 * Key releases 371 */ 372 for (i = 0; i < kbd_dev->key_count; i++) { 373 int32_t old_key = kbd_dev->keys_old[i]; 374 /* Find the old key among currently pressed keys. */ 375 size_t pos = find_in_array_int32(old_key, kbd_dev->keys, 376 kbd_dev->key_count); 377 /* If the key was not found, we need to signal release. */ 378 if (pos == (size_t) -1) { 379 key = usbhid_parse_scancode(old_key); 373 380 if (!usb_kbd_is_lock(key)) { 374 381 usb_kbd_repeat_stop(kbd_dev, key); 375 382 } 376 383 usb_kbd_push_ev(hid_dev, kbd_dev, KEY_RELEASE, key); 377 usb_log_debug2("Key released: %d\n", key); 378 } else { 379 // found, nothing happens 380 } 381 } 382 383 /* 384 * 1) Key presses 384 usb_log_debug2("Key released: %u " 385 "(USB code %" PRIu32 ")\n", key, old_key); 386 } 387 } 388 389 /* 390 * Key presses 385 391 */ 386 392 for (i = 0; i < kbd_dev->key_count; ++i) { 387 // try to find the new key in the old key list 388 j = 0; 389 while (j < kbd_dev->key_count 390 && kbd_dev->keys_old[j] != kbd_dev->keys[i]) { 391 ++j; 392 } 393 394 if (j == kbd_dev->key_count) { 395 // not found, i.e. new key pressed 393 int32_t new_key = kbd_dev->keys[i]; 394 /* Find the new key among already pressed keys. */ 395 size_t pos = find_in_array_int32(new_key, kbd_dev->keys_old, 396 kbd_dev->key_count); 397 /* If the key was not found, we need to signal press. */ 398 if (pos == (size_t) -1) { 396 399 key = usbhid_parse_scancode(kbd_dev->keys[i]); 397 usb_log_debug2("Key pressed: %d (keycode: %d)\n", key,398 kbd_dev->keys[i]);399 400 if (!usb_kbd_is_lock(key)) { 400 401 usb_kbd_repeat_start(kbd_dev, key); 401 402 } 402 403 usb_kbd_push_ev(hid_dev, kbd_dev, KEY_PRESS, key); 403 } else {404 // found, nothing happens404 usb_log_debug2("Key pressed: %u " 405 "(USB code %" PRIu32 ")\n", key, new_key); 405 406 } 406 407 } … … 408 409 memcpy(kbd_dev->keys_old, kbd_dev->keys, kbd_dev->key_count * 4); 409 410 410 usb_log_debug2("New stored keys: "); 411 for (i = 0; i < kbd_dev->key_count; ++i) { 412 usb_log_debug2("%d ", kbd_dev->keys_old[i]); 413 } 414 usb_log_debug2("\n"); 411 char key_buffer[512]; 412 ddf_dump_buffer(key_buffer, 512, 413 kbd_dev->keys_old, 4, kbd_dev->key_count, 0); 414 usb_log_debug2("Stored keys %s.\n", key_buffer); 415 415 } 416 416 … … 434 434 * usb_hid_parse_report(). 435 435 */ 436 static void usb_kbd_process_data(usb_hid_dev_t *hid_dev, usb_kbd_t *kbd_dev, 437 uint8_t *buffer, size_t actual_size) 436 static void usb_kbd_process_data(usb_hid_dev_t *hid_dev, usb_kbd_t *kbd_dev) 438 437 { 439 438 assert(hid_dev->report != NULL); 440 439 assert(hid_dev != NULL); 441 440 assert(kbd_dev != NULL); 442 443 usb_log_debug("Calling usb_hid_parse_report() with "444 "buffer %s\n", usb_debug_str_buffer(buffer, actual_size, 0));445 441 446 442 usb_hid_report_path_t *path = usb_hid_report_path(); 447 443 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_KEYBOARD, 0); 448 444 449 uint8_t report_id; 450 int rc = usb_hid_parse_report(hid_dev->report, buffer, actual_size, 451 &report_id); 452 453 if (rc != EOK) { 454 usb_log_warning("Error in usb_hid_parse_report():" 455 "%s\n", str_error(rc)); 456 } 457 458 usb_hid_report_path_set_report_id (path, report_id); 445 usb_hid_report_path_set_report_id (path, hid_dev->report_id); 459 446 460 447 // fill in the currently pressed keys … … 756 743 /*----------------------------------------------------------------------------*/ 757 744 758 bool usb_kbd_polling_callback(usb_hid_dev_t *hid_dev, void *data, 759 uint8_t *buffer, size_t buffer_size) 760 { 761 if (hid_dev == NULL || buffer == NULL || data == NULL) { 745 bool usb_kbd_polling_callback(usb_hid_dev_t *hid_dev, void *data) 746 { 747 if (hid_dev == NULL/* || buffer == NULL*/ || data == NULL) { 762 748 // do not continue polling (???) 763 749 return false; … … 768 754 769 755 // TODO: add return value from this function 770 usb_kbd_process_data(hid_dev, kbd_dev , buffer, buffer_size);756 usb_kbd_process_data(hid_dev, kbd_dev); 771 757 772 758 return true; … … 804 790 if ((*kbd_dev)->repeat_mtx != NULL) { 805 791 //assert(!fibril_mutex_is_locked((*kbd_dev)->repeat_mtx)); 792 // FIXME - the fibril_mutex_is_locked may not cause 793 // fibril scheduling 806 794 while (fibril_mutex_is_locked((*kbd_dev)->repeat_mtx)) {} 807 795 free((*kbd_dev)->repeat_mtx); -
uspace/drv/usbhid/kbd/kbddev.h
radfdbd5 r1d1bb0f 125 125 int usb_kbd_init(struct usb_hid_dev *hid_dev, void **data); 126 126 127 bool usb_kbd_polling_callback(struct usb_hid_dev *hid_dev, void *data, 128 uint8_t *buffer, size_t buffer_size); 127 bool usb_kbd_polling_callback(struct usb_hid_dev *hid_dev, void *data); 129 128 130 129 int usb_kbd_is_initialized(const usb_kbd_t *kbd_dev); -
uspace/drv/usbhid/kbd/kbdrepeat.c
radfdbd5 r1d1bb0f 97 97 delay = kbd->repeat.delay_between; 98 98 } else { 99 usb_log_debug ("New key to repeat: %u.\n",99 usb_log_debug2("New key to repeat: %u.\n", 100 100 kbd->repeat.key_new); 101 101 kbd->repeat.key_repeated = kbd->repeat.key_new; … … 104 104 } else { 105 105 if (kbd->repeat.key_repeated > 0) { 106 usb_log_debug ("Stopping to repeat key: %u.\n",106 usb_log_debug2("Stopping to repeat key: %u.\n", 107 107 kbd->repeat.key_repeated); 108 108 kbd->repeat.key_repeated = 0; -
uspace/drv/usbhid/mouse/mousedev.c
radfdbd5 r1d1bb0f 52 52 #include "mousedev.h" 53 53 #include "../usbhid.h" 54 55 /** Number of simulated arrow-key presses for singel wheel step. */ 56 #define ARROWS_PER_SINGLE_WHEEL 3 54 57 55 58 // FIXME: remove this header … … 201 204 static void usb_mouse_send_wheel(const usb_mouse_t *mouse_dev, int wheel) 202 205 { 203 kbd_event_t ev; 204 205 ev.type = KEY_PRESS; 206 ev.key = (wheel > 0) ? KC_UP : (wheel < 0) ? KC_DOWN : 0; 207 ev.mods = 0; 208 ev.c = 0; 206 unsigned int key = (wheel > 0) ? KC_UP : KC_DOWN; 209 207 210 208 if (mouse_dev->wheel_phone < 0) { 211 209 usb_log_warning( 212 "Connection to console not ready, keydiscarded.\n");210 "Connection to console not ready, wheel roll discarded.\n"); 213 211 return; 214 212 } 215 213 216 int count = ( wheel < 0) ? -wheel : wheel;214 int count = ((wheel < 0) ? -wheel : wheel) * ARROWS_PER_SINGLE_WHEEL; 217 215 int i; 218 216 219 for (i = 0; i < count * 3; ++i) { 220 usb_log_debug2("Sending key %d to the console\n", ev.key); 221 async_obsolete_msg_4(mouse_dev->wheel_phone, KBDEV_EVENT, ev.type, 222 ev.key, ev.mods, ev.c); 223 // send key release right away 224 async_obsolete_msg_4(mouse_dev->wheel_phone, KBDEV_EVENT, KEY_RELEASE, 225 ev.key, ev.mods, ev.c); 226 } 227 } 228 229 /*----------------------------------------------------------------------------*/ 230 231 static bool usb_mouse_process_report(usb_hid_dev_t *hid_dev, 232 usb_mouse_t *mouse_dev, uint8_t *buffer, 233 size_t buffer_size) 217 for (i = 0; i < count; i++) { 218 /* Send arrow press and release. */ 219 usb_log_debug2("Sending key %d to the console\n", key); 220 async_obsolete_msg_4(mouse_dev->wheel_phone, KBDEV_EVENT, 221 KEY_PRESS, key, 0, 0); 222 async_obsolete_msg_4(mouse_dev->wheel_phone, KBDEV_EVENT, 223 KEY_RELEASE, key, 0, 0); 224 } 225 } 226 227 /*----------------------------------------------------------------------------*/ 228 229 static int get_mouse_axis_move_value(uint8_t rid, usb_hid_report_t *report, 230 int32_t usage) 231 { 232 int result = 0; 233 234 usb_hid_report_path_t *path = usb_hid_report_path(); 235 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_GENERIC_DESKTOP, 236 usage); 237 238 usb_hid_report_path_set_report_id(path, rid); 239 240 usb_hid_report_field_t *field = usb_hid_report_get_sibling( 241 report, NULL, path, USB_HID_PATH_COMPARE_END, 242 USB_HID_REPORT_TYPE_INPUT); 243 244 if (field != NULL) { 245 result = field->value; 246 } 247 248 usb_hid_report_path_free(path); 249 250 return result; 251 } 252 253 static bool usb_mouse_process_report(usb_hid_dev_t *hid_dev, 254 usb_mouse_t *mouse_dev) 234 255 { 235 256 assert(mouse_dev != NULL); 236 237 usb_log_debug2("got buffer: %s.\n",238 usb_debug_str_buffer(buffer, buffer_size, 0));239 257 240 258 if (mouse_dev->mouse_phone < 0) { … … 243 261 } 244 262 245 /* 246 * parse the input report 247 */ 248 249 usb_log_debug(NAME " Calling usb_hid_parse_report() with " 250 "buffer %s\n", usb_debug_str_buffer(buffer, buffer_size, 0)); 251 252 uint8_t report_id; 253 254 int rc = usb_hid_parse_report(hid_dev->report, buffer, buffer_size, 255 &report_id); 256 257 if (rc != EOK) { 258 usb_log_warning(NAME "Error in usb_hid_parse_report(): %s\n", 259 str_error(rc)); 260 return true; 261 } 262 263 /* 264 * X 265 */ 266 int shift_x = 0; 267 268 usb_hid_report_path_t *path = usb_hid_report_path(); 269 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_GENERIC_DESKTOP, 270 USB_HIDUT_USAGE_GENERIC_DESKTOP_X); 271 272 usb_hid_report_path_set_report_id(path, report_id); 273 274 usb_hid_report_field_t *field = usb_hid_report_get_sibling( 275 hid_dev->report, NULL, path, USB_HID_PATH_COMPARE_END, 276 USB_HID_REPORT_TYPE_INPUT); 277 278 if (field != NULL) { 279 usb_log_debug(NAME " VALUE(%X) USAGE(%X)\n", field->value, 280 field->usage); 281 shift_x = field->value; 282 } 283 284 usb_hid_report_path_free(path); 285 286 /* 287 * Y 288 */ 289 int shift_y = 0; 290 291 path = usb_hid_report_path(); 292 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_GENERIC_DESKTOP, 293 USB_HIDUT_USAGE_GENERIC_DESKTOP_Y); 294 295 usb_hid_report_path_set_report_id(path, report_id); 296 297 field = usb_hid_report_get_sibling( 298 hid_dev->report, NULL, path, USB_HID_PATH_COMPARE_END, 299 USB_HID_REPORT_TYPE_INPUT); 300 301 if (field != NULL) { 302 usb_log_debug(NAME " VALUE(%X) USAGE(%X)\n", field->value, 303 field->usage); 304 shift_y = field->value; 305 } 306 307 usb_hid_report_path_free(path); 308 263 int shift_x = get_mouse_axis_move_value(hid_dev->report_id, 264 hid_dev->report, USB_HIDUT_USAGE_GENERIC_DESKTOP_X); 265 int shift_y = get_mouse_axis_move_value(hid_dev->report_id, 266 hid_dev->report, USB_HIDUT_USAGE_GENERIC_DESKTOP_Y); 267 int wheel = get_mouse_axis_move_value(hid_dev->report_id, 268 hid_dev->report, USB_HIDUT_USAGE_GENERIC_DESKTOP_WHEEL); 269 309 270 if ((shift_x != 0) || (shift_y != 0)) { 310 271 async_obsolete_req_2_0(mouse_dev->mouse_phone, 311 272 MEVENT_MOVE, shift_x, shift_y); 312 273 } 313 314 /* 315 * Wheel 316 */ 317 int wheel = 0; 318 319 path = usb_hid_report_path(); 320 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_GENERIC_DESKTOP, 321 USB_HIDUT_USAGE_GENERIC_DESKTOP_WHEEL); 322 323 usb_hid_report_path_set_report_id(path, report_id); 324 325 field = usb_hid_report_get_sibling( 326 hid_dev->report, NULL, path, USB_HID_PATH_COMPARE_END, 327 USB_HID_REPORT_TYPE_INPUT); 328 329 if (field != NULL) { 330 usb_log_debug(NAME " VALUE(%X) USAGE(%X)\n", field->value, 331 field->usage); 332 wheel = field->value; 333 } 334 335 usb_hid_report_path_free(path); 336 337 // send arrow up for positive direction and arrow down for negative 338 // direction; three arrows for difference of 1 339 usb_mouse_send_wheel(mouse_dev, wheel); 340 274 275 if (wheel != 0) { 276 usb_mouse_send_wheel(mouse_dev, wheel); 277 } 341 278 342 279 /* 343 280 * Buttons 344 281 */ 345 path = usb_hid_report_path();282 usb_hid_report_path_t *path = usb_hid_report_path(); 346 283 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_BUTTON, 0); 347 usb_hid_report_path_set_report_id(path, report_id);348 349 field = usb_hid_report_get_sibling(284 usb_hid_report_path_set_report_id(path, hid_dev->report_id); 285 286 usb_hid_report_field_t *field = usb_hid_report_get_sibling( 350 287 hid_dev->report, NULL, path, USB_HID_PATH_COMPARE_END 351 288 | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY, … … 353 290 354 291 while (field != NULL) { 355 usb_log_debug (NAME " VALUE(%X) USAGE(%X)\n", field->value,292 usb_log_debug2(NAME " VALUE(%X) USAGE(%X)\n", field->value, 356 293 field->usage); 357 294 … … 510 447 /*----------------------------------------------------------------------------*/ 511 448 512 bool usb_mouse_polling_callback(usb_hid_dev_t *hid_dev, void *data, 513 uint8_t *buffer, size_t buffer_size) 514 { 515 usb_log_debug("usb_mouse_polling_callback()\n"); 516 usb_debug_str_buffer(buffer, buffer_size, 0); 517 449 bool usb_mouse_polling_callback(usb_hid_dev_t *hid_dev, void *data) 450 { 518 451 if (hid_dev == NULL || data == NULL) { 519 452 usb_log_error("Missing argument to the mouse polling callback." … … 524 457 usb_mouse_t *mouse_dev = (usb_mouse_t *)data; 525 458 526 return usb_mouse_process_report(hid_dev, mouse_dev, buffer, 527 buffer_size); 459 return usb_mouse_process_report(hid_dev, mouse_dev); 528 460 } 529 461 -
uspace/drv/usbhid/mouse/mousedev.h
radfdbd5 r1d1bb0f 65 65 int usb_mouse_init(struct usb_hid_dev *hid_dev, void **data); 66 66 67 bool usb_mouse_polling_callback(struct usb_hid_dev *hid_dev, void *data, 68 uint8_t *buffer, size_t buffer_size); 67 bool usb_mouse_polling_callback(struct usb_hid_dev *hid_dev, void *data); 69 68 70 69 void usb_mouse_deinit(struct usb_hid_dev *hid_dev, void *data); -
uspace/drv/usbhid/multimedia/multimedia.c
radfdbd5 r1d1bb0f 94 94 95 95 usb_multimedia_t *multim_dev = (usb_multimedia_t *)fun->driver_data; 96 //usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;97 96 98 97 if (multim_dev == NULL) { … … 274 273 /*----------------------------------------------------------------------------*/ 275 274 276 bool usb_multimedia_polling_callback(struct usb_hid_dev *hid_dev, void *data, 277 uint8_t *buffer, size_t buffer_size) 275 bool usb_multimedia_polling_callback(struct usb_hid_dev *hid_dev, void *data) 278 276 { 279 277 // TODO: checks 280 if (hid_dev == NULL || data == NULL || buffer == NULL) {278 if (hid_dev == NULL || data == NULL) { 281 279 return false; 282 280 } 283 284 usb_log_debug(NAME " usb_lgtch_polling_callback(%p, %p, %zu)\n", 285 hid_dev, buffer, buffer_size); 286 281 287 282 usb_multimedia_t *multim_dev = (usb_multimedia_t *)data; 288 289 usb_log_debug(NAME " Calling usb_hid_parse_report() with "290 "buffer %s\n", usb_debug_str_buffer(buffer, buffer_size, 0));291 283 292 284 usb_hid_report_path_t *path = usb_hid_report_path(); 293 285 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_CONSUMER, 0); 294 286 295 uint8_t report_id; 296 297 int rc = usb_hid_parse_report(hid_dev->report, buffer, buffer_size, 298 &report_id); 299 300 if (rc != EOK) { 301 usb_log_warning(NAME "Error in usb_hid_parse_report(): %s\n", 302 str_error(rc)); 303 return true; 304 } 305 306 usb_hid_report_path_set_report_id(path, report_id); 287 usb_hid_report_path_set_report_id(path, hid_dev->report_id); 307 288 308 289 usb_hid_report_field_t *field = usb_hid_report_get_sibling( -
uspace/drv/usbhid/multimedia/multimedia.h
radfdbd5 r1d1bb0f 47 47 void usb_multimedia_deinit(struct usb_hid_dev *hid_dev, void *data); 48 48 49 bool usb_multimedia_polling_callback(struct usb_hid_dev *hid_dev, void *data, 50 uint8_t *buffer, size_t buffer_size); 49 bool usb_multimedia_polling_callback(struct usb_hid_dev *hid_dev, void *data); 51 50 52 51 /*----------------------------------------------------------------------------*/ -
uspace/drv/usbhid/subdrivers.h
radfdbd5 r1d1bb0f 49 49 /*----------------------------------------------------------------------------*/ 50 50 51 /* TODO: This mapping must contain some other information to get the proper 52 * interface. 51 /** Structure representing the mapping between device requirements and the 52 * subdriver supposed to handle this device. 53 * 54 * By filling in this structure and adding it to the usb_hid_subdrivers array, 55 * a new subdriver mapping will be created and used by the HID driver when it 56 * searches for appropriate subdrivers for a device. 53 57 */ 54 58 typedef struct usb_hid_subdriver_mapping { 59 /** Usage path that the device's Input reports must contain. 60 * 61 * It is an array of pairs <usage_page, usage>, terminated by a <0, 0> 62 * pair. If you do not wish to specify the device in this way, set this 63 * to NULL. 64 */ 55 65 const usb_hid_subdriver_usage_t *usage_path; 66 67 /** Report ID for which the path should apply. */ 56 68 int report_id; 69 70 /** Compare type for the Usage path. */ 57 71 int compare; 72 73 /** Vendor ID (set to -1 if not specified). */ 58 74 int vendor_id; 75 76 /** Product ID (set to -1 if not specified). */ 59 77 int product_id; 78 79 /** Subdriver for controlling this device. */ 60 80 usb_hid_subdriver_t subdriver; 61 81 } usb_hid_subdriver_mapping_t; -
uspace/drv/usbhid/usbhid.c
radfdbd5 r1d1bb0f 572 572 573 573 assert(hid_dev->input_report != NULL); 574 usb_log_debug("Max input report size: %zu, buffer size: %zu\n", 575 hid_dev->max_input_report_size, buffer_size); 574 usb_log_debug("New data [%zu/%zu]: %s\n", buffer_size, 575 hid_dev->max_input_report_size, 576 usb_debug_str_buffer(buffer, buffer_size, 0)); 576 577 577 578 if (hid_dev->max_input_report_size >= buffer_size) { … … 582 583 } 583 584 585 // parse the input report 586 587 int rc = usb_hid_parse_report(hid_dev->report, buffer, buffer_size, 588 &hid_dev->report_id); 589 590 if (rc != EOK) { 591 usb_log_warning("Error in usb_hid_parse_report():" 592 "%s\n", str_error(rc)); 593 } 594 584 595 bool cont = false; 585 596 … … 588 599 if (hid_dev->subdrivers[i].poll != NULL 589 600 && hid_dev->subdrivers[i].poll(hid_dev, 590 hid_dev->subdrivers[i].data , buffer, buffer_size)) {601 hid_dev->subdrivers[i].data)) { 591 602 cont = true; 592 603 } -
uspace/drv/usbhid/usbhid.h
radfdbd5 r1d1bb0f 46 46 #include <bool.h> 47 47 48 struct usb_hid_dev; 48 typedef struct usb_hid_dev usb_hid_dev_t; 49 typedef struct usb_hid_subdriver usb_hid_subdriver_t; 49 50 50 typedef int (*usb_hid_driver_init_t)(struct usb_hid_dev *, void **data); 51 typedef void (*usb_hid_driver_deinit_t)(struct usb_hid_dev *, void *data); 52 typedef bool (*usb_hid_driver_poll)(struct usb_hid_dev *, void *data, uint8_t *, 53 size_t); 54 typedef int (*usb_hid_driver_poll_ended)(struct usb_hid_dev *, void *data, 55 bool reason); 51 /** Subdriver initialization callback. 52 * 53 * @param dev Backing USB HID device. 54 * @param data Custom subdriver data (pointer where to store them). 55 * @return Error code. 56 */ 57 typedef int (*usb_hid_driver_init_t)(usb_hid_dev_t *dev, void **data); 56 58 57 typedef struct usb_hid_subdriver { 59 /** Subdriver deinitialization callback. 60 * 61 * @param dev Backing USB HID device. 62 * @param data Custom subdriver data. 63 */ 64 typedef void (*usb_hid_driver_deinit_t)(usb_hid_dev_t *dev, void *data); 65 66 /** Subdriver callback on data from device. 67 * 68 * @param dev Backing USB HID device. 69 * @param data Custom subdriver data. 70 * @return Whether to continue polling (typically true always). 71 */ 72 typedef bool (*usb_hid_driver_poll_t)(usb_hid_dev_t *dev, void *data); 73 74 /** Subdriver callback after communication with the device ceased. 75 * 76 * @param dev Backing USB HID device. 77 * @param data Custom subdriver data. 78 * @param ended_due_to_errors Whether communication ended due to errors in 79 * communication (true) or deliberately by driver (false). 80 */ 81 typedef void (*usb_hid_driver_poll_ended_t)(usb_hid_dev_t *dev, void *data, 82 bool ended_due_to_errors); 83 84 struct usb_hid_subdriver { 58 85 /** Function to be called when initializing HID device. */ 59 86 usb_hid_driver_init_t init; … … 61 88 usb_hid_driver_deinit_t deinit; 62 89 /** Function to be called when data arrives from the device. */ 63 usb_hid_driver_poll poll;90 usb_hid_driver_poll_t poll; 64 91 /** Function to be called when polling ends. */ 65 usb_hid_driver_poll_ended poll_end;92 usb_hid_driver_poll_ended_t poll_end; 66 93 /** Arbitrary data needed by the subdriver. */ 67 94 void *data; 68 } usb_hid_subdriver_t;95 }; 69 96 70 97 /*----------------------------------------------------------------------------*/ … … 72 99 * Structure for holding general HID device data. 73 100 */ 74 typedefstruct usb_hid_dev {101 struct usb_hid_dev { 75 102 /** Structure holding generic USB device information. */ 76 103 usb_device_t *usb_dev; … … 94 121 usb_hid_report_t *report; 95 122 123 uint8_t report_id; 124 96 125 uint8_t *input_report; 97 126 … … 100 129 101 130 int report_nr; 102 } usb_hid_dev_t;131 }; 103 132 104 133 /*----------------------------------------------------------------------------*/ -
uspace/drv/usbhub/ports.c
radfdbd5 r1d1bb0f 140 140 usb_hub_port_reset_completed(hub, port, status); 141 141 } 142 usb_log_debug(" Status x%x : %d\n ", status, status);142 usb_log_debug("Port %d status 0x%08" PRIx32 "\n", (int) port, status); 143 143 144 144 usb_port_status_set_bit( -
uspace/lib/c/generic/str.c
radfdbd5 r1d1bb0f 540 540 541 541 dstr_size = str_size(dest); 542 if (dstr_size >= size) { 543 return; 544 } 542 545 str_cpy(dest + dstr_size, size - dstr_size, src); 543 546 } -
uspace/lib/drv/Makefile
radfdbd5 r1d1bb0f 36 36 generic/dev_iface.c \ 37 37 generic/log.c \ 38 generic/logbuf.c \ 38 39 generic/remote_hw_res.c \ 39 40 generic/remote_char_dev.c \ -
uspace/lib/drv/include/ddf/log.h
radfdbd5 r1d1bb0f 39 39 extern void ddf_msg(log_level_t, const char *, ...); 40 40 41 extern void ddf_dump_buffer(char *, size_t, const void *, size_t, size_t, 42 size_t); 43 41 44 #endif 42 45 -
uspace/lib/usb/include/usb/usb.h
radfdbd5 r1d1bb0f 69 69 USB_DIRECTION_BOTH 70 70 } usb_direction_t; 71 72 const char *usb_str_direction(usb_direction_t); 71 73 72 74 /** USB speeds. */ -
uspace/lib/usb/src/debug.c
radfdbd5 r1d1bb0f 38 38 #include <stdlib.h> 39 39 #include <stdio.h> 40 #include <ddf/log.h> 40 41 #include <usb/debug.h> 41 42 … … 67 68 if (rc > 0) { 68 69 log_stream = fopen(fname, "w"); 70 if (log_stream != NULL) { 71 setvbuf(log_stream, NULL, _IOFBF, BUFSIZ); 72 } 69 73 free(fname); 70 74 } … … 193 197 bzero(buffer_dump[buffer_dump_index], BUFFER_DUMP_LEN); 194 198 195 if (buffer == NULL) { 196 return "(null)"; 197 } 198 if (size == 0) { 199 return "(empty)"; 200 } 201 if ((dumped_size == 0) || (dumped_size > size)) { 202 dumped_size = size; 203 } 204 205 /* How many bytes are available in the output buffer. */ 206 size_t buffer_remaining_size = BUFFER_DUMP_LEN - 1 - REMAINDER_STR_LEN; 207 char *it = buffer_dump[buffer_dump_index]; 208 209 size_t index = 0; 210 211 while (index < size) { 212 /* Determine space before the number. */ 213 const char *space_before; 214 if (index == 0) { 215 space_before = ""; 216 } else if ((index % BUFFER_DUMP_GROUP_SIZE) == 0) { 217 space_before = " "; 218 } else { 219 space_before = " "; 220 } 221 222 /* 223 * Add the byte as a hexadecimal number plus the space. 224 * We do it into temporary buffer to ensure that always 225 * the whole byte is printed. 226 */ 227 int val = buffer[index]; 228 char current_byte[16]; 229 int printed = snprintf(current_byte, 16, 230 "%s%02x", space_before, val); 231 if (printed < 0) { 232 break; 233 } 234 235 if ((size_t) printed > buffer_remaining_size) { 236 break; 237 } 238 239 /* We can safely add 1, because space for end 0 is reserved. */ 240 str_append(it, buffer_remaining_size + 1, current_byte); 241 242 buffer_remaining_size -= printed; 243 /* Point at the terminator 0. */ 244 it += printed; 245 index++; 246 247 if (index >= dumped_size) { 248 break; 249 } 250 } 251 252 /* Add how many bytes were not printed. */ 253 if (index < size) { 254 snprintf(it, REMAINDER_STR_LEN, 255 REMAINDER_STR_FMT, size - index); 256 } 199 /* Do the actual dump. */ 200 ddf_dump_buffer(buffer_dump[buffer_dump_index], BUFFER_DUMP_LEN, 201 buffer, 1, size, dumped_size); 257 202 258 203 /* Next time, use the other buffer. */ -
uspace/lib/usb/src/hc.c
radfdbd5 r1d1bb0f 98 98 return EBUSY; 99 99 100 async_sess_t *sess = devman_device_connect(EXCHANGE_ SERIALIZE,100 async_sess_t *sess = devman_device_connect(EXCHANGE_ATOMIC, 101 101 connection->hc_handle, 0); 102 102 if (!sess) … … 177 177 { 178 178 async_sess_t *parent_sess = 179 devman_parent_device_connect(EXCHANGE_ SERIALIZE, dev_handle,179 devman_parent_device_connect(EXCHANGE_ATOMIC, dev_handle, 180 180 IPC_FLAG_BLOCKING); 181 181 if (!parent_sess) … … 241 241 { 242 242 async_sess_t *parent_sess = 243 devman_parent_device_connect(EXCHANGE_ SERIALIZE, device_handle,243 devman_parent_device_connect(EXCHANGE_ATOMIC, device_handle, 244 244 IPC_FLAG_BLOCKING); 245 245 if (!parent_sess) -
uspace/lib/usb/src/usb.c
radfdbd5 r1d1bb0f 58 58 }; 59 59 60 static const char *str_direction[] = { 61 "in", 62 "out", 63 "both" 64 }; 65 60 66 /** String representation for USB transfer type. 61 67 * … … 84 90 } 85 91 92 /** String representation of USB direction. 93 * 94 * @param d The direction. 95 * @return Direction as a string (in English). 96 */ 97 const char *usb_str_direction(usb_direction_t d) 98 { 99 if (d >= ARR_SIZE(str_direction)) { 100 return "invalid"; 101 } 102 return str_direction[d]; 103 } 104 86 105 /** String representation of USB speed. 87 106 * -
uspace/lib/usbdev/src/pipes.c
radfdbd5 r1d1bb0f 81 81 { 82 82 async_sess_t *parent_sess = 83 devman_parent_device_connect(EXCHANGE_ SERIALIZE, device->handle,83 devman_parent_device_connect(EXCHANGE_ATOMIC, device->handle, 84 84 IPC_FLAG_BLOCKING); 85 85 if (!parent_sess) … … 122 122 123 123 async_sess_t *parent_sess = 124 devman_parent_device_connect(EXCHANGE_ SERIALIZE, dev->handle,124 devman_parent_device_connect(EXCHANGE_ATOMIC, dev->handle, 125 125 IPC_FLAG_BLOCKING); 126 126 if (!parent_sess) -
uspace/lib/usbhid/src/hidreq.c
radfdbd5 r1d1bb0f 82 82 value |= (type << 8); 83 83 84 usb_log_debug("Sending Set _Report request to the device.\n");84 usb_log_debug("Sending Set Report request to the device.\n"); 85 85 86 86 rc = usb_control_request_set(ctrl_pipe, … … 89 89 90 90 if (rc != EOK) { 91 usb_log_warning("Error sending output report to the keyboard:"92 " %s.\n", str_error(rc));91 usb_log_warning("Error sending Set Report request to the " 92 "device: %s.\n", str_error(rc)); 93 93 return rc; 94 94 } … … 129 129 int rc; 130 130 131 usb_log_debug("Sending Set _Protocol request to the device ("131 usb_log_debug("Sending Set Protocol request to the device (" 132 132 "protocol: %d, iface: %d).\n", protocol, iface_no); 133 133 … … 137 137 138 138 if (rc != EOK) { 139 usb_log_warning("Error sending output report to the keyboard:"140 " %s.\n", str_error(rc));139 usb_log_warning("Error sending Set Protocol request to the " 140 "device: %s.\n", str_error(rc)); 141 141 return rc; 142 142 } … … 177 177 int rc; 178 178 179 usb_log_debug("Sending Set _Idle request to the device ("179 usb_log_debug("Sending Set Idle request to the device (" 180 180 "duration: %u, iface: %d).\n", duration, iface_no); 181 181 … … 187 187 188 188 if (rc != EOK) { 189 usb_log_warning("Error sending output report to the keyboard: "189 usb_log_warning("Error sending Set Idle request to the device: " 190 190 "%s.\n", str_error(rc)); 191 191 return rc; … … 235 235 value |= (type << 8); 236 236 237 usb_log_debug("Sending Get _Report request to the device.\n");237 usb_log_debug("Sending Get Report request to the device.\n"); 238 238 239 239 rc = usb_control_request_get(ctrl_pipe, … … 243 243 244 244 if (rc != EOK) { 245 usb_log_warning("Error sending output report to the keyboard: "245 usb_log_warning("Error sending Get Report request to the device: " 246 246 "%s.\n", str_error(rc)); 247 247 return rc; … … 283 283 int rc; 284 284 285 usb_log_debug("Sending Get _Protocol request to the device ("285 usb_log_debug("Sending Get Protocol request to the device (" 286 286 "iface: %d).\n", iface_no); 287 287 … … 294 294 295 295 if (rc != EOK) { 296 usb_log_warning("Error sending output report to the keyboard:"297 " %s.\n", str_error(rc));296 usb_log_warning("Error sending Get Protocol request to the " 297 "device: %s.\n", str_error(rc)); 298 298 return rc; 299 299 } … … 344 344 int rc; 345 345 346 usb_log_debug("Sending Get _Idle request to the device ("346 usb_log_debug("Sending Get Idle request to the device (" 347 347 "iface: %d).\n", iface_no); 348 348 … … 357 357 358 358 if (rc != EOK) { 359 usb_log_warning("Error sending output report to the keyboard: "359 usb_log_warning("Error sending Get Idle request to the device: " 360 360 "%s.\n", str_error(rc)); 361 361 return rc; -
uspace/lib/usbhost/include/usb/host/batch.h
radfdbd5 r1d1bb0f 61 61 }; 62 62 63 /** Printf formatting string for dumping usb_transfer_batch_t. */ 64 #define USB_TRANSFER_BATCH_FMT "[%d:%d %s %s-%s %zuB/%zu]" 65 66 /** Printf arguments for dumping usb_transfer_batch_t. 67 * @param batch USB transfer batch to be dumped. 68 */ 69 #define USB_TRANSFER_BATCH_ARGS(batch) \ 70 (batch).ep->address, (batch).ep->endpoint, \ 71 usb_str_speed((batch).ep->speed), \ 72 usb_str_transfer_type_short((batch).ep->transfer_type), \ 73 usb_str_direction((batch).ep->direction), \ 74 (batch).buffer_size, (batch).ep->max_packet_size 75 76 63 77 void usb_transfer_batch_init( 64 78 usb_transfer_batch_t *instance, -
uspace/lib/usbhost/src/batch.c
radfdbd5 r1d1bb0f 128 128 memcpy(instance->buffer, instance->data_buffer, instance->buffer_size); 129 129 130 usb_log_debug("Batch(%p) done (T%d.%d, %s %s in, %zuB): %s (%d).\n", 131 instance, instance->ep->address, instance->ep->endpoint, 132 usb_str_speed(instance->ep->speed), 133 usb_str_transfer_type_short(instance->ep->transfer_type), 134 instance->transfered_size, str_error(instance->error), 135 instance->error); 130 usb_log_debug("Batch %p " USB_TRANSFER_BATCH_FMT " completed (%zuB): %s.\n", 131 instance, USB_TRANSFER_BATCH_ARGS(*instance), 132 instance->transfered_size, str_error(instance->error)); 136 133 137 134 instance->callback_in(instance->fun, instance->error, … … 148 145 assert(instance->callback_out); 149 146 150 usb_log_debug("Batch(%p) done (T%d.%d, %s %s out): %s (%d).\n", 151 instance, instance->ep->address, instance->ep->endpoint, 152 usb_str_speed(instance->ep->speed), 153 usb_str_transfer_type_short(instance->ep->transfer_type), 154 str_error(instance->error), instance->error); 147 usb_log_debug("Batch %p " USB_TRANSFER_BATCH_FMT " completed: %s.\n", 148 instance, USB_TRANSFER_BATCH_ARGS(*instance), 149 str_error(instance->error)); 155 150 156 151 instance->callback_out(instance->fun, … … 165 160 { 166 161 assert(instance); 167 usb_log_debug("Batch(%p) disposing.\n", instance); 162 usb_log_debug2("Batch %p " USB_TRANSFER_BATCH_FMT " disposing.\n", 163 instance, USB_TRANSFER_BATCH_ARGS(*instance)); 168 164 if (instance->private_data) { 169 165 assert(instance->private_data_dtor);
Note:
See TracChangeset
for help on using the changeset viewer.