Changes in / [8a20380:a60150a] in mainline
- Location:
- uspace/drv/usbhid
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/hidreq.c
r8a20380 ra60150a 69 69 return sess_rc; 70 70 } 71 72 uint16_t value = 0;73 value |= (type << 8);74 71 75 72 usb_log_debug("Sending Set_Report request to the device.\n"); … … 77 74 rc = usb_control_request_set(&hid_dev->ctrl_pipe, 78 75 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 79 USB_HIDREQ_SET_REPORT, value, hid_dev->iface, buffer, buf_size);76 USB_HIDREQ_SET_REPORT, type, hid_dev->iface, buffer, buf_size); 80 77 81 78 sess_rc = usb_endpoint_pipe_end_session(&hid_dev->ctrl_pipe); … … 196 193 /*----------------------------------------------------------------------------*/ 197 194 198 int usbhid_req_get_report(usbhid_dev_t *hid_dev, usb_hid_report_type_t type,199 uint8_t *buffer, size_t buf_size, size_t *actual_size)200 {201 if (hid_dev == NULL) {202 usb_log_error("usbhid_req_set_report(): no HID device structure"203 " given.\n");204 return EINVAL;205 }206 207 /*208 * No need for checking other parameters, as they are checked in209 * the called function (usb_control_request_set()).210 */211 212 int rc, sess_rc;213 214 sess_rc = usb_endpoint_pipe_start_session(&hid_dev->ctrl_pipe);215 if (sess_rc != EOK) {216 usb_log_warning("Failed to start a session: %s.\n",217 str_error(sess_rc));218 return sess_rc;219 }220 221 uint16_t value = 0;222 value |= (type << 8);223 224 usb_log_debug("Sending Get_Report request to the device.\n");225 226 rc = usb_control_request_get(&hid_dev->ctrl_pipe,227 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE,228 USB_HIDREQ_GET_REPORT, value, hid_dev->iface, buffer, buf_size,229 actual_size);230 231 sess_rc = usb_endpoint_pipe_end_session(&hid_dev->ctrl_pipe);232 233 if (rc != EOK) {234 usb_log_warning("Error sending output report to the keyboard: "235 "%s.\n", str_error(rc));236 return rc;237 }238 239 if (sess_rc != EOK) {240 usb_log_warning("Error closing session: %s.\n",241 str_error(sess_rc));242 return sess_rc;243 }244 245 return EOK;246 }247 248 int usbhid_req_get_protocol(usbhid_dev_t *hid_dev, usb_hid_protocol_t *protocol)249 {250 if (hid_dev == NULL) {251 usb_log_error("usbhid_req_set_protocol(): no HID device "252 "structure given.\n");253 return EINVAL;254 }255 256 /*257 * No need for checking other parameters, as they are checked in258 * the called function (usb_control_request_set()).259 */260 261 int rc, sess_rc;262 263 sess_rc = usb_endpoint_pipe_start_session(&hid_dev->ctrl_pipe);264 if (sess_rc != EOK) {265 usb_log_warning("Failed to start a session: %s.\n",266 str_error(sess_rc));267 return sess_rc;268 }269 270 usb_log_debug("Sending Get_Protocol request to the device ("271 "iface: %d).\n", hid_dev->iface);272 273 uint8_t buffer[1];274 size_t actual_size = 0;275 276 rc = usb_control_request_get(&hid_dev->ctrl_pipe,277 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE,278 USB_HIDREQ_GET_PROTOCOL, 0, hid_dev->iface, buffer, 1, &actual_size);279 280 sess_rc = usb_endpoint_pipe_end_session(&hid_dev->ctrl_pipe);281 282 if (rc != EOK) {283 usb_log_warning("Error sending output report to the keyboard: "284 "%s.\n", str_error(rc));285 return rc;286 }287 288 if (sess_rc != EOK) {289 usb_log_warning("Error closing session: %s.\n",290 str_error(sess_rc));291 return sess_rc;292 }293 294 if (actual_size != 1) {295 usb_log_warning("Wrong data size: %zu, expected: 1.\n",296 actual_size);297 return ELIMIT;298 }299 300 *protocol = buffer[0];301 302 return EOK;303 }304 305 int usbhid_req_get_idle(usbhid_dev_t *hid_dev, uint8_t *duration)306 {307 if (hid_dev == NULL) {308 usb_log_error("usbhid_req_set_idle(): no HID device "309 "structure given.\n");310 return EINVAL;311 }312 313 /*314 * No need for checking other parameters, as they are checked in315 * the called function (usb_control_request_set()).316 */317 318 int rc, sess_rc;319 320 sess_rc = usb_endpoint_pipe_start_session(&hid_dev->ctrl_pipe);321 if (sess_rc != EOK) {322 usb_log_warning("Failed to start a session: %s.\n",323 str_error(sess_rc));324 return sess_rc;325 }326 327 usb_log_debug("Sending Get_Idle request to the device ("328 "iface: %d).\n", hid_dev->iface);329 330 uint16_t value = 0;331 uint8_t buffer[1];332 size_t actual_size = 0;333 334 rc = usb_control_request_get(&hid_dev->ctrl_pipe,335 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE,336 USB_HIDREQ_GET_IDLE, value, hid_dev->iface, buffer, 1,337 &actual_size);338 339 sess_rc = usb_endpoint_pipe_end_session(&hid_dev->ctrl_pipe);340 341 if (rc != EOK) {342 usb_log_warning("Error sending output report to the keyboard: "343 "%s.\n", str_error(rc));344 return rc;345 }346 347 if (sess_rc != EOK) {348 usb_log_warning("Error closing session: %s.\n",349 str_error(sess_rc));350 return sess_rc;351 }352 353 if (actual_size != 1) {354 usb_log_warning("Wrong data size: %zu, expected: 1.\n",355 actual_size);356 return ELIMIT;357 }358 359 *duration = buffer[0];360 361 return EOK;362 }363 364 /*----------------------------------------------------------------------------*/365 366 195 /** 367 196 * @} -
uspace/drv/usbhid/hidreq.h
r8a20380 ra60150a 52 52 int usbhid_req_set_idle(usbhid_dev_t *hid_dev, uint8_t duration); 53 53 54 int usbhid_req_get_report(usbhid_dev_t *hid_dev, usb_hid_report_type_t type,55 uint8_t *buffer, size_t buf_size, size_t *actual_size);56 57 int usbhid_req_get_protocol(usbhid_dev_t *hid_dev, usb_hid_protocol_t *protocol);58 59 int usbhid_req_get_idle(usbhid_dev_t *hid_dev, uint8_t *duration);60 61 54 /*----------------------------------------------------------------------------*/ 62 55 -
uspace/drv/usbhid/kbddev.c
r8a20380 ra60150a 63 63 static const size_t BOOTP_BUFFER_SIZE = 8; 64 64 static const size_t BOOTP_BUFFER_OUT_SIZE = 1; 65 static const uint8_t BOOTP_ERROR_ROLLOVER = 1;66 65 static const uint8_t IDLE_RATE = 0; 67 66 … … 182 181 usb_debug_str_buffer(buffer, BOOTP_BUFFER_OUT_SIZE, 0)); 183 182 183 uint16_t value = 0; 184 value |= (USB_HID_REPORT_TYPE_OUTPUT << 8); 185 184 186 assert(kbd_dev->hid_dev != NULL); 185 187 assert(kbd_dev->hid_dev->initialized); 186 usbhid_req_set_report(kbd_dev->hid_dev, USB_HID_REPORT_TYPE_OUTPUT,187 buffer,BOOTP_BUFFER_OUT_SIZE);188 usbhid_req_set_report(kbd_dev->hid_dev, value, buffer, 189 BOOTP_BUFFER_OUT_SIZE); 188 190 } 189 191 … … 320 322 const uint8_t *key_codes) 321 323 { 324 // TODO: phantom state!! 325 322 326 unsigned int key; 323 327 unsigned int i, j; 324 325 /*326 * First of all, check if the kbd have reported phantom state.327 */328 i = 0;329 // all fields should report Error Rollover330 while (i < kbd_dev->keycode_count &&331 key_codes[i] == BOOTP_ERROR_ROLLOVER) {332 ++i;333 }334 if (i == kbd_dev->keycode_count) {335 usb_log_debug("Phantom state occured.\n");336 // phantom state, do nothing337 return;338 }339 328 340 329 // TODO: quite dummy right now, think of better implementation … … 355 344 key = usbhid_parse_scancode(kbd_dev->keycodes[j]); 356 345 usbhid_kbd_push_ev(kbd_dev, KEY_RELEASE, key); 357 usb_log_debug2(" Key released: %d\n", key);346 usb_log_debug2("\nKey released: %d\n", key); 358 347 } else { 359 348 // found, nothing happens … … 375 364 // not found, i.e. new key pressed 376 365 key = usbhid_parse_scancode(key_codes[i]); 377 usb_log_debug2(" Key pressed: %d (keycode: %d)\n", key,366 usb_log_debug2("\nKey pressed: %d (keycode: %d)\n", key, 378 367 key_codes[i]); 379 368 usbhid_kbd_push_ev(kbd_dev, KEY_PRESS, key); … … 386 375 // if (key_codes[i] != 0) { 387 376 // key = usbhid_parse_scancode(key_codes[i]); 388 // usb_log_debug2(" Key pressed: %d (keycode: %d)\n", key,377 // usb_log_debug2("\nKey pressed: %d (keycode: %d)\n", key, 389 378 // key_codes[i]); 390 379 // usbhid_kbd_push_ev(kbd_dev, KEY_PRESS, key);
Note:
See TracChangeset
for help on using the changeset viewer.