Changeset d208f3f in mainline for uspace/drv/usbhid/generic/hiddev.c
- Timestamp:
- 2011-05-27T12:14:02Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2df648c2
- Parents:
- fb2de0a (diff), 74341ed (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/generic/hiddev.c
rfb2de0a rd208f3f 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 (%d).\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: %d\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);
Note:
See TracChangeset
for help on using the changeset viewer.