Changeset 400735e in mainline for uspace/drv
- Timestamp:
- 2011-05-28T14:30:58Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/fix-logger-deadlock, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3fb5a3e
- Parents:
- e8f826b (diff), 48141f0 (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. - Location:
- uspace/drv
- Files:
-
- 1 deleted
- 29 edited
-
ohci/hc.c (modified) (2 diffs)
-
ohci/root_hub.c (modified) (12 diffs)
-
uhci-hcd/Makefile (modified) (1 diff)
-
uhci-hcd/batch.h (modified) (1 diff)
-
uhci-hcd/hc.c (modified) (6 diffs)
-
uhci-hcd/hc.h (modified) (2 diffs)
-
uhci-hcd/iface.c (modified) (11 diffs)
-
uhci-hcd/pci.c (modified) (8 diffs)
-
uhci-hcd/pci.h (modified) (1 diff)
-
uhci-hcd/root_hub.c (modified) (1 diff)
-
uhci-hcd/root_hub.h (modified) (1 diff)
-
uhci-hcd/transfer_list.c (modified) (6 diffs)
-
uhci-hcd/transfer_list.h (modified) (1 diff)
-
uhci-hcd/uhci.c (modified) (5 diffs)
-
uhci-hcd/uhci.h (modified) (1 diff)
-
uhci-hcd/utils/malloc32.h (modified) (5 diffs)
-
uhci-hcd/utils/slab.c (deleted)
-
uhci-rhd/main.c (modified) (4 diffs)
-
uhci-rhd/port.c (modified) (12 diffs)
-
uhci-rhd/port.h (modified) (1 diff)
-
usbhid/generic/hiddev.c (modified) (10 diffs)
-
usbhid/kbd/kbddev.c (modified) (1 diff)
-
usbhid/mouse/mousedev.c (modified) (1 diff)
-
usbhid/multimedia/keymap.c (modified) (2 diffs)
-
usbhid/multimedia/keymap.h (modified) (1 diff)
-
usbhid/multimedia/multimedia.c (modified) (6 diffs)
-
usbhid/subdrivers.c (modified) (4 diffs)
-
usbhid/usbhid.c (modified) (9 diffs)
-
usbhid/usbhid.h (modified) (2 diffs)
-
usbhub/usbhub.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/hc.c
re8f826b r400735e 343 343 { 344 344 assert(instance); 345 usb_log_debug("OHCI(%p) interrupt: %x.\n", instance, status);346 345 if ((status & ~I_SF) == 0) /* ignore sof status */ 347 346 return; 347 usb_log_debug2("OHCI(%p) interrupt: %x.\n", instance, status); 348 348 if (status & I_RHSC) 349 349 rh_interrupt(&instance->rh); … … 565 565 bzero(&instance->rh, sizeof(instance->rh)); 566 566 /* Init queues */ 567 hc_init_transfer_lists(instance); 567 const int ret = hc_init_transfer_lists(instance); 568 if (ret != EOK) { 569 return ret; 570 } 568 571 569 572 /*Init HCCA */ -
uspace/drv/ohci/root_hub.c
re8f826b r400735e 61 61 .vendor_id = 0x16db, 62 62 .product_id = 0x0001, 63 /// \TODO these values migt be different64 63 .str_serial_number = 0, 65 64 .usb_spec_version = 0x110, … … 119 118 static const uint32_t hub_clear_feature_by_writing_one_mask = 120 119 RHS_CLEAR_PORT_POWER; 121 // 1 << USB_HUB_FEATURE_C_HUB_LOCAL_POWER;122 120 123 121 /** … … 127 125 RHS_LPSC_FLAG | 128 126 RHS_OCIC_FLAG; 129 //(1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT) |130 //(1 << USB_HUB_FEATURE_C_HUB_LOCAL_POWER);131 127 132 128 /** … … 135 131 static const uint32_t hub_set_feature_direct_mask = 136 132 RHS_SET_PORT_POWER; 137 //(1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT);138 133 139 134 /** … … 160 155 RHPS_PRSC_FLAG; 161 156 162 /*163 164 (1 << USB_HUB_FEATURE_PORT_CONNECTION) |165 (1 << USB_HUB_FEATURE_PORT_SUSPEND) |166 (1 << USB_HUB_FEATURE_PORT_OVER_CURRENT) |167 (1 << USB_HUB_FEATURE_PORT_POWER) |168 (1 << USB_HUB_FEATURE_C_PORT_CONNECTION) |169 (1 << USB_HUB_FEATURE_C_PORT_ENABLE) |170 (1 << USB_HUB_FEATURE_C_PORT_SUSPEND) |171 (1 << USB_HUB_FEATURE_C_PORT_OVER_CURRENT) |172 (1 << USB_HUB_FEATURE_C_PORT_RESET);173 */174 157 //note that USB_HUB_FEATURE_PORT_POWER bit is translated into 175 158 //USB_HUB_FEATURE_PORT_LOW_SPEED for port set feature request … … 179 162 */ 180 163 static const uint32_t port_status_change_mask = RHPS_CHANGE_WC_MASK; 181 /* (1 << USB_HUB_FEATURE_C_PORT_CONNECTION) |182 (1 << USB_HUB_FEATURE_C_PORT_ENABLE) |183 (1 << USB_HUB_FEATURE_C_PORT_OVER_CURRENT) |184 (1 << USB_HUB_FEATURE_C_PORT_RESET) |185 (1 << USB_HUB_FEATURE_C_PORT_SUSPEND);186 */187 164 188 165 static int create_serialized_hub_descriptor(rh_t *instance); … … 420 397 * create answer to port status_request 421 398 * 422 * Copy content of corresponding port status register to answer buffer. 399 * Copy content of corresponding port status register to answer buffer. The 400 * format of the port status register and port status data is the same ( 401 * see OHCI root hub and USB hub documentation). 423 402 * 424 403 * @param instance root hub instance … … 431 410 if (port < 1 || port > instance->port_count) 432 411 return EINVAL; 433 uint32_t * uint32_buffer = (uint32_t*) request->data_buffer;434 412 request->transfered_size = 4; 435 uint32_buffer[0] = instance->registers->rh_port_status[port - 1]; 413 uint32_t data = instance->registers->rh_port_status[port - 1]; 414 memcpy(request->data_buffer,&data,4); 436 415 #if 0 437 416 int i; … … 450 429 * create answer to port status_request 451 430 * 452 * Copy content of hub status register to answer buffer. 431 * This copies flags in hub status register into the buffer. The format of the 432 * status register and status message is the same, according to USB hub 433 * specification and OHCI root hub specification. 453 434 * 454 435 * @param instance root hub instance … … 458 439 static int process_get_hub_status_request(rh_t *instance, 459 440 usb_transfer_batch_t * request) { 460 uint32_t * uint32_buffer = (uint32_t*) request->data_buffer;441 //uint32_t * uint32_buffer = (uint32_t*) request->data_buffer; 461 442 request->transfered_size = 4; 462 443 //bits, 0,1,16,17 463 444 uint32_t mask = 1 | (1 << 1) | (1 << 16) | (1 << 17); 464 uint32_buffer[0] = mask & instance->registers->rh_status; 445 uint32_t data = mask & instance->registers->rh_status; 446 //uint32_buffer[0] = mask & instance->registers->rh_status; 447 memcpy(request->data_buffer,&data,4); 465 448 466 449 return EOK; … … 516 499 | (1 << (USB_HUB_FEATURE_C_HUB_OVER_CURRENT + 16)); 517 500 bzero(bitmap, instance->interrupt_mask_size); 518 if ( instance->registers->rh_status & mask) {501 if ((instance->registers->rh_status & mask) !=0 ) { 519 502 bitmap[0] = 1; 520 503 } … … 522 505 mask = port_status_change_mask; 523 506 for (port = 1; port <= instance->port_count; ++port) { 524 if ( mask & instance->registers->rh_port_status[port - 1]) {507 if ((mask & instance->registers->rh_port_status[port - 1]) != 0) { 525 508 526 509 bitmap[(port) / 8] += 1 << (port % 8); -
uspace/drv/uhci-hcd/Makefile
re8f826b r400735e 48 48 root_hub.c \ 49 49 hw_struct/transfer_descriptor.c \ 50 utils/slab.c \51 50 pci.c \ 52 51 batch.c -
uspace/drv/uhci-hcd/batch.h
re8f826b r400735e 35 35 #define DRV_UHCI_BATCH_H 36 36 37 #include <usbhc_iface.h>38 #include <usb/usb.h>39 #include <usb/host/device_keeper.h>40 #include <usb/host/endpoint.h>41 37 #include <usb/host/batch.h> 42 38 -
uspace/drv/uhci-hcd/hc.c
re8f826b r400735e 39 39 #include <usb/debug.h> 40 40 #include <usb/usb.h> 41 #include <usb/ddfiface.h>42 #include <usb_iface.h>43 41 44 42 #include "hc.h" … … 85 83 /* allow access to hc control registers */ 86 84 regs_t *io; 87 ret = pio_enable(regs, reg_size, (void **)&io);85 ret = pio_enable(regs, reg_size, (void **)&io); 88 86 CHECK_RET_RETURN(ret, 89 87 "Failed(%d) to gain access to registers at %p: %s.\n", … … 143 141 } 144 142 145 uint16_t status = pio_read_16(®isters->usbcmd);143 const uint16_t status = pio_read_16(®isters->usbcmd); 146 144 if (status != 0) 147 145 usb_log_warning("Previous command value: %x.\n", status); … … 212 210 /* Init USB frame list page*/ 213 211 instance->frame_list = get_page(); 214 ret = instance ? EOK : ENOMEM;212 ret = instance->frame_list ? EOK : ENOMEM; 215 213 CHECK_RET_RETURN(ret, "Failed to get frame list page.\n"); 216 214 usb_log_debug("Initialized frame list at %p.\n", instance->frame_list); … … 277 275 &instance->transfers_control_slow); 278 276 279 /*FSBR*/ 277 /*FSBR, This feature is not needed (adds no benefit) and is supposedly 278 * buggy on certain hw, enable at your own risk. */ 280 279 #ifdef FSBR 281 280 transfer_list_set_next(&instance->transfers_bulk_full, … … 428 427 } 429 428 430 uintptr_t frame_list =429 const uintptr_t frame_list = 431 430 pio_read_32(&instance->registers->flbaseadd) & ~0xfff; 432 431 if (frame_list != addr_to_phys(instance->frame_list)) { -
uspace/drv/uhci-hcd/hc.h
re8f826b r400735e 37 37 38 38 #include <fibril.h> 39 #include <fibril_synch.h>40 #include <adt/list.h>41 39 #include <ddi.h> 42 40 43 #include <usbhc_iface.h>44 41 #include <usb/host/device_keeper.h> 45 42 #include <usb/host/usb_endpoint_manager.h> 43 #include <usb/host/batch.h> 46 44 47 #include "batch.h"48 45 #include "transfer_list.h" 49 46 … … 154 151 */ 155 152 static inline hc_t * fun_to_hc(ddf_fun_t *fun) 156 { return (hc_t*)fun->driver_data; } 153 { 154 assert(fun); 155 return fun->driver_data; 156 } 157 157 #endif 158 158 /** -
uspace/drv/uhci-hcd/iface.c
re8f826b r400735e 39 39 40 40 #include "iface.h" 41 #include "batch.h" 41 42 #include "hc.h" 42 43 … … 122 123 return EOK; 123 124 } 124 125 /*----------------------------------------------------------------------------*/ 125 126 /** Find device handle by address interface function. 126 127 * … … 136 137 hc_t *hc = fun_to_hc(fun); 137 138 assert(hc); 138 bool found =139 const bool found = 139 140 usb_device_keeper_find_by_address(&hc->manager, address, handle); 140 141 return found ? EOK : ENOENT; 141 142 } 142 143 143 /*----------------------------------------------------------------------------*/ 144 144 /** Release address interface function … … 164 164 size_t max_packet_size, unsigned int interval) 165 165 { 166 assert(fun); 166 167 hc_t *hc = fun_to_hc(fun); 167 168 assert(hc); … … 183 184 usb_endpoint_t endpoint, usb_direction_t direction) 184 185 { 186 assert(fun); 185 187 hc_t *hc = fun_to_hc(fun); 186 188 assert(hc); … … 211 213 if (ret != EOK) 212 214 return ret; 215 assert(batch); 216 assert(hc); 213 217 batch_interrupt_out(batch); 214 218 ret = hc_schedule(hc, batch); … … 239 243 if (ret != EOK) 240 244 return ret; 245 assert(batch); 246 assert(hc); 241 247 batch_interrupt_in(batch); 242 248 ret = hc_schedule(hc, batch); … … 267 273 if (ret != EOK) 268 274 return ret; 275 assert(batch); 276 assert(hc); 269 277 batch_bulk_out(batch); 270 278 ret = hc_schedule(hc, batch); … … 295 303 if (ret != EOK) 296 304 return ret; 305 assert(batch); 306 assert(hc); 297 307 batch_bulk_in(batch); 298 308 ret = hc_schedule(hc, batch); … … 327 337 if (ret != EOK) 328 338 return ret; 339 assert(batch); 340 assert(hc); 329 341 usb_endpoint_manager_reset_if_need(&hc->ep_manager, target, setup_data); 330 342 batch_control_write(batch); … … 360 372 if (ret != EOK) 361 373 return ret; 374 assert(batch); 375 assert(hc); 362 376 batch_control_read(batch); 363 377 ret = hc_schedule(hc, batch); -
uspace/drv/uhci-hcd/pci.c
re8f826b r400735e 52 52 * @return Error code. 53 53 */ 54 int pci_get_my_registers( ddf_dev_t *dev,54 int pci_get_my_registers(const ddf_dev_t *dev, 55 55 uintptr_t *io_reg_address, size_t *io_reg_size, int *irq_no) 56 56 { 57 assert(dev != NULL); 57 assert(dev); 58 assert(io_reg_address); 59 assert(io_reg_size); 60 assert(irq_no); 58 61 59 62 int parent_phone = … … 66 69 int rc = hw_res_get_resource_list(parent_phone, &hw_resources); 67 70 if (rc != EOK) { 68 goto leave; 71 async_hangup(parent_phone); 72 return rc; 69 73 } 70 74 … … 78 82 size_t i; 79 83 for (i = 0; i < hw_resources.count; i++) { 80 hw_resource_t *res = &hw_resources.resources[i];84 const hw_resource_t *res = &hw_resources.resources[i]; 81 85 switch (res->type) 82 86 { … … 99 103 } 100 104 } 105 async_hangup(parent_phone); 101 106 102 if (!io_found || !irq_found) { 103 rc = ENOENT; 104 goto leave; 105 } 107 if (!io_found || !irq_found) 108 return ENOENT; 106 109 107 110 *io_reg_address = io_address; … … 109 112 *irq_no = irq; 110 113 111 rc = EOK; 112 leave: 113 async_hangup(parent_phone); 114 return rc; 114 return EOK; 115 115 } 116 116 /*----------------------------------------------------------------------------*/ … … 120 120 * @return Error code. 121 121 */ 122 int pci_enable_interrupts( ddf_dev_t *device)122 int pci_enable_interrupts(const ddf_dev_t *device) 123 123 { 124 int parent_phone = devman_parent_device_connect(device->handle, 125 IPC_FLAG_BLOCKING); 126 bool enabled = hw_res_enable_interrupt(parent_phone); 124 const int parent_phone = 125 devman_parent_device_connect(device->handle, IPC_FLAG_BLOCKING); 126 if (parent_phone < 0) { 127 return parent_phone; 128 } 129 const bool enabled = hw_res_enable_interrupt(parent_phone); 127 130 async_hangup(parent_phone); 128 131 return enabled ? EOK : EIO; … … 134 137 * @return Error code. 135 138 */ 136 int pci_disable_legacy( ddf_dev_t *device)139 int pci_disable_legacy(const ddf_dev_t *device) 137 140 { 138 141 assert(device); 139 int parent_phone =142 const int parent_phone = 140 143 devman_parent_device_connect(device->handle, IPC_FLAG_BLOCKING); 141 144 if (parent_phone < 0) { … … 145 148 /* See UHCI design guide for these values p.45, 146 149 * write all WC bits in USB legacy register */ 147 sysarg_t address = 0xc0;148 sysarg_t value = 0xaf00;150 const sysarg_t address = 0xc0; 151 const sysarg_t value = 0xaf00; 149 152 150 int rc = async_req_3_0(parent_phone, DEV_IFACE_ID(PCI_DEV_IFACE),153 const int rc = async_req_3_0(parent_phone, DEV_IFACE_ID(PCI_DEV_IFACE), 151 154 IPC_M_CONFIG_SPACE_WRITE_16, address, value); 152 155 async_hangup(parent_phone); -
uspace/drv/uhci-hcd/pci.h
re8f826b r400735e 38 38 #include <ddf/driver.h> 39 39 40 int pci_get_my_registers( ddf_dev_t *, uintptr_t *, size_t *, int *);41 int pci_enable_interrupts( ddf_dev_t *);42 int pci_disable_legacy( ddf_dev_t *);40 int pci_get_my_registers(const ddf_dev_t *, uintptr_t *, size_t *, int *); 41 int pci_enable_interrupts(const ddf_dev_t *); 42 int pci_disable_legacy(const ddf_dev_t *); 43 43 44 44 #endif -
uspace/drv/uhci-hcd/root_hub.c
re8f826b r400735e 60 60 return ret; 61 61 } 62 assert(match_str); 62 63 63 64 ret = ddf_fun_add_match_id(fun, match_str, 100); -
uspace/drv/uhci-hcd/root_hub.h
re8f826b r400735e 43 43 /** List of resources available to the root hub. */ 44 44 hw_resource_list_t resource_list; 45 /** The only resource in the above list */45 /** The only resource in the RH resource list */ 46 46 hw_resource_t io_regs; 47 47 } rh_t; -
uspace/drv/uhci-hcd/transfer_list.c
re8f826b r400735e 36 36 #include <arch/barrier.h> 37 37 38 38 39 #include "transfer_list.h" 40 #include "batch.h" 39 41 40 42 static void transfer_list_remove_batch( … … 58 60 return ENOMEM; 59 61 } 60 uint32_t queue_head_pa = addr_to_phys(instance->queue_head);62 const uint32_t queue_head_pa = addr_to_phys(instance->queue_head); 61 63 usb_log_debug2("Transfer list %s setup with QH: %p (%#" PRIx32" ).\n", 62 64 name, instance->queue_head, queue_head_pa); … … 90 92 { 91 93 assert(instance); 94 assert(instance->queue_head); 92 95 assert(next); 93 if (!instance->queue_head)94 return;95 96 /* Set queue_head.next to point to the follower */ 96 97 qh_set_next_qh(instance->queue_head, next->queue_head); … … 137 138 write_barrier(); 138 139 139 /* Add to the driver list */140 /* Add to the driver's list */ 140 141 list_append(&batch->link, &instance->batch_list); 141 142 … … 160 161 link_t *current = instance->batch_list.next; 161 162 while (current != &instance->batch_list) { 162 link_t * next = current->next;163 link_t * const next = current->next; 163 164 usb_transfer_batch_t *batch = 164 165 usb_transfer_batch_from_link(current); … … 182 183 fibril_mutex_lock(&instance->guard); 183 184 while (!list_empty(&instance->batch_list)) { 184 link_t * current = instance->batch_list.next;185 link_t * const current = instance->batch_list.next; 185 186 usb_transfer_batch_t *batch = 186 187 usb_transfer_batch_from_link(current); -
uspace/drv/uhci-hcd/transfer_list.h
re8f826b r400735e 36 36 37 37 #include <fibril_synch.h> 38 #include <usb/host/batch.h> 38 39 39 #include "batch.h"40 40 #include "hw_struct/queue_head.h" 41 41 -
uspace/drv/uhci-hcd/uhci.c
re8f826b r400735e 61 61 } uhci_t; 62 62 63 static inline uhci_t * dev_to_uhci( ddf_dev_t *dev)63 static inline uhci_t * dev_to_uhci(const ddf_dev_t *dev) 64 64 { 65 65 assert(dev); … … 77 77 { 78 78 assert(dev); 79 hc_t *hc = &((uhci_t*)dev->driver_data)->hc; 80 uint16_t status = IPC_GET_ARG1(*call); 79 uhci_t *uhci = dev_to_uhci(dev); 80 hc_t *hc = &uhci->hc; 81 const uint16_t status = IPC_GET_ARG1(*call); 81 82 assert(hc); 82 83 hc_interrupt(hc, status); 83 84 } 85 /*----------------------------------------------------------------------------*/ 86 /** Operations supported by the HC driver */ 87 static ddf_dev_ops_t hc_ops = { 88 .interfaces[USBHC_DEV_IFACE] = &hc_iface, /* see iface.h/c */ 89 }; 84 90 /*----------------------------------------------------------------------------*/ 85 91 /** Get address of the device identified by handle. … … 113 119 * @return Error code. 114 120 */ 115 static int usb_iface_get_hc_handle( 116 ddf_fun_t *fun, devman_handle_t *handle) 121 static int usb_iface_get_hc_handle(ddf_fun_t *fun, devman_handle_t *handle) 117 122 { 118 123 assert(fun); … … 131 136 }; 132 137 /*----------------------------------------------------------------------------*/ 133 /** Operations supported by the HC driver */134 static ddf_dev_ops_t hc_ops = {135 .interfaces[USBHC_DEV_IFACE] = &hc_iface, /* see iface.h/c */136 };137 /*----------------------------------------------------------------------------*/138 138 /** Get root hub hw resources (I/O registers). 139 139 * … … 144 144 { 145 145 assert(fun); 146 return &((rh_t*)fun->driver_data)->resource_list; 146 rh_t *rh = fun->driver_data; 147 assert(rh); 148 return &rh->resource_list; 147 149 } 148 150 /*----------------------------------------------------------------------------*/ -
uspace/drv/uhci-hcd/uhci.h
re8f826b r400735e 35 35 #ifndef DRV_UHCI_UHCI_H 36 36 #define DRV_UHCI_UHCI_H 37 #include <ddi.h>38 37 #include <ddf/driver.h> 39 38 -
uspace/drv/uhci-hcd/utils/malloc32.h
re8f826b r400735e 41 41 #include <as.h> 42 42 43 #include "slab.h"44 45 43 #define UHCI_STRCUTURES_ALIGNMENT 16 46 44 #define UHCI_REQUIRED_PAGE_SIZE 4096 … … 59 57 uintptr_t result; 60 58 const int ret = as_get_physical_mapping(addr, &result); 61 assert(ret == EOK);62 63 59 if (ret != EOK) 64 60 return 0; … … 72 68 */ 73 69 static inline void * malloc32(size_t size) { 74 if (size <= SLAB_ELEMENT_SIZE) 75 return slab_malloc_g(); 76 usb_log_warning("Requested %zu bytes, current allocator can't handle " 77 "that amount, pray that the standard malloc will suffice.", size); 78 return memalign(UHCI_STRCUTURES_ALIGNMENT, size); 70 /* This works only when the host has less than 4GB of memory as 71 * physical address needs to fit into 32 bits */ 72 73 /* If we need more than one page there is no guarantee that the 74 * memory will be continuous */ 75 if (size > PAGE_SIZE) 76 return NULL; 77 /* Calculate alignment to make sure the block won't cross page 78 * boundary */ 79 size_t alignment = UHCI_STRCUTURES_ALIGNMENT; 80 while (alignment < size) 81 alignment *= 2; 82 return memalign(alignment, size); 79 83 } 80 84 /*----------------------------------------------------------------------------*/ … … 86 90 if (!addr) 87 91 return; 88 if (slab_in_range_g(addr))89 return slab_free_g(addr);90 92 free(addr); 91 93 } … … 98 100 { 99 101 void *free_address = as_get_mappable_page(UHCI_REQUIRED_PAGE_SIZE); 100 assert(free_address); /* TODO: remove this assert */101 102 if (free_address == 0) 102 103 return NULL; -
uspace/drv/uhci-rhd/main.c
re8f826b r400735e 37 37 #include <errno.h> 38 38 #include <str_error.h> 39 39 40 #include <usb_iface.h> 40 41 #include <usb/ddfiface.h> … … 45 46 #define NAME "uhci-rhd" 46 47 47 static int hc_get_my_registers( ddf_dev_t *dev,48 static int hc_get_my_registers(const ddf_dev_t *dev, 48 49 uintptr_t *io_reg_address, size_t *io_reg_size); 49 50 /*----------------------------------------------------------------------------*/ … … 130 131 */ 131 132 int hc_get_my_registers( 132 ddf_dev_t *dev, uintptr_t *io_reg_address, size_t *io_reg_size)133 const ddf_dev_t *dev, uintptr_t *io_reg_address, size_t *io_reg_size) 133 134 { 134 assert(dev != NULL);135 assert(dev); 135 136 136 int parent_phone = devman_parent_device_connect(dev->handle,137 const int parent_phone = devman_parent_device_connect(dev->handle, 137 138 IPC_FLAG_BLOCKING); 138 139 if (parent_phone < 0) { … … 141 142 142 143 hw_resource_list_t hw_resources; 143 int ret = hw_res_get_resource_list(parent_phone, &hw_resources);144 const int ret = hw_res_get_resource_list(parent_phone, &hw_resources); 144 145 if (ret != EOK) { 145 146 async_hangup(parent_phone); -
uspace/drv/uhci-rhd/port.c
re8f826b r400735e 36 36 #include <errno.h> 37 37 #include <str_error.h> 38 #include <time.h>39 38 #include <async.h> 40 39 … … 82 81 * @param[in] number Port number. 83 82 * @param[in] usec Polling interval. 84 * @param[in] rh Pointer to ddf instance fothe root hub driver.83 * @param[in] rh Pointer to ddf instance of the root hub driver. 85 84 * @return Error code. 86 85 * … … 91 90 { 92 91 assert(port); 93 asprintf(&port->id_string, "Port (%p - %u)", port, number); 94 if (port->id_string == NULL) { 92 char *id_string; 93 asprintf(&id_string, "Port (%p - %u)", port, number); 94 if (id_string == NULL) { 95 95 return ENOMEM; 96 96 } 97 97 98 port->id_string = id_string; 98 99 port->address = address; 99 100 port->number = number; … … 105 106 usb_hc_connection_initialize_from_device(&port->hc_connection, rh); 106 107 if (ret != EOK) { 107 usb_log_error("Failed to initialize connection to HC."); 108 usb_log_error("%s: failed to initialize connection to HC.", 109 port->id_string); 110 free(id_string); 108 111 return ret; 109 112 } … … 113 116 usb_log_error("%s: failed to create polling fibril.", 114 117 port->id_string); 118 free(id_string); 115 119 return ENOMEM; 116 120 } … … 132 136 assert(port); 133 137 free(port->id_string); 134 / * TODO: Kill fibril here */138 // TODO: Kill fibril here 135 139 return; 136 140 } … … 150 154 151 155 /* Read register value */ 152 port_status_t port_status = uhci_port_read_status(instance); 156 const port_status_t port_status = 157 uhci_port_read_status(instance); 153 158 154 159 /* Print the value if it's interesting */ … … 161 166 usb_log_debug("%s: Connected change detected: %x.\n", 162 167 instance->id_string, port_status); 163 164 int rc =165 usb_hc_connection_open(&instance->hc_connection);166 if (rc != EOK) {167 usb_log_error("%s: Failed to connect to HC.",168 instance->id_string);169 continue;170 }171 168 172 169 /* Remove any old device */ … … 175 172 instance->id_string); 176 173 uhci_port_remove_device(instance); 174 } 175 176 int ret = 177 usb_hc_connection_open(&instance->hc_connection); 178 if (ret != EOK) { 179 usb_log_error("%s: Failed to connect to HC.", 180 instance->id_string); 181 continue; 177 182 } 178 183 … … 190 195 } 191 196 192 r c= usb_hc_connection_close(&instance->hc_connection);193 if (r c!= EOK) {197 ret = usb_hc_connection_close(&instance->hc_connection); 198 if (ret != EOK) { 194 199 usb_log_error("%s: Failed to disconnect.", 195 200 instance->id_string); … … 209 214 int uhci_port_reset_enable(int portno, void *arg) 210 215 { 211 uhci_port_t *port = (uhci_port_t *) arg; 216 uhci_port_t *port = arg; 217 assert(port); 212 218 213 219 usb_log_debug2("%s: new_device_enable_port.\n", port->id_string); … … 283 289 usb_log_error("%s: Don't know how to remove device %" PRIun ".\n", 284 290 port->id_string, port->attached_device); 291 port->attached_device = 0; 285 292 return ENOTSUP; 286 293 } -
uspace/drv/uhci-rhd/port.h
re8f826b r400735e 57 57 typedef struct uhci_port 58 58 { 59 c har *id_string;59 const char *id_string; 60 60 port_status_t *address; 61 61 unsigned number; -
uspace/drv/usbhid/generic/hiddev.c
re8f826b r400735e 62 62 static size_t usb_generic_hid_get_event_length(ddf_fun_t *fun); 63 63 64 static int usb_generic_hid_get_event(ddf_fun_t *fun, int32_t *buffer,65 size_t size, size_t *act_size, unsigned int flags);64 static int usb_generic_hid_get_event(ddf_fun_t *fun, uint8_t *buffer, 65 size_t size, size_t *act_size, int *event_nr, unsigned int flags); 66 66 67 67 static int usb_generic_hid_client_connected(ddf_fun_t *fun); 68 69 static size_t usb_generic_get_report_descriptor_length(ddf_fun_t *fun); 70 71 static int usb_generic_get_report_descriptor(ddf_fun_t *fun, uint8_t *desc, 72 size_t size, size_t *actual_size); 68 73 69 74 /*----------------------------------------------------------------------------*/ … … 71 76 static usbhid_iface_t usb_generic_iface = { 72 77 .get_event = usb_generic_hid_get_event, 73 .get_event_length = usb_generic_hid_get_event_length 78 .get_event_length = usb_generic_hid_get_event_length, 79 .get_report_descriptor_length = usb_generic_get_report_descriptor_length, 80 .get_report_descriptor = usb_generic_get_report_descriptor 74 81 }; 75 82 … … 83 90 static size_t usb_generic_hid_get_event_length(ddf_fun_t *fun) 84 91 { 85 if (fun == NULL || fun->driver_data) { 92 usb_log_debug2("Generic HID: Get event length (fun: %p, " 93 "fun->driver_data: %p.\n", fun, fun->driver_data); 94 95 if (fun == NULL || fun->driver_data == NULL) { 86 96 return 0; 87 97 } … … 89 99 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 90 100 91 return hid_dev->input_report_size; 92 } 93 94 /*----------------------------------------------------------------------------*/ 95 96 static int usb_generic_hid_get_event(ddf_fun_t *fun, int32_t *buffer, 97 size_t size, size_t *act_size, unsigned int flags) 98 { 99 if (fun == NULL || fun->driver_data) { 101 usb_log_debug2("hid_dev: %p, Max input report size (%zu).\n", 102 hid_dev, hid_dev->max_input_report_size); 103 104 return hid_dev->max_input_report_size; 105 } 106 107 /*----------------------------------------------------------------------------*/ 108 109 static int usb_generic_hid_get_event(ddf_fun_t *fun, uint8_t *buffer, 110 size_t size, size_t *act_size, int *event_nr, unsigned int flags) 111 { 112 usb_log_debug2("Generic HID: Get event.\n"); 113 114 if (fun == NULL || fun->driver_data == NULL || buffer == NULL 115 || act_size == NULL || event_nr == NULL) { 116 usb_log_debug("No function"); 100 117 return EINVAL; 101 118 } … … 104 121 105 122 if (hid_dev->input_report_size > size) { 123 usb_log_debug("input_report_size > size (%zu, %zu)\n", 124 hid_dev->input_report_size, size); 106 125 return EINVAL; // TODO: other error code 107 126 } 108 127 109 128 /*! @todo This should probably be atomic. */ 110 if (usb_hid_report_ready()) { 111 memcpy(buffer, hid_dev->input_report, 112 hid_dev->input_report_size); 113 *act_size = hid_dev->input_report_size; 114 usb_hid_report_received(); 115 } 129 // if (usb_hid_report_ready()) { 130 // usb_log_debug2("Report ready, size: %zu\n", 131 // hid_dev->input_report_size); 132 133 // usb_hid_report_received(); 134 // } else { 135 // memset(buffer, 0, hid_dev->input_report_size); 136 // } 137 memcpy(buffer, hid_dev->input_report, 138 hid_dev->input_report_size); 139 *act_size = hid_dev->input_report_size; 140 *event_nr = usb_hid_report_number(hid_dev); 116 141 117 142 // clear the buffer so that it will not be received twice … … 120 145 // note that we already received this report 121 146 // report_received = true; 147 usb_log_debug2("OK\n"); 148 149 return EOK; 150 } 151 152 /*----------------------------------------------------------------------------*/ 153 154 static size_t usb_generic_get_report_descriptor_length(ddf_fun_t *fun) 155 { 156 usb_log_debug("Generic HID: Get report descriptor length.\n"); 157 158 if (fun == NULL || fun->driver_data == NULL) { 159 usb_log_debug("No function"); 160 return EINVAL; 161 } 162 163 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 164 165 usb_log_debug2("hid_dev->report_desc_size = %zu\n", 166 hid_dev->report_desc_size); 167 168 return hid_dev->report_desc_size; 169 } 170 171 /*----------------------------------------------------------------------------*/ 172 173 static int usb_generic_get_report_descriptor(ddf_fun_t *fun, uint8_t *desc, 174 size_t size, size_t *actual_size) 175 { 176 usb_log_debug2("Generic HID: Get report descriptor.\n"); 177 178 if (fun == NULL || fun->driver_data == NULL) { 179 usb_log_debug("No function"); 180 return EINVAL; 181 } 182 183 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 184 185 if (hid_dev->report_desc_size > size) { 186 return EINVAL; // TODO: other error code 187 } 188 189 memcpy(desc, hid_dev->report_desc, hid_dev->report_desc_size); 190 *actual_size = hid_dev->report_desc_size; 122 191 123 192 return EOK; … … 128 197 static int usb_generic_hid_client_connected(ddf_fun_t *fun) 129 198 { 130 usb_ hid_report_received();199 usb_log_debug("Generic HID: Client connected.\n"); 131 200 return EOK; 132 201 } … … 145 214 return ENOMEM; 146 215 } 216 217 fun->ops = &usb_generic_hid_ops; 218 fun->driver_data = hid_dev; 147 219 148 220 int rc = ddf_fun_bind(fun); … … 154 226 } 155 227 156 fun->ops = &usb_generic_hid_ops; 157 fun->driver_data = hid_dev; 228 usb_log_debug("HID function created. Handle: %" PRIun "\n", fun->handle); 158 229 159 230 return EOK; … … 176 247 uint8_t *buffer, size_t buffer_size) 177 248 { 178 usb_log_debug ("usb_hid_polling_callback(%p, %p, %zu)\n",249 usb_log_debug2("usb_hid_polling_callback(%p, %p, %zu)\n", 179 250 hid_dev, buffer, buffer_size); 180 251 usb_debug_str_buffer(buffer, buffer_size, 0); -
uspace/drv/usbhid/kbd/kbddev.c
re8f826b r400735e 798 798 } 799 799 800 usb_log_debug("%s function created. Handle: %" PRIun "\n", 801 HID_KBD_FUN_NAME, fun->handle); 802 800 803 usb_log_debug("Adding DDF function to class %s...\n", 801 804 HID_KBD_CLASS_NAME); -
uspace/drv/usbhid/mouse/mousedev.c
re8f826b r400735e 234 234 235 235 if (mouse_dev->mouse_phone < 0) { 236 usb_log_ error(NAME " No console phone.\n");237 return false; // ??236 usb_log_warning(NAME " No console phone.\n"); 237 return true; 238 238 } 239 239 -
uspace/drv/usbhid/multimedia/keymap.c
re8f826b r400735e 48 48 */ 49 49 static int usb_hid_keymap_consumer[0x29c] = { 50 [0xf] = KC_F1, /* Just for testing purposes */51 [0x5] = KC_F2, /* Just for testing purposes */52 [0x8] = KC_F3, /* Just for testing purposes */53 [0x6] = KC_F4, /* Just for testing purposes */54 [0x7] = KC_F5, /* Just for testing purposes */55 [0xc] = KC_F6, /* Just for testing purposes */56 57 50 [0xb5] = 0, /* Scan Next Track */ 58 51 [0xb6] = 0, /* Scan Previous Track */ 59 52 [0xb7] = 0, /* Stop */ 60 53 [0xb8] = 0, /* Eject */ 61 [0xcd] = KC_F2, /* Play/Pause */62 [0xe2] = KC_F3, /* Mute */63 [0xe9] = KC_F5, /* Volume Increment */64 [0xea] = KC_F4, /* Volume Decrement */65 [0x183] = 0 , /* AL Consumer Control Configuration */54 [0xcd] = 0/*KC_F2*/, /* Play/Pause */ 55 [0xe2] = 0/*KC_F3*/, /* Mute */ 56 [0xe9] = 0/*KC_F5*/, /* Volume Increment */ 57 [0xea] = 0/*KC_F4*/, /* Volume Decrement */ 58 [0x183] = 0/*KC_F1*/, /* AL Consumer Control Configuration */ 66 59 [0x18a] = 0, /* AL Email Reader */ 67 60 [0x192] = 0, /* AL Calculator */ 68 61 [0x221] = 0, /* AC Search */ 69 [0x223] = 0 , /* AC Home */62 [0x223] = 0/*KC_F6*/, /* AC Home */ 70 63 [0x224] = 0, /* AC Back */ 71 64 [0x225] = 0, /* AC Forward */ 72 65 [0x226] = 0, /* AC Stop */ 73 [0x227] = KC_F1, /* AC Refresh */ 74 [0x22a] = KC_F6 /* AC Bookmarks */ 75 }; 76 77 static const char *usb_hid_consumer_usage_str[0x29d] = { 78 [0x01] = "Consumer Control", 79 [0x02] = "Numeric Key Pad", 80 [0x03] = "Programmable Buttons", 81 [0x04] = "Microphone", 82 [0x05] = "Headphone", 83 [0x06] = "Graphic Equalizer", 84 [0x07] = "Reserved", 85 [0x08] = "Reserved", 86 [0x09] = "Reserved", 87 [0x0a] = "Reserved", 88 [0x0b] = "Reserved", 89 [0x0c] = "Reserved", 90 [0x0d] = "Reserved", 91 [0x0e] = "Reserved", 92 [0x0f] = "Reserved", 93 [0x10] = "Reserved", 94 [0x11] = "Reserved", 95 [0x12] = "Reserved", 96 [0x13] = "Reserved", 97 [0x14] = "Reserved", 98 [0x15] = "Reserved", 99 [0x16] = "Reserved", 100 [0x17] = "Reserved", 101 [0x18] = "Reserved", 102 [0x19] = "Reserved", 103 [0x1a] = "Reserved", 104 [0x1b] = "Reserved", 105 [0x1c] = "Reserved", 106 [0x1d] = "Reserved", 107 [0x1e] = "Reserved", 108 [0x1f] = "Reserved", 109 [0x20] = "+10", 110 [0x21] = "+100", 111 [0x22] = "AM/PM", 112 [0x23] = "Reserved", 113 [0x24] = "Reserved", 114 [0x25] = "Reserved", 115 [0x26] = "Reserved", 116 [0x27] = "Reserved", 117 [0x28] = "Reserved", 118 [0x29] = "Reserved", 119 [0x2a] = "Reserved", 120 [0x2b] = "Reserved", 121 [0x2c] = "Reserved", 122 [0x2d] = "Reserved", 123 [0x2e] = "Reserved", 124 [0x2f] = "Reserved", 125 [0x30] = "Reserved", 126 [0x31] = "Reserved", 127 [0x32] = "Reserved", 128 [0x33] = "Reserved", 129 [0x34] = "Reserved", 130 [0x35] = "Reserved", 131 [0x36] = "Reserved", 132 [0x37] = "Reserved", 133 [0x38] = "Reserved", 134 [0x39] = "Reserved", 135 [0x3a] = "Reserved", 136 [0x3b] = "Reserved", 137 [0x3c] = "Reserved", 138 [0x3d] = "Reserved", 139 [0x3e] = "Reserved", 140 [0x3f] = "Reserved", 141 [0x40] = "Menu", 142 [0x41] = "Menu Pick", 143 [0x42] = "Menu Up", 144 [0x43] = "Menu Down", 145 [0x44] = "Menu Left", 146 [0x45] = "Menu Right", 147 [0x46] = "Menu Escape", 148 [0x47] = "Menu Value Increase", 149 [0x48] = "Menu Value Decrease", 150 [0x49] = "Reserved", 151 [0x4a] = "Reserved", 152 [0x4b] = "Reserved", 153 [0x4c] = "Reserved", 154 [0x4d] = "Reserved", 155 [0x4e] = "Reserved", 156 [0x4f] = "Reserved", 157 [0x50] = "Reserved", 158 [0x51] = "Reserved", 159 [0x52] = "Reserved", 160 [0x53] = "Reserved", 161 [0x54] = "Reserved", 162 [0x55] = "Reserved", 163 [0x56] = "Reserved", 164 [0x57] = "Reserved", 165 [0x58] = "Reserved", 166 [0x59] = "Reserved", 167 [0x5a] = "Reserved", 168 [0x5b] = "Reserved", 169 [0x5c] = "Reserved", 170 [0x5d] = "Reserved", 171 [0x5e] = "Reserved", 172 [0x5f] = "Reserved", 173 [0x60] = "Data On Screen", 174 [0x61] = "Closed Caption", 175 [0x62] = "Closed Caption Select", 176 [0x63] = "VCR/TV", 177 [0x64] = "Broadcast Mode", 178 [0x65] = "Snapshot", 179 [0x66] = "Still", 180 [0x67] = "Reserved", 181 [0x68] = "Reserved", 182 [0x69] = "Reserved", 183 [0x6a] = "Reserved", 184 [0x6b] = "Reserved", 185 [0x6c] = "Reserved", 186 [0x6d] = "Reserved", 187 [0x6e] = "Reserved", 188 [0x6f] = "Reserved", 189 [0x70] = "Reserved", 190 [0x71] = "Reserved", 191 [0x72] = "Reserved", 192 [0x73] = "Reserved", 193 [0x74] = "Reserved", 194 [0x75] = "Reserved", 195 [0x76] = "Reserved", 196 [0x77] = "Reserved", 197 [0x78] = "Reserved", 198 [0x79] = "Reserved", 199 [0x7a] = "Reserved", 200 [0x7b] = "Reserved", 201 [0x7c] = "Reserved", 202 [0x7d] = "Reserved", 203 [0x7e] = "Reserved", 204 [0x7f] = "Reserved", 205 [0x80] = "Selection", 206 [0x81] = "Assign Selection", 207 [0x82] = "Mode Step", 208 [0x83] = "Recall Last", 209 [0x84] = "Enter Channel", 210 [0x85] = "Order Movie", 211 [0x86] = "Channel", 212 [0x87] = "Media Selection", 213 [0x88] = "Media Select Computer", 214 [0x89] = "Media Select TV", 215 [0x8a] = "Media Select WWW", 216 [0x8b] = "Media Select DVD", 217 [0x8c] = "Media Select Telephone", 218 [0x8d] = "Media Select Program Guide", 219 [0x8e] = "Media Select Video Phone", 220 [0x8f] = "Media Select Games", 221 [0x90] = "Media Select Messages", 222 [0x91] = "Media Select CD", 223 [0x92] = "Media Select VCR", 224 [0x93] = "Media Select Tuner", 225 [0x94] = "Quit", 226 [0x95] = "Help", 227 [0x96] = "Media Select Tape", 228 [0x97] = "Media Select Cable", 229 [0x98] = "Media Select Satellite", 230 [0x99] = "Media Select Security", 231 [0x9a] = "Media Select Home", 232 [0x9b] = "Media Select Call", 233 [0x9c] = "Channel Increment", 234 [0x9d] = "Channel Decrement", 235 [0x9e] = "Media Select SAP", 236 [0x9f] = "Reserved", 237 [0xa0] = "VCR Plus", 238 [0xa1] = "Once", 239 [0xa2] = "Daily", 240 [0xa3] = "Weekly", 241 [0xa4] = "Monthly", 242 [0xa5] = "Reserved", 243 [0xa6] = "Reserved", 244 [0xa7] = "Reserved", 245 [0xa8] = "Reserved", 246 [0xa9] = "Reserved", 247 [0xaa] = "Reserved", 248 [0xab] = "Reserved", 249 [0xac] = "Reserved", 250 [0xad] = "Reserved", 251 [0xae] = "Reserved", 252 [0xaf] = "Reserved", 253 [0xb0] = "Play", 254 [0xb1] = "Pause", 255 [0xb2] = "Record", 256 [0xb3] = "Fast Forward", 257 [0xb4] = "Rewind", 258 [0xb5] = "Scan Next Track", 259 [0xb6] = "Scan Previous Trac", 260 [0xb7] = "Stop", 261 [0xb8] = "Eject", 262 [0xb9] = "Random Play", 263 [0xba] = "Select Disc", 264 [0xbb] = "Enter Disc", 265 [0xbc] = "Repeat", 266 [0xbd] = "Tracking", 267 [0xbe] = "Track Normal", 268 [0xbf] = "Slow Tracking", 269 [0xc0] = "Frame Forward", 270 [0xc1] = "Frame Back", 271 [0xc2] = "Mark", 272 [0xc3] = "Clear Mark", 273 [0xc4] = "Repeat From Mark", 274 [0xc5] = "Return to Mark", 275 [0xc6] = "Search Mark Forward", 276 [0xc7] = "Search Mark Backwards", 277 [0xc8] = "Counter Reset", 278 [0xc9] = "Show Counter", 279 [0xca] = "Tracking Increment", 280 [0xcb] = "Tracking Decrement", 281 [0xcc] = "Stop/Eject", 282 [0xcd] = "Play/Pause", 283 [0xce] = "Play/Skip", 284 [0xcf] = "Reserved", 285 [0xd0] = "Reserved", 286 [0xd1] = "Reserved", 287 [0xd2] = "Reserved", 288 [0xd3] = "Reserved", 289 [0xd4] = "Reserved", 290 [0xd5] = "Reserved", 291 [0xd6] = "Reserved", 292 [0xd7] = "Reserved", 293 [0xd8] = "Reserved", 294 [0xd9] = "Reserved", 295 [0xda] = "Reserved", 296 [0xdb] = "Reserved", 297 [0xdc] = "Reserved", 298 [0xdd] = "Reserved", 299 [0xde] = "Reserved", 300 [0xdf] = "Reserved", 301 [0xe0] = "Volume", 302 [0xe1] = "Balance", 303 [0xe2] = "Mute", 304 [0xe3] = "Bass", 305 [0xe4] = "Treble", 306 [0xe5] = "Bass Boost", 307 [0xe6] = "Surround Mode", 308 [0xe7] = "Loudness", 309 [0xe8] = "MPX", 310 [0xe9] = "Volume Increment", 311 [0xea] = "Volume Decrement", 312 [0xeb] = "Reserved", 313 [0xec] = "Reserved", 314 [0xed] = "Reserved", 315 [0xee] = "Reserved", 316 [0xef] = "Reserved", 317 [0xf0] = "Speed Select", 318 [0xf1] = "Playback Speed", 319 [0xf2] = "Standard Play", 320 [0xf3] = "Long Play", 321 [0xf4] = "Extended Play", 322 [0xf5] = "Slow", 323 [0xf6] = "Reserved", 324 [0xf7] = "Reserved", 325 [0xf8] = "Reserved", 326 [0xf9] = "Reserved", 327 [0xfa] = "Reserved", 328 [0xfb] = "Reserved", 329 [0xfc] = "Reserved", 330 [0xfd] = "Reserved", 331 [0xfe] = "Reserved", 332 [0xff] = "Reserved", 333 [0x100] = "Fan Enable", 334 [0x101] = "Fan Speed", 335 [0x102] = "Light Enable", 336 [0x103] = "Light Illumination Level", 337 [0x104] = "Climate Control Enable", 338 [0x105] = "Room Temperature", 339 [0x106] = "Security Enable", 340 [0x107] = "Fire Alarm", 341 [0x108] = "Police Alarm", 342 [0x109] = "Proximity", 343 [0x10a] = "Motion", 344 [0x10b] = "Duress Alarm", 345 [0x10c] = "Holdup Alarm", 346 [0x10d] = "Medical Alarm", 347 [0x10e] = "Reserved", 348 [0x10f] = "Reserved", 349 [0x110] = "Reserved", 350 [0x111] = "Reserved", 351 [0x112] = "Reserved", 352 [0x113] = "Reserved", 353 [0x114] = "Reserved", 354 [0x115] = "Reserved", 355 [0x116] = "Reserved", 356 [0x117] = "Reserved", 357 [0x118] = "Reserved", 358 [0x119] = "Reserved", 359 [0x11a] = "Reserved", 360 [0x11b] = "Reserved", 361 [0x11c] = "Reserved", 362 [0x11d] = "Reserved", 363 [0x11e] = "Reserved", 364 [0x11f] = "Reserved", 365 [0x120] = "Reserved", 366 [0x121] = "Reserved", 367 [0x122] = "Reserved", 368 [0x123] = "Reserved", 369 [0x124] = "Reserved", 370 [0x125] = "Reserved", 371 [0x126] = "Reserved", 372 [0x127] = "Reserved", 373 [0x128] = "Reserved", 374 [0x129] = "Reserved", 375 [0x12a] = "Reserved", 376 [0x12b] = "Reserved", 377 [0x12c] = "Reserved", 378 [0x12d] = "Reserved", 379 [0x12e] = "Reserved", 380 [0x12f] = "Reserved", 381 [0x130] = "Reserved", 382 [0x131] = "Reserved", 383 [0x132] = "Reserved", 384 [0x133] = "Reserved", 385 [0x134] = "Reserved", 386 [0x135] = "Reserved", 387 [0x136] = "Reserved", 388 [0x137] = "Reserved", 389 [0x138] = "Reserved", 390 [0x139] = "Reserved", 391 [0x13a] = "Reserved", 392 [0x13b] = "Reserved", 393 [0x13c] = "Reserved", 394 [0x13d] = "Reserved", 395 [0x13e] = "Reserved", 396 [0x13f] = "Reserved", 397 [0x140] = "Reserved", 398 [0x141] = "Reserved", 399 [0x142] = "Reserved", 400 [0x143] = "Reserved", 401 [0x144] = "Reserved", 402 [0x145] = "Reserved", 403 [0x146] = "Reserved", 404 [0x147] = "Reserved", 405 [0x148] = "Reserved", 406 [0x149] = "Reserved", 407 [0x14a] = "Reserved", 408 [0x14b] = "Reserved", 409 [0x14c] = "Reserved", 410 [0x14d] = "Reserved", 411 [0x14e] = "Reserved", 412 [0x14f] = "Reserved", 413 [0x150] = "Balance Right", 414 [0x151] = "Balance Left", 415 [0x152] = "Bass Increment", 416 [0x153] = "Bass Decrement", 417 [0x154] = "Treble Increment", 418 [0x155] = "Treble Decrement", 419 [0x156] = "Reserved", 420 [0x157] = "Reserved", 421 [0x158] = "Reserved", 422 [0x159] = "Reserved", 423 [0x15a] = "Reserved", 424 [0x15b] = "Reserved", 425 [0x15c] = "Reserved", 426 [0x15d] = "Reserved", 427 [0x15e] = "Reserved", 428 [0x15f] = "Reserved", 429 [0x160] = "Speaker System", 430 [0x161] = "Channel Left", 431 [0x162] = "Channel Right", 432 [0x163] = "Channel Center", 433 [0x164] = "Channel Front", 434 [0x165] = "Channel Center Front", 435 [0x166] = "Channel Side", 436 [0x167] = "Channel Surround", 437 [0x168] = "Channel Low Frequency Enhancement", 438 [0x169] = "Channel Top", 439 [0x16a] = "Channel Unknown", 440 [0x16b] = "Reserved", 441 [0x16c] = "Reserved", 442 [0x16d] = "Reserved", 443 [0x16e] = "Reserved", 444 [0x16f] = "Reserved", 445 [0x170] = "Sub-channel", 446 [0x171] = "Sub-channel Increment", 447 [0x172] = "Sub-channel Decrement", 448 [0x173] = "Alternate Audio Increment", 449 [0x174] = "Alternate Audio Decrement", 450 [0x175] = "Reserved", 451 [0x176] = "Reserved", 452 [0x177] = "Reserved", 453 [0x178] = "Reserved", 454 [0x179] = "Reserved", 455 [0x17a] = "Reserved", 456 [0x17b] = "Reserved", 457 [0x17c] = "Reserved", 458 [0x17d] = "Reserved", 459 [0x17e] = "Reserved", 460 [0x17f] = "Reserved", 461 [0x180] = "Application Launch Buttons", 462 [0x181] = "AL Launch Buttion Configuration Tool", 463 [0x182] = "AL Programmable Button Configuration", 464 [0x183] = "AL Consumer Control Configuration", 465 [0x184] = "AL Word Processor", 466 [0x185] = "AL Text Editor", 467 [0x186] = "AL Spreadsheet", 468 [0x187] = "AL Graphics Editor", 469 [0x188] = "AL Presentation App", 470 [0x189] = "AL Database App", 471 [0x18a] = "AL Email Reader", 472 [0x18b] = "AL Newsreader", 473 [0x18c] = "AL Voicemail", 474 [0x18d] = "AL Contacts/Address Book", 475 [0x18e] = "AL Calendar/Schedule", 476 [0x18f] = "AL Task/Project Manager", 477 [0x190] = "AL Log/Journal/Timecard", 478 [0x191] = "AL Checkbook/Finance", 479 [0x192] = "AL Calculator", 480 [0x193] = "AL A/V Capture/Playback", 481 [0x194] = "AL Local Machine Browser", 482 [0x195] = "AL LAN/WAN Browser", 483 [0x196] = "AL Internet Browser", 484 [0x197] = "AL Remote Networking/ISP Connect", 485 [0x198] = "AL Network Conference", 486 [0x199] = "AL Network Chat", 487 [0x19a] = "AL Telephony/Dialer", 488 [0x19b] = "AL Logon", 489 [0x19c] = "AL Logoff", 490 [0x19d] = "AL Logon/Logoff", 491 [0x19e] = "AL Terminal Lock/Screensaver", 492 [0x19f] = "AL Control Panel", 493 [0x1a0] = "AL Command Line Processor/Run", 494 [0x1a1] = "AL Process/Task Manager", 495 [0x1a2] = "AL Select Task/Application", 496 [0x1a3] = "AL Next Task/Application", 497 [0x1a4] = "AL Previous Task/Application", 498 [0x1a5] = "AL Preemptive Halt Task/Application", 499 [0x1a6] = "AL Integrated Help Center", 500 [0x1a7] = "AL Documents", 501 [0x1a8] = "AL Thesaurus", 502 [0x1a9] = "AL Dictionary", 503 [0x1aa] = "AL Desktop", 504 [0x1ab] = "AL Spell Check", 505 [0x1ac] = "AL Grammar Check", 506 [0x1ad] = "AL Wireless Status", 507 [0x1ae] = "AL Keyboard Layout", 508 [0x1af] = "AL Virus Protection", 509 [0x1b0] = "AL Encryption", 510 [0x1b1] = "AL Screen Saver", 511 [0x1b2] = "AL Alarms", 512 [0x1b3] = "AL Clock", 513 [0x1b4] = "AL File Browser", 514 [0x1b5] = "AL Power Status", 515 [0x1b6] = "AL Image Browser", 516 [0x1b7] = "AL Audio Browser", 517 [0x1b8] = "AL Movie Browser", 518 [0x1b9] = "AL Digital Rights Manager", 519 [0x1ba] = "AL Digital Wallet", 520 [0x1bb] = "Reserved", 521 [0x1bc] = "AL Instant Messaging", 522 [0x1bd] = "AL OEM Features Tips/Tutorial Browser", 523 [0x1be] = "AL OEM Help", 524 [0x1bf] = "AL Online Community", 525 [0x1c0] = "AL Entertainment Content Browser", 526 [0x1c1] = "AL Online Shopping Browser", 527 [0x1c2] = "AL SmartCard Information/Help", 528 [0x1c3] = "AL Market Monitor/Finance Browser", 529 [0x1c4] = "AL Customized Corporate News Browser", 530 [0x1c5] = "AL Online Activity Browser", 531 [0x1c6] = "AL Research/Search Browser", 532 [0x1c7] = "AL Audio Player", 533 [0x1c8] = "Reserved", 534 [0x1c9] = "Reserved", 535 [0x1ca] = "Reserved", 536 [0x1cb] = "Reserved", 537 [0x1cc] = "Reserved", 538 [0x1cd] = "Reserved", 539 [0x1ce] = "Reserved", 540 [0x1cf] = "Reserved", 541 [0x1d0] = "Reserved", 542 [0x1d1] = "Reserved", 543 [0x1d2] = "Reserved", 544 [0x1d3] = "Reserved", 545 [0x1d4] = "Reserved", 546 [0x1d5] = "Reserved", 547 [0x1d6] = "Reserved", 548 [0x1d7] = "Reserved", 549 [0x1d8] = "Reserved", 550 [0x1d9] = "Reserved", 551 [0x1da] = "Reserved", 552 [0x1db] = "Reserved", 553 [0x1dc] = "Reserved", 554 [0x1dd] = "Reserved", 555 [0x1de] = "Reserved", 556 [0x1df] = "Reserved", 557 [0x1e0] = "Reserved", 558 [0x1e1] = "Reserved", 559 [0x1e2] = "Reserved", 560 [0x1e3] = "Reserved", 561 [0x1e4] = "Reserved", 562 [0x1e5] = "Reserved", 563 [0x1e6] = "Reserved", 564 [0x1e7] = "Reserved", 565 [0x1e8] = "Reserved", 566 [0x1e9] = "Reserved", 567 [0x1ea] = "Reserved", 568 [0x1eb] = "Reserved", 569 [0x1ec] = "Reserved", 570 [0x1ed] = "Reserved", 571 [0x1ee] = "Reserved", 572 [0x1ef] = "Reserved", 573 [0x1f0] = "Reserved", 574 [0x1f1] = "Reserved", 575 [0x1f2] = "Reserved", 576 [0x1f3] = "Reserved", 577 [0x1f4] = "Reserved", 578 [0x1f5] = "Reserved", 579 [0x1f6] = "Reserved", 580 [0x1f7] = "Reserved", 581 [0x1f8] = "Reserved", 582 [0x1f9] = "Reserved", 583 [0x1fa] = "Reserved", 584 [0x1fb] = "Reserved", 585 [0x1fc] = "Reserved", 586 [0x1fd] = "Reserved", 587 [0x1fe] = "Reserved", 588 [0x1ff] = "Reserved", 589 [0x200] = "Generic GUI Application Controls", 590 [0x201] = "AC New", 591 [0x202] = "AC Open", 592 [0x203] = "AC Close", 593 [0x204] = "AC Exit", 594 [0x205] = "AC Maximize", 595 [0x206] = "AC Minimize", 596 [0x207] = "AC Save", 597 [0x208] = "AC Print", 598 [0x209] = "AC Properties", 599 [0x20a] = "", 600 [0x20b] = "", 601 [0x20c] = "", 602 [0x20d] = "", 603 [0x20e] = "", 604 [0x20f] = "", 605 [0x210] = "", 606 [0x211] = "", 607 [0x212] = "", 608 [0x213] = "", 609 [0x214] = "", 610 [0x215] = "", 611 [0x216] = "", 612 [0x217] = "", 613 [0x218] = "", 614 [0x219] = "", 615 [0x21a] = "AC Undo", 616 [0x21b] = "AC Copy", 617 [0x21c] = "AC Cut", 618 [0x21d] = "AC Paste", 619 [0x21e] = "AC Select All", 620 [0x21f] = "AC Find", 621 [0x220] = "AC Find and Replace", 622 [0x221] = "AC Search", 623 [0x222] = "AC Go To", 624 [0x223] = "AC Home", 625 [0x224] = "AC Back", 626 [0x225] = "AC Forward", 627 [0x226] = "AC Stop", 628 [0x227] = "AC Refresh", 629 [0x228] = "AC Previous Link", 630 [0x229] = "AC Next Link", 631 [0x22a] = "AC Bookmarks", 632 [0x22b] = "AC History", 633 [0x22c] = "AC Subscriptions", 634 [0x22d] = "AC Zoom In", 635 [0x22e] = "AC Zoom Out", 636 [0x22f] = "AC Zoom", 637 [0x230] = "AC Full Screen View", 638 [0x231] = "AC Normal View", 639 [0x232] = "AC View Toggle", 640 [0x233] = "AC Scroll Up", 641 [0x234] = "AC Scroll Down", 642 [0x235] = "AC Scroll", 643 [0x236] = "AC Pan Left", 644 [0x237] = "AC Pan Right", 645 [0x238] = "AC Pan", 646 [0x239] = "AC New Window", 647 [0x23a] = "AC Tile Horizontally", 648 [0x23b] = "AC Tile Vertically", 649 [0x23c] = "AC Format", 650 [0x23d] = "AC Edit", 651 [0x23e] = "AC Bold", 652 [0x23f] = "AC Italics", 653 [0x240] = "AC Undeline", 654 [0x241] = "AC Strikethrough", 655 [0x242] = "AC Subscript", 656 [0x243] = "AC Superscript", 657 [0x244] = "AC All Caps", 658 [0x245] = "AC Rotate", 659 [0x246] = "AC Resize", 660 [0x247] = "AC Flip Horizontal", 661 [0x248] = "AC Flip Vertical", 662 [0x249] = "AC Mirror Horizontal", 663 [0x24a] = "AC Mirror Vertical", 664 [0x24b] = "AC Font Select", 665 [0x24c] = "AC Font Color", 666 [0x24d] = "AC Font Size", 667 [0x24e] = "AC Justify Left", 668 [0x24f] = "AC Justify Center H", 669 [0x250] = "AC Justify Right", 670 [0x251] = "AC Justify Block H", 671 [0x252] = "AC Justify Top", 672 [0x253] = "AC Justify Center V", 673 [0x254] = "AC Justify Bottom", 674 [0x255] = "AC Justify Block V", 675 [0x256] = "AC Indent Decrease", 676 [0x257] = "AC Indent Increase", 677 [0x258] = "AC Numbered List", 678 [0x259] = "AC Restart Numbering", 679 [0x25a] = "AC Bulleted List", 680 [0x25b] = "AC Promote", 681 [0x25c] = "AC Demote", 682 [0x25d] = "AC Yes", 683 [0x25e] = "AC No", 684 [0x25f] = "AC Cancel", 685 [0x260] = "AC Catalog", 686 [0x261] = "AC Buy/Checkout", 687 [0x262] = "AC Add to Cart", 688 [0x263] = "AC Expand", 689 [0x264] = "AC Expand All", 690 [0x265] = "AC Collapse", 691 [0x266] = "AC Collapse All", 692 [0x267] = "AC Print Preview", 693 [0x268] = "AC Paste Special", 694 [0x269] = "AC Insert Mode", 695 [0x26a] = "AC Delete", 696 [0x26b] = "AC Lock", 697 [0x26c] = "AC Unlock", 698 [0x26d] = "AC Protect", 699 [0x26e] = "AC Unprotect", 700 [0x26f] = "AC Attach Comment", 701 [0x270] = "AC Delete Comment", 702 [0x271] = "AC View Comment", 703 [0x272] = "AC Select Word", 704 [0x273] = "AC Select Sentence", 705 [0x274] = "AC Select Paragraph", 706 [0x275] = "AC Select Column", 707 [0x276] = "AC Select Row", 708 [0x277] = "AC Select Table", 709 [0x278] = "AC Select Object", 710 [0x279] = "AC Redo/Repeat", 711 [0x27a] = "AC Sort", 712 [0x27b] = "AC Sort Ascending", 713 [0x27c] = "AC Sort Descending", 714 [0x27d] = "AC Filter", 715 [0x27e] = "AC Set Clock", 716 [0x27f] = "AC View Clock", 717 [0x280] = "AC Select Time Zone", 718 [0x281] = "AC Edit Time Zones", 719 [0x282] = "AC Set Alarm", 720 [0x283] = "AC Clear Alarm", 721 [0x284] = "AC Snooze Alarm", 722 [0x285] = "AC Reset Alarm", 723 [0x286] = "AC Synchronize", 724 [0x287] = "AC Send/Receive", 725 [0x288] = "AC Send To", 726 [0x289] = "AC Reply", 727 [0x28a] = "AC Reply All", 728 [0x28b] = "AC Forward Msg", 729 [0x28c] = "AC Send", 730 [0x28d] = "AC Attach File", 731 [0x28e] = "AC Upload", 732 [0x28f] = "AC Download (Save Target As)", 733 [0x290] = "AC Set Borders", 734 [0x291] = "AC Insert Row", 735 [0x292] = "AC Insert Column", 736 [0x293] = "AC Insert File", 737 [0x294] = "AC Insert Picture", 738 [0x295] = "AC Insert Object", 739 [0x296] = "AC Insert Symbol", 740 [0x297] = "AC Save and Close", 741 [0x298] = "AC Rename", 742 [0x299] = "AC Merge", 743 [0x29a] = "AC Split", 744 [0x29b] = "AC Distrubute Horizontally", 745 [0x29c] = "AC Distrubute Vertically" 66 [0x227] = 0, /* AC Refresh */ 67 [0x22a] = 0 /* AC Bookmarks */ 746 68 }; 747 69 … … 769 91 770 92 /** 771 * Translates USB HID Usages from the Consumer Page into their string772 * representation.773 *774 * @param usage USB HID Consumer Page Usage number.775 *776 * @retval HelenOS key code corresponding to the given USB Consumer Page Usage.777 */778 const char *usb_multimedia_usage_to_str(int usage)779 {780 size_t map_length = sizeof(usb_hid_consumer_usage_str) / sizeof(char *);781 782 if ((usage < 0) || ((size_t)usage >= map_length))783 return "Unknown usage";784 785 /*! @todo What if the usage is not in the table? */786 return usb_hid_consumer_usage_str[usage];787 }788 789 /**790 93 * @} 791 94 */ -
uspace/drv/usbhid/multimedia/keymap.h
re8f826b r400735e 39 39 unsigned int usb_multimedia_map_usage(int usage); 40 40 41 const char *usb_multimedia_usage_to_str(int usage);42 43 41 #endif /* USB_HID_MULTIMEDIA_KEYMAP_H_ */ 44 42 -
uspace/drv/usbhid/multimedia/multimedia.c
re8f826b r400735e 43 43 #include <usb/debug.h> 44 44 #include <usb/hid/usages/core.h> 45 #include <usb/hid/usages/consumer.h> 45 46 46 47 #include <errno.h> … … 58 59 typedef struct usb_multimedia_t { 59 60 /** Previously pressed keys (not translated to key codes). */ 60 int32_t *keys_old;61 //int32_t *keys_old; 61 62 /** Currently pressed keys (not translated to key codes). */ 62 int32_t *keys;63 //int32_t *keys; 63 64 /** Count of stored keys (i.e. number of keys in the report). */ 64 size_t key_count;65 //size_t key_count; 65 66 /** IPC phone to the console device (for sending key events). */ 66 67 int console_phone; … … 174 175 175 176 // free all buffers 176 if ((*multim_dev)->keys != NULL) {177 free((*multim_dev)->keys);178 }179 if ((*multim_dev)->keys_old != NULL) {180 free((*multim_dev)->keys_old);181 }177 // if ((*multim_dev)->keys != NULL) { 178 // free((*multim_dev)->keys); 179 // } 180 // if ((*multim_dev)->keys_old != NULL) { 181 // free((*multim_dev)->keys_old); 182 // } 182 183 183 184 free(*multim_dev); … … 209 210 return rc; 210 211 } 212 213 usb_log_debug("%s function created (jandle: %" PRIun ").\n", 214 NAME, fun->handle); 211 215 212 216 rc = ddf_fun_add_to_class(fun, "keyboard"); … … 241 245 multim_dev->console_phone = -1; 242 246 243 usb_hid_report_path_t *path = usb_hid_report_path();244 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_CONSUMER, 0);245 246 usb_hid_report_path_set_report_id(path, 1);247 248 multim_dev->key_count = usb_hid_report_size(249 hid_dev->report, 0, USB_HID_REPORT_TYPE_INPUT);250 251 usb_hid_report_path_free(path);252 253 usb_log_debug(NAME " Size of the input report: %zu\n",254 multim_dev->key_count);255 256 multim_dev->keys = (int32_t *)calloc(multim_dev->key_count,257 sizeof(int32_t));258 259 if (multim_dev->keys == NULL) {260 usb_log_fatal("No memory!\n");261 free(multim_dev);262 return ENOMEM;263 }264 265 multim_dev->keys_old =266 (int32_t *)calloc(multim_dev->key_count, sizeof(int32_t));267 268 if (multim_dev->keys_old == NULL) {269 usb_log_fatal("No memory!\n");270 free(multim_dev->keys);271 free(multim_dev);272 return ENOMEM;273 }247 // usb_hid_report_path_t *path = usb_hid_report_path(); 248 // usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_CONSUMER, 0); 249 250 // usb_hid_report_path_set_report_id(path, 1); 251 252 // multim_dev->key_count = usb_hid_report_size( 253 // hid_dev->report, 1, USB_HID_REPORT_TYPE_INPUT); 254 255 // usb_hid_report_path_free(path); 256 257 // usb_log_debug(NAME " Size of the input report: %zu\n", 258 // multim_dev->key_count); 259 260 // multim_dev->keys = (int32_t *)calloc(multim_dev->key_count, 261 // sizeof(int32_t)); 262 263 // if (multim_dev->keys == NULL) { 264 // usb_log_fatal("No memory!\n"); 265 // free(multim_dev); 266 // return ENOMEM; 267 // } 268 269 // multim_dev->keys_old = 270 // (int32_t *)calloc(multim_dev->key_count, sizeof(int32_t)); 271 272 // if (multim_dev->keys_old == NULL) { 273 // usb_log_fatal("No memory!\n"); 274 // free(multim_dev->keys); 275 // free(multim_dev); 276 // return ENOMEM; 277 // } 274 278 275 279 /*! @todo Autorepeat */ … … 357 361 usb_multimedia_map_usage(field->usage); 358 362 const char *key_str = 359 usb _multimedia_usage_to_str(field->usage);363 usbhid_multimedia_usage_to_str(field->usage); 360 364 usb_log_info("Pressed key: %s\n", key_str); 361 365 usb_multimedia_push_ev(hid_dev, multim_dev, KEY_PRESS, -
uspace/drv/usbhid/subdrivers.c
re8f826b r400735e 38 38 #include <usb/hid/hidpath.h> 39 39 40 //#include "lgtch-ultrax/lgtch-ultrax.h"41 40 #include "multimedia/multimedia.h" 42 41 #include "mouse/mousedev.h" 42 #include "generic/hiddev.h" 43 43 44 44 static usb_hid_subdriver_usage_t path_kbd[] = { … … 58 58 }; 59 59 60 //static usb_hid_subdriver_usage_t generic_hid_key_path[] = { 61 // {0, 0} 62 //}; 63 60 64 const usb_hid_subdriver_mapping_t usb_hid_subdrivers[] = { 61 65 { 62 66 path_kbd, 63 -1,67 0, 64 68 USB_HID_PATH_COMPARE_BEGIN, 65 69 -1, … … 88 92 { 89 93 path_mouse, 90 -1,94 0, 91 95 USB_HID_PATH_COMPARE_BEGIN, 92 96 -1, … … 99 103 } 100 104 }, 105 // { 106 // generic_hid_key_path, 107 // 0, 108 // USB_HID_PATH_COMPARE_ANYWHERE, 109 // -1, 110 // -1, 111 // { 112 // .init = usb_generic_hid_init, 113 // .deinit = NULL, 114 // .poll = usb_generic_hid_polling_callback, 115 // .poll_end = NULL 116 // } 117 // }, 101 118 {NULL, -1, 0, -1, -1, {NULL, NULL, NULL, NULL, NULL}} 102 119 }; -
uspace/drv/usbhid/usbhid.c
re8f826b r400735e 63 63 static const int USB_HID_MAX_SUBDRIVERS = 10; 64 64 65 static fibril_local bool report_received; 65 /** @todo What happens if this is not fibril local? */ 66 //static fibril_local bool report_number; 66 67 67 68 /*----------------------------------------------------------------------------*/ … … 234 235 } 235 236 236 hid_dev->subdrivers = (usb_hid_subdriver_t *)malloc(count * 237 // add one generic HID subdriver per device 238 239 hid_dev->subdrivers = (usb_hid_subdriver_t *)malloc((count + 1) * 237 240 sizeof(usb_hid_subdriver_t)); 238 241 if (hid_dev->subdrivers == NULL) { … … 247 250 } 248 251 249 hid_dev->subdriver_count = count; 252 hid_dev->subdrivers[count].init = usb_generic_hid_init; 253 hid_dev->subdrivers[count].poll = usb_generic_hid_polling_callback; 254 hid_dev->subdrivers[count].deinit = NULL; 255 hid_dev->subdrivers[count].poll_end = NULL; 256 257 hid_dev->subdriver_count = count + 1; 250 258 251 259 return EOK; … … 307 315 308 316 if (matched) { 317 usb_log_debug("Subdriver matched.\n"); 309 318 subdrivers[count++] = &mapping->subdriver; 310 319 } … … 348 357 /*----------------------------------------------------------------------------*/ 349 358 359 static int usb_hid_init_report(usb_hid_dev_t *hid_dev) 360 { 361 assert(hid_dev != NULL && hid_dev->report != NULL); 362 363 uint8_t report_id = 0; 364 size_t size;/* = usb_hid_report_byte_size(hid_dev->report, report_id, 365 USB_HID_REPORT_TYPE_INPUT);*/ 366 367 size_t max_size = 0; 368 369 do { 370 size = usb_hid_report_byte_size(hid_dev->report, report_id, 371 USB_HID_REPORT_TYPE_INPUT); 372 usb_log_debug("Report ID: %u, size: %zu\n", report_id, size); 373 max_size = (size > max_size) ? size : max_size; 374 report_id = usb_hid_get_next_report_id(hid_dev->report, 375 report_id, USB_HID_REPORT_TYPE_INPUT); 376 } while (report_id != 0); 377 378 usb_log_debug("Max size of input report: %zu\n", max_size); 379 380 hid_dev->max_input_report_size = max_size; 381 assert(hid_dev->input_report == NULL); 382 383 hid_dev->input_report = malloc(max_size); 384 if (hid_dev->input_report == NULL) { 385 return ENOMEM; 386 } 387 memset(hid_dev->input_report, 0, max_size); 388 389 return EOK; 390 } 391 392 /*----------------------------------------------------------------------------*/ 393 350 394 usb_hid_dev_t *usb_hid_new(void) 351 395 { … … 402 446 /* Get the report descriptor and parse it. */ 403 447 rc = usb_hid_process_report_descriptor(hid_dev->usb_dev, 404 hid_dev->report );448 hid_dev->report, &hid_dev->report_desc, &hid_dev->report_desc_size); 405 449 406 450 bool fallback = false; … … 483 527 } 484 528 529 // save max input report size and allocate space for the report 530 rc = usb_hid_init_report(hid_dev); 531 if (rc != EOK) { 532 usb_log_error("Failed to initialize input report buffer.\n"); 533 } 534 485 535 return rc; 486 536 } … … 500 550 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)arg; 501 551 502 int allocated = (hid_dev->input_report != NULL); 503 504 if (!allocated 505 || hid_dev->input_report_size < buffer_size) { 506 uint8_t *input_old = hid_dev->input_report; 507 uint8_t *input_new = (uint8_t *)malloc(buffer_size); 508 509 if (input_new == NULL) { 510 usb_log_error("Failed to allocate space for input " 511 "buffer. This event may not be reported\n"); 512 memset(hid_dev->input_report, 0, 513 hid_dev->input_report_size); 514 } else { 515 memcpy(input_new, input_old, 516 hid_dev->input_report_size); 517 hid_dev->input_report = input_new; 518 if (allocated) { 519 free(input_old); 520 } 521 usb_hid_new_report(); 522 } 523 } 552 // int allocated = (hid_dev->input_report != NULL); 553 assert(hid_dev->input_report != NULL); 554 usb_log_debug("Max input report size: %zu, buffer size: %zu\n", 555 hid_dev->max_input_report_size, buffer_size); 556 assert(hid_dev->max_input_report_size >= buffer_size); 557 558 // if (/*!allocated*/ 559 // /*|| *//*hid_dev->input_report_size < buffer_size*/) { 560 // uint8_t *input_old = hid_dev->input_report; 561 // uint8_t *input_new = (uint8_t *)malloc(buffer_size); 562 563 // if (input_new == NULL) { 564 // usb_log_error("Failed to allocate space for input " 565 // "buffer. This event may not be reported\n"); 566 // memset(hid_dev->input_report, 0, 567 // hid_dev->input_report_size); 568 // } else { 569 // memcpy(input_new, input_old, 570 // hid_dev->input_report_size); 571 // hid_dev->input_report = input_new; 572 // if (allocated) { 573 // free(input_old); 574 // } 575 // usb_hid_new_report(); 576 // } 577 // } 524 578 525 579 /*! @todo This should probably be atomic. */ 526 580 memcpy(hid_dev->input_report, buffer, buffer_size); 527 581 hid_dev->input_report_size = buffer_size; 582 usb_hid_new_report(hid_dev); 528 583 529 584 bool cont = false; … … 601 656 /*----------------------------------------------------------------------------*/ 602 657 603 void usb_hid_new_report(void) 604 { 605 report_received = false; 606 } 607 608 /*----------------------------------------------------------------------------*/ 609 610 void usb_hid_report_received(void) 611 { 612 report_received = true; 613 } 614 615 /*----------------------------------------------------------------------------*/ 616 617 bool usb_hid_report_ready(void) 618 { 619 return !report_received; 620 } 658 void usb_hid_new_report(usb_hid_dev_t *hid_dev) 659 { 660 ++hid_dev->report_nr; 661 } 662 663 /*----------------------------------------------------------------------------*/ 664 665 int usb_hid_report_number(usb_hid_dev_t *hid_dev) 666 { 667 return hid_dev->report_nr; 668 } 669 670 /*----------------------------------------------------------------------------*/ 671 672 //void usb_hid_report_received(void) 673 //{ 674 // ++report_number; 675 //} 676 677 /*----------------------------------------------------------------------------*/ 678 679 //bool usb_hid_report_ready(void) 680 //{ 681 // return !report_received; 682 //} 621 683 622 684 /*----------------------------------------------------------------------------*/ -
uspace/drv/usbhid/usbhid.h
re8f826b r400735e 98 98 99 99 size_t input_report_size; 100 size_t max_input_report_size; 101 102 int report_nr; 100 103 } usb_hid_dev_t; 101 104 … … 127 130 //const char *usb_hid_get_class_name(const usb_hid_dev_t *hid_dev); 128 131 129 void usb_hid_new_report( void);132 void usb_hid_new_report(usb_hid_dev_t *hid_dev); 130 133 131 void usb_hid_report_received(void);134 int usb_hid_report_number(usb_hid_dev_t *hid_dev); 132 135 133 bool usb_hid_report_ready(void); 136 //void usb_hid_report_received(void); 137 138 //bool usb_hid_report_ready(void); 134 139 135 140 void usb_hid_free(usb_hid_dev_t **hid_dev); -
uspace/drv/usbhub/usbhub.c
re8f826b r400735e 67 67 usb_hub_status_t status); 68 68 69 static int usb_process_hub_ power_change(usb_hub_info_t * hub_info,69 static int usb_process_hub_local_power_change(usb_hub_info_t * hub_info, 70 70 usb_hub_status_t status); 71 71 … … 336 336 */ 337 337 static int usb_hub_start_hub_fibril(usb_hub_info_t * hub_info){ 338 /* 339 * The processing will require opened control pipe and connection 340 * to the host controller. 341 * It is waste of resources but let's hope there will be less 342 * hubs than the phone limit. 343 * FIXME: with some proper locking over pipes and session 344 * auto destruction, this could work better. 345 */ 346 int rc = usb_hc_connection_open(&hub_info->connection); 347 if (rc != EOK) { 348 //usb_pipe_end_session(hub_info->control_pipe); 349 usb_log_error("Failed to open connection to HC: %s.\n", 350 str_error(rc)); 351 return rc; 352 } 338 int rc; 353 339 354 340 rc = usb_device_auto_poll(hub_info->usb_device, 0, … … 386 372 int opResult; 387 373 if (usb_hub_is_status(status,USB_HUB_FEATURE_HUB_OVER_CURRENT)){ 388 opResult = usb_hub_clear_feature(hub_info->control_pipe, 389 USB_HUB_FEATURE_HUB_LOCAL_POWER); 390 if (opResult != EOK) { 391 usb_log_error("cannot power off hub: %d\n", 392 opResult); 374 //poweroff all ports 375 unsigned int port; 376 for(port = 1;port <= hub_info->port_count;++port){ 377 opResult = usb_hub_clear_port_feature( 378 hub_info->control_pipe,port, 379 USB_HUB_FEATURE_PORT_POWER); 380 if (opResult != EOK) { 381 usb_log_warning( 382 "cannot power off port %d; %d\n", 383 port, opResult); 384 } 393 385 } 394 386 } else { 395 opResult = usb_hub_set_feature(hub_info->control_pipe, 396 USB_HUB_FEATURE_HUB_LOCAL_POWER); 397 if (opResult != EOK) { 398 usb_log_error("cannot power on hub: %d\n", 399 opResult); 387 //power all ports 388 unsigned int port; 389 for(port = 1;port <= hub_info->port_count;++port){ 390 opResult = usb_hub_set_port_feature( 391 hub_info->control_pipe,port, 392 USB_HUB_FEATURE_PORT_POWER); 393 if (opResult != EOK) { 394 usb_log_warning( 395 "cannot power off port %d; %d\n", 396 port, opResult); 397 } 400 398 } 401 399 } … … 404 402 405 403 /** 406 * process hub power change 407 * 408 * If the power has been lost, reestablish it. 409 * If it was reestablished, re-power all ports. 404 * process hub local power change 405 * 406 * This change is ignored. 410 407 * @param hub_info hub instance 411 408 * @param status hub status bitmask 412 409 * @return error code 413 410 */ 414 static int usb_process_hub_ power_change(usb_hub_info_t * hub_info,411 static int usb_process_hub_local_power_change(usb_hub_info_t * hub_info, 415 412 usb_hub_status_t status) { 416 413 int opResult = EOK; 417 if (!usb_hub_is_status(status,USB_HUB_FEATURE_HUB_LOCAL_POWER)) {418 //restart power on hub419 opResult = usb_hub_set_feature(hub_info->control_pipe,420 USB_HUB_FEATURE_HUB_LOCAL_POWER);421 if (opResult != EOK) {422 usb_log_error("cannot power on hub: %d\n",423 opResult);424 }425 } else {//power reestablished on hub- restart ports426 size_t port;427 for (port = 1; port <= hub_info->port_count; ++port) {428 opResult = usb_hub_set_port_feature(429 hub_info->control_pipe,430 port, USB_HUB_FEATURE_PORT_POWER);431 if (opResult != EOK) {432 usb_log_error("Cannot power on port %zu: %s.\n",433 port, str_error(opResult));434 }435 }436 }437 if(opResult!=EOK){438 return opResult;//no feature clearing439 }440 414 opResult = usb_hub_clear_feature(hub_info->control_pipe, 441 415 USB_HUB_FEATURE_C_HUB_LOCAL_POWER); … … 452 426 * 453 427 * The change can be either in the over-current condition or 454 * local-power lost condition.428 * local-power change. 455 429 * @param hub_info hub instance 456 430 */ … … 487 461 if ( 488 462 usb_hub_is_status(status,16+USB_HUB_FEATURE_C_HUB_LOCAL_POWER)) { 489 usb_process_hub_ power_change(hub_info, status);463 usb_process_hub_local_power_change(hub_info, status); 490 464 } 491 465 }
Note:
See TracChangeset
for help on using the changeset viewer.
