Changes in uspace/drv/usbhid/generic/hiddev.c [65b458c4:da56be2] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/generic/hiddev.c
r65b458c4 rda56be2 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,64 static int usb_generic_hid_get_event(ddf_fun_t *fun, uint8_t *buffer, 65 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); 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_debug("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, 101 usb_log_debug("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, 97 110 size_t size, size_t *act_size, unsigned int flags) 98 111 { 99 if (fun == NULL || fun->driver_data) { 112 usb_log_debug("Generic HID: Get event.\n"); 113 114 if (fun == NULL || fun->driver_data == NULL) { 115 usb_log_debug("No function"); 100 116 return EINVAL; 101 117 } … … 104 120 105 121 if (hid_dev->input_report_size > size) { 122 usb_log_debug("input_report_size > size (%zu, %zu)\n", 123 hid_dev->input_report_size, size); 106 124 return EINVAL; // TODO: other error code 107 125 } … … 109 127 /*! @todo This should probably be atomic. */ 110 128 if (usb_hid_report_ready()) { 129 usb_log_debug("Report ready, size: %zu\n", 130 hid_dev->input_report_size); 111 131 memcpy(buffer, hid_dev->input_report, 112 132 hid_dev->input_report_size); … … 120 140 // note that we already received this report 121 141 // report_received = true; 142 usb_log_debug("OK\n"); 143 144 return EOK; 145 } 146 147 /*----------------------------------------------------------------------------*/ 148 149 static size_t usb_generic_get_report_descriptor_length(ddf_fun_t *fun) 150 { 151 usb_log_debug("Generic HID: Get report descriptor length.\n"); 152 153 if (fun == NULL || fun->driver_data == NULL) { 154 usb_log_debug("No function"); 155 return EINVAL; 156 } 157 158 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 159 160 printf("hid_dev->report_desc_size = %zu\n", hid_dev->report_desc_size); 161 162 return hid_dev->report_desc_size; 163 } 164 165 /*----------------------------------------------------------------------------*/ 166 167 static int usb_generic_get_report_descriptor(ddf_fun_t *fun, uint8_t *desc, 168 size_t size, size_t *actual_size) 169 { 170 usb_log_debug("Generic HID: Get report descriptor.\n"); 171 172 if (fun == NULL || fun->driver_data == NULL) { 173 usb_log_debug("No function"); 174 return EINVAL; 175 } 176 177 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 178 179 if (hid_dev->report_desc_size > size) { 180 return EINVAL; // TODO: other error code 181 } 182 183 memcpy(desc, hid_dev->report_desc, hid_dev->report_desc_size); 184 *actual_size = hid_dev->report_desc_size; 122 185 123 186 return EOK; … … 128 191 static int usb_generic_hid_client_connected(ddf_fun_t *fun) 129 192 { 193 usb_log_debug("Generic HID: Client connected.\n"); 130 194 usb_hid_report_received(); 131 195 return EOK; … … 145 209 return ENOMEM; 146 210 } 211 212 fun->ops = &usb_generic_hid_ops; 213 fun->driver_data = hid_dev; 147 214 148 215 int rc = ddf_fun_bind(fun); … … 154 221 } 155 222 156 fun->ops = &usb_generic_hid_ops; 157 fun->driver_data = hid_dev; 223 usb_log_debug("HID function created. Handle: %d\n", fun->handle); 158 224 159 225 return EOK;
Note:
See TracChangeset
for help on using the changeset viewer.