Changes in / [6336b6e:7c169ce] in mainline
- Files:
-
- 1 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
.bzrignore
r6336b6e r7c169ce 109 109 ./uspace/srv/hw/irc/apic/apic 110 110 ./uspace/srv/hw/irc/i8259/i8259 111 ./uspace/srv/hw/netif/dp8390/dp8390 111 ./uspace/srv/hw/netif/ne2000/dp8390 112 ./uspace/srv/hw/netif/ne2000/ne2000 112 113 ./uspace/srv/loader/loader 113 114 ./uspace/srv/net/cfg/lo -
uspace/app/usbinfo/dump.c
r6336b6e r7c169ce 43 43 #include <usb/usb.h> 44 44 #include <usb/descriptor.h> 45 #include <usb/debug.h> 46 #include <usb/classes/classes.h> 45 47 46 48 #include "usbinfo.h" … … 50 52 #define BYTES_PER_LINE 12 51 53 52 #define BCD_INT(a) (((unsigned int)(a)) / 256)53 #define BCD_FRAC(a) (((unsigned int)(a)) % 256)54 54 55 #define BCD_FMT "%x.%x" 56 #define BCD_ARGS(a) BCD_INT((a)), BCD_FRAC((a)) 55 static const char *get_indent(size_t level) 56 { 57 static const char *indents[] = { 58 INDENT, 59 INDENT INDENT, 60 INDENT INDENT INDENT, 61 INDENT INDENT INDENT INDENT, 62 INDENT INDENT INDENT INDENT INDENT 63 }; 64 static size_t indents_count = sizeof(indents)/sizeof(indents[0]); 65 if (level >= indents_count) { 66 return indents[indents_count - 1]; 67 } 68 return indents[level]; 69 } 57 70 58 void dump_buffer(const char *msg, const uint8_t *buffer, size_t length) 71 void dump_buffer(const char *msg, size_t indent, 72 const uint8_t *buffer, size_t length) 59 73 { 60 printf("%s\n", msg); 74 if (msg != NULL) { 75 printf("%s\n", msg); 76 } 61 77 62 78 size_t i; 79 if (length > 0) { 80 printf("%s", get_indent(indent)); 81 } 63 82 for (i = 0; i < length; i++) { 64 printf(" 83 printf("0x%02X", buffer[i]); 65 84 if (((i > 0) && (((i+1) % BYTES_PER_LINE) == 0)) 66 85 || (i + 1 == length)) { 67 86 printf("\n"); 87 if (i + 1 < length) { 88 printf("%s", get_indent(indent)); 89 } 90 } else { 91 printf(" "); 68 92 } 69 93 } 94 } 95 96 void dump_usb_descriptor(uint8_t *descriptor, size_t size) 97 { 98 usb_dump_standard_descriptor(stdout, get_indent(0), "\n", 99 descriptor, size); 70 100 } 71 101 … … 83 113 } 84 114 85 void dump_standard_device_descriptor(usb_standard_device_descriptor_t *d)86 {87 printf("Standard device descriptor:\n");88 89 printf(INDENT "bLength = %d\n", d->length);90 printf(INDENT "bDescriptorType = 0x%02x\n", d->descriptor_type);91 printf(INDENT "bcdUSB = %d (" BCD_FMT ")\n", d->usb_spec_version,92 BCD_ARGS(d->usb_spec_version));93 printf(INDENT "bDeviceClass = 0x%02x\n", d->device_class);94 printf(INDENT "bDeviceSubClass = 0x%02x\n", d->device_subclass);95 printf(INDENT "bDeviceProtocol = 0x%02x\n", d->device_protocol);96 printf(INDENT "bMaxPacketSize0 = %d\n", d->max_packet_size);97 printf(INDENT "idVendor = %d\n", d->vendor_id);98 printf(INDENT "idProduct = %d\n", d->product_id);99 printf(INDENT "bcdDevice = %d\n", d->device_version);100 printf(INDENT "iManufacturer = %d\n", d->str_manufacturer);101 printf(INDENT "iProduct = %d\n", d->str_product);102 printf(INDENT "iSerialNumber = %d\n", d->str_serial_number);103 printf(INDENT "bNumConfigurations = %d\n", d->configuration_count);104 }105 106 void dump_standard_configuration_descriptor(107 int index, usb_standard_configuration_descriptor_t *d)108 {109 bool self_powered = d->attributes & 64;110 bool remote_wakeup = d->attributes & 32;111 112 printf("Standard configuration descriptor #%d\n", index);113 printf(INDENT "bLength = %d\n", d->length);114 printf(INDENT "bDescriptorType = 0x%02x\n", d->descriptor_type);115 printf(INDENT "wTotalLength = %d\n", d->total_length);116 printf(INDENT "bNumInterfaces = %d\n", d->interface_count);117 printf(INDENT "bConfigurationValue = %d\n", d->configuration_number);118 printf(INDENT "iConfiguration = %d\n", d->str_configuration);119 printf(INDENT "bmAttributes = %d [%s%s%s]\n", d->attributes,120 self_powered ? "self-powered" : "",121 (self_powered & remote_wakeup) ? ", " : "",122 remote_wakeup ? "remote-wakeup" : "");123 printf(INDENT "MaxPower = %d (%dmA)\n", d->max_power,124 2 * d->max_power);125 // printf(INDENT " = %d\n", d->);126 }127 128 115 static void dump_tree_descriptor(uint8_t *descriptor, size_t depth) 129 116 { 130 117 if (descriptor == NULL) { 131 118 return; 132 }133 while (depth > 0) {134 printf(" ");135 depth--;136 119 } 137 120 int type = (int) *(descriptor + 1); … … 151 134 #undef _TYPE 152 135 } 153 printf("0x%02x (%s)\n", type, name); 136 printf("%s%s (0x%02X):\n", get_indent(depth), name, type); 137 usb_dump_standard_descriptor(stdout, get_indent(depth), "\n", 138 descriptor, descriptor[0]); 154 139 } 155 140 … … 172 157 uint8_t *ptr = data->data; 173 158 printf("Descriptor tree:\n"); 174 dump_tree_internal(parser, data, ptr, 1);159 dump_tree_internal(parser, data, ptr, 0); 175 160 } 176 161 -
uspace/app/usbinfo/info.c
r6336b6e r7c169ce 72 72 return rc; 73 73 } 74 dump_ standard_device_descriptor(&device_descriptor);74 dump_usb_descriptor((uint8_t *)&device_descriptor, sizeof(device_descriptor)); 75 75 76 76 /* … … 91 91 return rc; 92 92 } 93 dump_standard_configuration_descriptor(config_index, 94 &config_descriptor); 93 //dump_standard_configuration_descriptor(config_index, &config_descriptor); 95 94 96 95 void *full_config_descriptor = malloc(config_descriptor.total_length); … … 109 108 return rc; 110 109 } 111 dump_buffer("Full configuration descriptor:",112 full_config_descriptor, config_descriptor.total_length);113 110 114 111 dump_descriptor_tree(full_config_descriptor, -
uspace/app/usbinfo/usbinfo.h
r6336b6e r7c169ce 44 44 #define NAME "usbinfo" 45 45 46 void dump_buffer(const char *, const uint8_t *, size_t);46 void dump_buffer(const char *, size_t, const uint8_t *, size_t); 47 47 void dump_match_ids(match_id_list_t *matches); 48 void dump_standard_device_descriptor(usb_standard_device_descriptor_t *); 49 void dump_standard_configuration_descriptor(int, 50 usb_standard_configuration_descriptor_t *); 48 void dump_usb_descriptor(uint8_t *, size_t); 51 49 int dump_device(int, usb_address_t); 52 50 void dump_descriptor_tree(uint8_t *, size_t); -
uspace/app/virtusbkbd/keys.h
r6336b6e r7c169ce 40 40 41 41 /** Maximum number of keys that can be pressed simultaneously. */ 42 #define KB_MAX_KEYS_AT_ONCE 442 #define KB_MAX_KEYS_AT_ONCE 6 43 43 44 44 /** Key code type. */ -
uspace/drv/usbhub/main.c
r6336b6e r7c169ce 52 52 while(true){ 53 53 usb_hub_check_hub_changes(); 54 async_usleep(1000 * 1000 );54 async_usleep(1000 * 1000 );/// \TODO proper number once 55 55 } 56 56 return 0; -
uspace/drv/usbhub/usbhub.c
r6336b6e r7c169ce 46 46 #include "usbhub_private.h" 47 47 #include "port_status.h" 48 #include "usb/usb.h" 48 49 49 50 static usb_iface_t hub_usb_iface = { … … 85 86 86 87 // get hub descriptor 87 usb_target_t target;88 target.address = addr;89 target.endpoint = 0;90 usb_device_request_setup_packet_t request;91 //printf("[usb_hub] creating descriptor request\n");92 usb_hub_set_descriptor_request(&request);93 88 94 89 //printf("[usb_hub] creating serialized descriptor\n"); … … 98 93 int opResult; 99 94 //printf("[usb_hub] starting control transaction\n"); 100 opResult = usb_drv_sync_control_read( 101 hc, target, &request, serialized_descriptor, 95 96 opResult = usb_drv_req_get_descriptor(hc, addr, 97 USB_REQUEST_TYPE_CLASS, 98 USB_DESCTYPE_HUB, 0, 0, serialized_descriptor, 102 99 USB_HUB_MAX_DESCRIPTOR_SIZE, &received_size); 100 103 101 if (opResult != EOK) { 104 102 dprintf(1,"[usb_hub] failed when receiving hub descriptor, badcode = %d",opResult); … … 155 153 int port; 156 154 int opResult; 157 usb_device_request_setup_packet_t request;158 155 usb_target_t target; 159 156 target.address = hub_info->usb_device->address; … … 173 170 if(std_descriptor.configuration_count<1){ 174 171 dprintf(1,"[usb_hub] THERE ARE NO CONFIGURATIONS AVAILABLE"); 172 //shouldn`t I return? 175 173 } 176 174 /// \TODO check other configurations … … 184 182 } 185 183 //set configuration 186 request.request_type = 0; 187 request.request = USB_DEVREQ_SET_CONFIGURATION; 188 request.index=0; 189 request.length=0; 190 request.value_high=0; 191 request.value_low = config_descriptor.configuration_number; 192 opResult = usb_drv_sync_control_write(hc, target, &request, NULL, 0); 184 opResult = usb_drv_req_set_configuration(hc, target.address, 185 config_descriptor.configuration_number); 186 193 187 if (opResult != EOK) { 194 188 dprintf(1,"[usb_hub]something went wrong when setting hub`s configuration, %d", opResult); 195 189 } 196 190 191 usb_device_request_setup_packet_t request; 197 192 for (port = 1; port < hub_info->port_count+1; ++port) { 198 193 usb_hub_set_power_port_request(&request, port); … … 229 224 230 225 231 232 226 //********************************************* 233 227 // … … 237 231 238 232 /** 239 * convenience function for releasing default address and writing debug info240 * (these few lines are used too often to be written again and again) 233 * Convenience function for releasing default address and writing debug info 234 * (these few lines are used too often to be written again and again). 241 235 * @param hc 242 236 * @return … … 253 247 254 248 /** 255 * reset the port with new device and reserve the default address249 * Reset the port with new device and reserve the default address. 256 250 * @param hc 257 251 * @param port … … 282 276 283 277 /** 284 * finalize adding new device after port reset278 * Finalize adding new device after port reset 285 279 * @param hc 286 280 * @param port … … 345 339 346 340 /** 347 * unregister device address in hc341 * Unregister device address in hc 348 342 * @param hc 349 343 * @param port … … 355 349 int opResult; 356 350 357 /// \TODO remove device 351 /** \TODO remove device from device manager - not yet implemented in 352 * devide manager 353 */ 358 354 359 355 hub->attached_devs[port].devman_handle=0; … … 376 372 377 373 /** 378 * process interrupts on given hub port374 * Process interrupts on given hub port 379 375 * @param hc 380 376 * @param port … … 434 430 usb_port_set_reset_completed(&status, false); 435 431 usb_port_set_dev_connected(&status, false); 436 if (status) { 437 dprintf(1,"[usb_hub]there was some unsupported change on port %d",port); 432 if (status>>16) { 433 dprintf(1,"[usb_hub]there was some unsupported change on port %d: %X",port,status); 434 438 435 } 439 436 /// \TODO handle other changes … … 442 439 } 443 440 444 /* Check changes on all known hubs. 441 /** 442 * Check changes on all known hubs. 445 443 */ 446 444 void usb_hub_check_hub_changes(void) { -
uspace/drv/usbhub/usbhub_private.h
r6336b6e r7c169ce 31 31 */ 32 32 /** @file 33 * @brief Hub driver .33 * @brief Hub driver private definitions 34 34 */ 35 35 … … 68 68 69 69 /** 70 * create hub structure instance70 * Create hub structure instance 71 71 * 72 72 * Set the address and port count information most importantly. … … 78 78 usb_hub_info_t * usb_create_hub_info(device_t * device, int hc); 79 79 80 /** list of hubs maanged by this driver */80 /** List of hubs maanged by this driver */ 81 81 extern usb_general_list_t usb_hub_list; 82 82 83 /** lock for hub list*/83 /** Lock for hub list*/ 84 84 extern futex_t usb_hub_list_lock; 85 85 86 86 87 87 /** 88 * perform complete control read transaction88 * Perform complete control read transaction 89 89 * 90 * manages all three steps of transaction: setup, read and finalize90 * Manages all three steps of transaction: setup, read and finalize 91 91 * @param phone 92 92 * @param target 93 * @param request request for data94 * @param rcvd_buffer received data93 * @param request Request packet 94 * @param rcvd_buffer Received data 95 95 * @param rcvd_size 96 * @param actual_size actual size of received data96 * @param actual_size Actual size of received data 97 97 * @return error code 98 98 */ … … 104 104 105 105 /** 106 * perform complete control write transaction106 * Perform complete control write transaction 107 107 * 108 * manages all three steps of transaction: setup, write and finalize108 * Manages all three steps of transaction: setup, write and finalize 109 109 * @param phone 110 110 * @param target 111 * @param request request to send data111 * @param request Request packet to send data 112 112 * @param sent_buffer 113 113 * @param sent_size … … 121 121 122 122 /** 123 * set the device request to be a get hub descriptor request.123 * Set the device request to be a get hub descriptor request. 124 124 * @warning the size is allways set to USB_HUB_MAX_DESCRIPTOR_SIZE 125 125 * @param request … … 137 137 } 138 138 139 /** 140 * Clear feature on hub port. 141 * 142 * @param hc Host controller telephone 143 * @param address Hub address 144 * @param port_index Port 145 * @param feature Feature selector 146 * @return Operation result 147 */ 139 148 static inline int usb_hub_clear_port_feature(int hc, usb_address_t address, 140 149 int port_index, -
uspace/drv/usbkbd/Makefile
r6336b6e r7c169ce 36 36 descparser.c \ 37 37 descdump.c \ 38 conv.c 38 conv.c \ 39 us_qwerty.c 39 40 40 41 include $(USPACE_PREFIX)/Makefile.common -
uspace/drv/usbkbd/descparser.c
r6336b6e r7c169ce 187 187 case USB_DESCTYPE_HID: 188 188 if (desc_size < sizeof(usb_standard_hid_descriptor_t)) { 189 printf("Wrong size of descriptor: %d (should be % d)\n",189 printf("Wrong size of descriptor: %d (should be %zu)\n", 190 190 desc_size, sizeof(usb_standard_hid_descriptor_t)); 191 191 ret = EINVAL; -
uspace/drv/usbkbd/main.c
r6336b6e r7c169ce 42 42 #include "descdump.h" 43 43 #include "conv.h" 44 #include "layout.h" 44 45 45 46 #define BUFFER_SIZE 32 … … 125 126 static unsigned lock_keys; 126 127 128 #define NUM_LAYOUTS 3 129 130 static layout_op_t *layout[NUM_LAYOUTS] = { 131 &us_qwerty_op, 132 &us_dvorak_op, 133 &cz_op 134 }; 135 127 136 // TODO: put to device? 128 //static int active_layout = 0;137 static int active_layout = 0; 129 138 130 139 static void kbd_push_ev(int type, unsigned int key) … … 206 215 ev.mods = mods; 207 216 208 //ev.c = layout[active_layout]->parse_ev(&ev);217 ev.c = layout[active_layout]->parse_ev(&ev); 209 218 210 219 printf("Sending key %d to the console\n", ev.key); 211 220 assert(console_callback_phone != -1); 212 async_msg_4(console_callback_phone, KBD_EVENT, ev.type, ev.key, ev.mods, 0);221 async_msg_4(console_callback_phone, KBD_EVENT, ev.type, ev.key, ev.mods, ev.c); 213 222 } 214 223 /* … … 405 414 //usb_hid_parse_report(kbd_dev->parser, buffer, actual_size, callbacks, 406 415 // NULL); 407 //printf("Calling usb_hid_boot_keyboard_input_report() with size %d\n",408 //actual_size);409 //dump_buffer("bufffer: ", buffer, actual_size);416 printf("Calling usb_hid_boot_keyboard_input_report() with size %d\n", 417 actual_size); 418 //dump_buffer("bufffer: ", buffer, actual_size); 410 419 int rc = usb_hid_boot_keyboard_input_report(buffer, actual_size, callbacks, 411 420 NULL); … … 457 466 */ 458 467 if (actual_size == 0) { 459 printf("Keyboar returned NAK\n");468 printf("Keyboard returned NAK\n"); 460 469 continue; 461 470 } … … 465 474 */ 466 475 printf("Calling usbkbd_process_interrupt_in()\n"); 467 // actual_size is not set, workaround... 468 usbkbd_process_interrupt_in(kbd_dev, buffer, /*actual_size*/8); 476 usbkbd_process_interrupt_in(kbd_dev, buffer, actual_size); 469 477 } 470 478 -
uspace/drv/vhc/devices.c
r6336b6e r7c169ce 138 138 } else { 139 139 async_wait_for(req, &answer_rc); 140 transaction->actual_len = IPC_GET_ARG1(answer_data); 140 141 rc = (int)answer_rc; 141 142 } -
uspace/drv/vhc/hc.c
r6336b6e r7c169ce 96 96 usb_str_transaction_outcome(outcome)); 97 97 98 transaction->callback(transaction->buffer, transaction-> len, outcome,99 transaction->callback_arg);98 transaction->callback(transaction->buffer, transaction->actual_len, 99 outcome, transaction->callback_arg); 100 100 } 101 101 … … 169 169 transaction->buffer = buffer; 170 170 transaction->len = len; 171 transaction->actual_len = len; 171 172 transaction->callback = callback; 172 173 transaction->callback_arg = arg; -
uspace/drv/vhc/hc.h
r6336b6e r7c169ce 65 65 /** Transaction data length. */ 66 66 size_t len; 67 /** Data length actually transfered. */ 68 size_t actual_len; 67 69 /** Callback after transaction is done. */ 68 70 hc_transaction_done_callback_t callback; -
uspace/lib/usb/Makefile
r6336b6e r7c169ce 38 38 src/dp.c \ 39 39 src/drvpsync.c \ 40 src/dump.c \ 40 41 src/hcdhubd.c \ 41 42 src/hcdrv.c \ -
uspace/lib/usb/include/usb/debug.h
r6336b6e r7c169ce 35 35 #ifndef LIBUSB_DEBUG_H_ 36 36 #define LIBUSB_DEBUG_H_ 37 #include <stdio.h> 38 #include <usb/usb.h> 37 39 38 40 void usb_dprintf(const char *tag, int level, const char *format, ...); 39 41 void usb_dprintf_enable(const char *tag, int level); 40 42 43 void usb_dump_standard_descriptor(FILE *, const char *, const char *, 44 const uint8_t *, size_t); 41 45 42 46 #endif -
uspace/lib/usbvirt/src/callback.c
r6336b6e r7c169ce 160 160 return; 161 161 } 162 async_data_read_finalize(callid, buffer, receive_len); 163 } 164 165 ipc_answer_0(iid, rc); 162 if (len > receive_len) { 163 len = receive_len; 164 } 165 async_data_read_finalize(callid, buffer, len); 166 } 167 168 ipc_answer_1(iid, rc, len); 166 169 } 167 170
Note:
See TracChangeset
for help on using the changeset viewer.