Changes in uspace/drv/usbhid/lgtch-ultrax/lgtch-ultrax.c [31cfee16:b20de1d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/lgtch-ultrax/lgtch-ultrax.c
r31cfee16 rb20de1d 58 58 } usb_lgtch_flags; 59 59 60 /*----------------------------------------------------------------------------*/61 /**62 * Logitech UltraX device type.63 */64 typedef struct usb_lgtch_ultrax_t {65 /** Previously pressed keys (not translated to key codes). */66 int32_t *keys_old;67 /** Currently pressed keys (not translated to key codes). */68 int32_t *keys;69 /** Count of stored keys (i.e. number of keys in the report). */70 size_t key_count;71 72 /** IPC phone to the console device (for sending key events). */73 int console_phone;74 75 /** Information for auto-repeat of keys. */76 // usb_kbd_repeat_t repeat;77 78 /** Mutex for accessing the information about auto-repeat. */79 // fibril_mutex_t *repeat_mtx;80 81 /** State of the structure (for checking before use).82 *83 * 0 - not initialized84 * 1 - initialized85 * -1 - ready for destroying86 */87 int initialized;88 } usb_lgtch_ultrax_t;89 90 60 91 61 /*----------------------------------------------------------------------------*/ … … 238 208 /*----------------------------------------------------------------------------*/ 239 209 240 static int usb_lgtch_create_function(usb_hid_dev_t *hid_dev) 241 { 210 int usb_lgtch_init(struct usb_hid_dev *hid_dev) 211 { 212 if (hid_dev == NULL || hid_dev->usb_dev == NULL) { 213 return EINVAL; /*! @todo Other return code? */ 214 } 215 216 usb_log_debug(NAME " Initializing HID/lgtch_ultrax structure...\n"); 217 218 usb_lgtch_ultrax_t *lgtch_dev = (usb_lgtch_ultrax_t *)malloc( 219 sizeof(usb_lgtch_ultrax_t)); 220 if (lgtch_dev == NULL) { 221 return ENOMEM; 222 } 223 224 lgtch_dev->console_phone = -1; 225 226 usb_hid_report_path_t *path = usb_hid_report_path(); 227 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_CONSUMER, 0); 228 229 usb_hid_report_path_set_report_id(path, 1); 230 231 lgtch_dev->key_count = usb_hid_report_input_length( 232 hid_dev->report, path, 233 USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY); 234 usb_hid_report_path_free(path); 235 236 usb_log_debug(NAME " Size of the input report: %zu\n", 237 lgtch_dev->key_count); 238 239 lgtch_dev->keys = (int32_t *)calloc(lgtch_dev->key_count, 240 sizeof(int32_t)); 241 242 if (lgtch_dev->keys == NULL) { 243 usb_log_fatal("No memory!\n"); 244 free(lgtch_dev); 245 return ENOMEM; 246 } 247 248 lgtch_dev->keys_old = 249 (int32_t *)calloc(lgtch_dev->key_count, sizeof(int32_t)); 250 251 if (lgtch_dev->keys_old == NULL) { 252 usb_log_fatal("No memory!\n"); 253 free(lgtch_dev->keys); 254 free(lgtch_dev); 255 return ENOMEM; 256 } 257 258 /*! @todo Autorepeat */ 259 260 // save the KBD device structure into the HID device structure 261 hid_dev->data = lgtch_dev; 262 242 263 /* Create the function exposed under /dev/devices. */ 243 264 ddf_fun_t *fun = ddf_fun_create(hid_dev->usb_dev->ddf_dev, fun_exposed, … … 248 269 } 249 270 271 lgtch_dev->initialized = USB_LGTCH_STATUS_INITIALIZED; 272 usb_log_debug(NAME " HID/lgtch_ultrax device structure initialized.\n"); 273 250 274 /* 251 275 * Store the initialized HID device and HID ops … … 255 279 fun->driver_data = hid_dev; // TODO: maybe change to hid_dev->data 256 280 281 /* 282 * 1) subdriver vytvori vlastnu ddf_fun, vlastne ddf_dev_ops, ktore da 283 * do nej. 284 * 2) do tych ops do .interfaces[DEV_IFACE_USBHID (asi)] priradi 285 * vyplnenu strukturu usbhid_iface_t. 286 * 3) klientska aplikacia - musi si rucne vytvorit telefon 287 * (devman_device_connect() - cesta k zariadeniu (/hw/pci0/...) az 288 * k tej fcii. 289 * pouzit usb/classes/hid/iface.h - prvy int je telefon 290 */ 291 257 292 int rc = ddf_fun_bind(fun); 258 293 if (rc != EOK) { … … 261 296 // TODO: Can / should I destroy the DDF function? 262 297 ddf_fun_destroy(fun); 298 usb_lgtch_free(&lgtch_dev); 263 299 return rc; 264 300 } … … 271 307 // TODO: Can / should I destroy the DDF function? 272 308 ddf_fun_destroy(fun); 273 return rc;274 }275 276 return EOK;277 }278 279 /*----------------------------------------------------------------------------*/280 281 int usb_lgtch_init(struct usb_hid_dev *hid_dev)282 {283 if (hid_dev == NULL || hid_dev->usb_dev == NULL) {284 return EINVAL; /*! @todo Other return code? */285 }286 287 usb_log_debug(NAME " Initializing HID/lgtch_ultrax structure...\n");288 289 usb_lgtch_ultrax_t *lgtch_dev = (usb_lgtch_ultrax_t *)malloc(290 sizeof(usb_lgtch_ultrax_t));291 if (lgtch_dev == NULL) {292 return ENOMEM;293 }294 295 lgtch_dev->console_phone = -1;296 297 usb_hid_report_path_t *path = usb_hid_report_path();298 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_CONSUMER, 0);299 300 usb_hid_report_path_set_report_id(path, 1);301 302 lgtch_dev->key_count = usb_hid_report_input_length(303 hid_dev->report, path,304 USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY);305 usb_hid_report_path_free(path);306 307 usb_log_debug(NAME " Size of the input report: %zu\n",308 lgtch_dev->key_count);309 310 lgtch_dev->keys = (int32_t *)calloc(lgtch_dev->key_count,311 sizeof(int32_t));312 313 if (lgtch_dev->keys == NULL) {314 usb_log_fatal("No memory!\n");315 free(lgtch_dev);316 return ENOMEM;317 }318 319 lgtch_dev->keys_old =320 (int32_t *)calloc(lgtch_dev->key_count, sizeof(int32_t));321 322 if (lgtch_dev->keys_old == NULL) {323 usb_log_fatal("No memory!\n");324 free(lgtch_dev->keys);325 free(lgtch_dev);326 return ENOMEM;327 }328 329 /*! @todo Autorepeat */330 331 // save the KBD device structure into the HID device structure332 hid_dev->data = lgtch_dev;333 334 lgtch_dev->initialized = USB_LGTCH_STATUS_INITIALIZED;335 usb_log_debug(NAME " HID/lgtch_ultrax device structure initialized.\n");336 337 int rc = usb_lgtch_create_function(hid_dev);338 if (rc != EOK) {339 309 usb_lgtch_free(&lgtch_dev); 340 310 return rc; … … 386 356 int rc = usb_hid_parse_report(hid_dev->report, buffer, buffer_size, 387 357 &report_id); 388 389 if (rc != EOK) {390 usb_log_warning(NAME "Error in usb_hid_parse_report(): %s\n",391 str_error(rc));392 return true;393 }394 395 358 usb_hid_report_path_set_report_id(path, report_id); 396 359 … … 420 383 usb_hid_report_path_free(path); 421 384 385 if (rc != EOK) { 386 usb_log_warning(NAME "Error in usb_hid_boot_keyboard_input_report():" 387 "%s\n", str_error(rc)); 388 } 389 422 390 return true; 423 391 }
Note:
See TracChangeset
for help on using the changeset viewer.