Changes in uspace/drv/usbhid/kbd/kbddev.c [faa44e58:65b458c4] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/kbd/kbddev.c
rfaa44e58 r65b458c4 46 46 47 47 #include <usb/usb.h> 48 #include <usb/d ev/dp.h>49 #include <usb/ dev/request.h>50 #include <usb/ hid/hid.h>51 #include <usb/ dev/pipes.h>48 #include <usb/dp.h> 49 #include <usb/request.h> 50 #include <usb/classes/hid.h> 51 #include <usb/pipes.h> 52 52 #include <usb/debug.h> 53 #include <usb/ hid/hidparser.h>53 #include <usb/classes/hidparser.h> 54 54 #include <usb/classes/classes.h> 55 #include <usb/ hid/usages/core.h>56 #include <usb/ hid/request.h>57 #include <usb/ hid/hidreport.h>58 #include <usb/ hid/usages/led.h>59 60 #include <usb/dev /driver.h>55 #include <usb/classes/hidut.h> 56 #include <usb/classes/hidreq.h> 57 #include <usb/classes/hidreport.h> 58 #include <usb/classes/hid/utled.h> 59 60 #include <usb/devdrv.h> 61 61 62 62 #include "kbddev.h" … … 252 252 sysarg_t method = IPC_GET_IMETHOD(*icall); 253 253 254 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 255 256 if (hid_dev == NULL || hid_dev->data == NULL) { 254 usb_kbd_t *kbd_dev = (usb_kbd_t *)fun->driver_data; 255 if (kbd_dev == NULL) { 257 256 usb_log_debug("default_connection_handler: " 258 257 "Missing parameter.\n"); … … 260 259 return; 261 260 } 262 263 assert(hid_dev != NULL);264 assert(hid_dev->data != NULL);265 usb_kbd_t *kbd_dev = (usb_kbd_t *)hid_dev->data;266 261 267 262 if (method == IPC_M_CONNECT_TO_ME) { … … 313 308 usb_hid_report_field_t *field = usb_hid_report_get_sibling( 314 309 hid_dev->report, NULL, kbd_dev->led_path, 315 USB_HID_PATH_COMPARE_ USAGE_PAGE_ONLY | USB_HID_PATH_COMPARE_END,310 USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY, 316 311 USB_HID_REPORT_TYPE_OUTPUT); 317 312 318 while (field != NULL) { 319 313 while (field != NULL) { 314 320 315 if ((field->usage == USB_HID_LED_NUM_LOCK) 321 316 && (kbd_dev->mods & KM_NUM_LOCK)){ … … 334 329 335 330 field = usb_hid_report_get_sibling(hid_dev->report, field, 336 kbd_dev->led_path, USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY 337 | USB_HID_PATH_COMPARE_END, USB_HID_REPORT_TYPE_OUTPUT); 331 kbd_dev->led_path, 332 USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY, 333 USB_HID_REPORT_TYPE_OUTPUT); 338 334 } 339 335 … … 662 658 * usb_hid_parse_report(). 663 659 */ 664 static void usb_kbd_process_data(usb_hid_dev_t *hid_dev, 660 static void usb_kbd_process_data(usb_hid_dev_t *hid_dev, usb_kbd_t *kbd_dev, 665 661 uint8_t *buffer, size_t actual_size) 666 662 { 667 663 assert(hid_dev->report != NULL); 668 664 assert(hid_dev != NULL); 669 assert(hid_dev->data != NULL); 670 671 usb_kbd_t *kbd_dev = (usb_kbd_t *)hid_dev->data; 665 assert(kbd_dev != NULL); 672 666 673 667 usb_log_debug("Calling usb_hid_parse_report() with " … … 774 768 /*----------------------------------------------------------------------------*/ 775 769 776 static int usb_kbd_create_function(usb_hid_dev_t *hid_dev )770 static int usb_kbd_create_function(usb_hid_dev_t *hid_dev, usb_kbd_t *kbd_dev) 777 771 { 778 772 assert(hid_dev != NULL); 779 773 assert(hid_dev->usb_dev != NULL); 774 assert(kbd_dev != NULL); 780 775 781 776 /* Create the function exposed under /dev/devices. */ … … 792 787 * to the DDF function. 793 788 */ 794 fun->ops = & hid_dev->ops;795 fun->driver_data = hid_dev; // TODO: maybe change to hid_dev->data789 fun->ops = &kbd_dev->ops; 790 fun->driver_data = kbd_dev; 796 791 797 792 int rc = ddf_fun_bind(fun); … … 840 835 * @return Other value inherited from function usbhid_dev_init(). 841 836 */ 842 int usb_kbd_init(usb_hid_dev_t *hid_dev )837 int usb_kbd_init(usb_hid_dev_t *hid_dev, void **data) 843 838 { 844 839 usb_log_debug("Initializing HID/KBD structure...\n"); … … 865 860 usb_hid_report_path_set_report_id(path, 0); 866 861 867 kbd_dev->key_count = usb_hid_report_input_length( 868 hid_dev->report, path, 869 USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY); 862 kbd_dev->key_count = usb_hid_report_size( 863 hid_dev->report, 0, USB_HID_REPORT_TYPE_INPUT); 870 864 usb_hid_report_path_free(path); 871 865 … … 908 902 kbd_dev->led_path, USB_HIDUT_PAGE_LED, 0); 909 903 910 kbd_dev->led_output_size = usb_hid_report_output_size(hid_dev->report, 911 kbd_dev->led_path, 912 USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY); 904 kbd_dev->led_output_size = usb_hid_report_size(hid_dev->report, 905 0, USB_HID_REPORT_TYPE_OUTPUT); 913 906 914 907 usb_log_debug("Output report size (in items): %zu\n", … … 955 948 956 949 // save the KBD device structure into the HID device structure 957 hid_dev->data = kbd_dev; 950 //hid_dev->data = kbd_dev; 951 *data = kbd_dev; 958 952 959 953 // set handler for incoming calls 960 hid_dev->ops.default_handler = default_connection_handler;954 kbd_dev->ops.default_handler = default_connection_handler; 961 955 962 956 /* … … 983 977 984 978 usb_log_debug("Creating KBD function...\n"); 985 int rc = usb_kbd_create_function(hid_dev );979 int rc = usb_kbd_create_function(hid_dev, kbd_dev); 986 980 if (rc != EOK) { 987 981 usb_kbd_free(&kbd_dev); … … 994 988 /*----------------------------------------------------------------------------*/ 995 989 996 bool usb_kbd_polling_callback(usb_hid_dev_t *hid_dev, uint8_t *buffer,997 size_t buffer_size)998 { 999 if (hid_dev == NULL || buffer == NULL ) {990 bool usb_kbd_polling_callback(usb_hid_dev_t *hid_dev, void *data, 991 uint8_t *buffer, size_t buffer_size) 992 { 993 if (hid_dev == NULL || buffer == NULL || data == NULL) { 1000 994 // do not continue polling (???) 1001 995 return false; 1002 996 } 1003 997 998 usb_kbd_t *kbd_dev = (usb_kbd_t *)data; 999 assert(kbd_dev != NULL); 1000 1004 1001 // TODO: add return value from this function 1005 usb_kbd_process_data(hid_dev, buffer, buffer_size);1002 usb_kbd_process_data(hid_dev, kbd_dev, buffer, buffer_size); 1006 1003 1007 1004 return true; … … 1066 1063 /*----------------------------------------------------------------------------*/ 1067 1064 1068 void usb_kbd_deinit(usb_hid_dev_t *hid_dev )1065 void usb_kbd_deinit(usb_hid_dev_t *hid_dev, void *data) 1069 1066 { 1070 1067 if (hid_dev == NULL) { … … 1072 1069 } 1073 1070 1074 if ( hid_dev->data != NULL) {1075 usb_kbd_t *kbd_dev = (usb_kbd_t *) hid_dev->data;1071 if (data != NULL) { 1072 usb_kbd_t *kbd_dev = (usb_kbd_t *)data; 1076 1073 if (usb_kbd_is_initialized(kbd_dev)) { 1077 1074 usb_kbd_mark_unusable(kbd_dev); 1078 1075 } else { 1079 1076 usb_kbd_free(&kbd_dev); 1080 hid_dev->data = NULL;1081 1077 } 1082 1078 }
Note:
See TracChangeset
for help on using the changeset viewer.