Changes in uspace/drv/usbhid/generic/hiddev.c [266fcd8:65b458c4] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/generic/hiddev.c
r266fcd8 r65b458c4 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, uint8_t *buffer,65 size_t size, size_t *act_size, int *event_nr,unsigned int flags);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); 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);73 68 74 69 /*----------------------------------------------------------------------------*/ … … 76 71 static usbhid_iface_t usb_generic_iface = { 77 72 .get_event = usb_generic_hid_get_event, 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 73 .get_event_length = usb_generic_hid_get_event_length 81 74 }; 82 75 … … 90 83 static size_t usb_generic_hid_get_event_length(ddf_fun_t *fun) 91 84 { 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) { 85 if (fun == NULL || fun->driver_data) { 96 86 return 0; 97 87 } … … 99 89 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 100 90 101 usb_log_debug2("hid_dev: %p, Max input report size (%d).\n", 102 hid_dev, hid_dev->max_input_report_size); 103 104 return hid_dev->max_input_report_size; 91 return hid_dev->input_report_size; 105 92 } 106 93 107 94 /*----------------------------------------------------------------------------*/ 108 95 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)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) 111 98 { 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"); 99 if (fun == NULL || fun->driver_data) { 117 100 return EINVAL; 118 101 } … … 121 104 122 105 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);125 106 return EINVAL; // TODO: other error code 126 107 } 127 108 128 109 /*! @todo This should probably be atomic. */ 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); 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 } 141 116 142 117 // clear the buffer so that it will not be received twice … … 145 120 // note that we already received this report 146 121 // 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 code187 }188 189 memcpy(desc, hid_dev->report_desc, hid_dev->report_desc_size);190 *actual_size = hid_dev->report_desc_size;191 122 192 123 return EOK; … … 197 128 static int usb_generic_hid_client_connected(ddf_fun_t *fun) 198 129 { 199 usb_ log_debug("Generic HID: Client connected.\n");130 usb_hid_report_received(); 200 131 return EOK; 201 132 } … … 214 145 return ENOMEM; 215 146 } 216 217 fun->ops = &usb_generic_hid_ops;218 fun->driver_data = hid_dev;219 147 220 148 int rc = ddf_fun_bind(fun); … … 226 154 } 227 155 228 usb_log_debug("HID function created. Handle: %d\n", fun->handle); 156 fun->ops = &usb_generic_hid_ops; 157 fun->driver_data = hid_dev; 229 158 230 159 return EOK; … … 247 176 uint8_t *buffer, size_t buffer_size) 248 177 { 249 usb_log_debug 2("usb_hid_polling_callback(%p, %p, %zu)\n",178 usb_log_debug("usb_hid_polling_callback(%p, %p, %zu)\n", 250 179 hid_dev, buffer, buffer_size); 251 180 usb_debug_str_buffer(buffer, buffer_size, 0);
Note:
See TracChangeset
for help on using the changeset viewer.