Changes in uspace/app/mkbd/main.c [79ae36dd:f9a627a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/mkbd/main.c
r79ae36dd rf9a627a 45 45 #include <devmap.h> 46 46 #include <usb/dev/hub.h> 47 //#include <usb/host.h> 48 //#include <usb/driver.h> 47 49 #include <usb/hid/iface.h> 48 50 #include <usb/dev/pipes.h> … … 56 58 #define NAME "mkbd" 57 59 58 static async_sess_t *dev_sess = NULL; 59 60 static int initialize_report_parser(async_sess_t *dev_sess, 61 usb_hid_report_t **report) 60 static int dev_phone = -1; 61 62 static int initialize_report_parser(int dev_phone, usb_hid_report_t **report) 62 63 { 63 *report = (usb_hid_report_t *) 64 if (*report == NULL) 64 *report = (usb_hid_report_t *)malloc(sizeof(usb_hid_report_t)); 65 if (*report == NULL) { 65 66 return ENOMEM; 67 } 66 68 67 69 int rc = usb_hid_report_init(*report); … … 69 71 usb_hid_free_report(*report); 70 72 *report = NULL; 71 return rc; 72 } 73 74 /* Get the report descriptor length from the device */ 73 printf("usb_hid_report_init() failed.\n"); 74 return rc; 75 } 76 77 // get the report descriptor length from the device 75 78 size_t report_desc_size; 76 rc = usbhid_dev_get_report_descriptor_length(dev_sess, 77 &report_desc_size); 78 if (rc != EOK) { 79 usb_hid_free_report(*report); 80 *report = NULL; 79 rc = usbhid_dev_get_report_descriptor_length( 80 dev_phone, &report_desc_size); 81 if (rc != EOK) { 82 usb_hid_free_report(*report); 83 *report = NULL; 84 printf("usbhid_dev_get_report_descriptor_length() failed.\n"); 81 85 return rc; 82 86 } … … 85 89 usb_hid_free_report(*report); 86 90 *report = NULL; 87 // TODO: other error code?88 return EINVAL; 89 } 90 91 uint8_t *desc = (uint8_t *) 91 printf("usbhid_dev_get_report_descriptor_length() returned 0.\n"); 92 return EINVAL; // TODO: other error code? 93 } 94 95 uint8_t *desc = (uint8_t *)malloc(report_desc_size); 92 96 if (desc == NULL) { 93 97 usb_hid_free_report(*report); … … 96 100 } 97 101 98 / * Get the report descriptor from the device */102 // get the report descriptor from the device 99 103 size_t actual_size; 100 rc = usbhid_dev_get_report_descriptor(dev_ sess, desc, report_desc_size,104 rc = usbhid_dev_get_report_descriptor(dev_phone, desc, report_desc_size, 101 105 &actual_size); 102 106 if (rc != EOK) { … … 104 108 *report = NULL; 105 109 free(desc); 110 printf("usbhid_dev_get_report_descriptor() failed.\n"); 106 111 return rc; 107 112 } … … 111 116 *report = NULL; 112 117 free(desc); 113 // TODO: other error code? 114 return EINVAL; 115 } 116 117 /* Initialize the report parser */ 118 printf("usbhid_dev_get_report_descriptor() returned wrong size:" 119 " %zu, expected: %zu.\n", actual_size, report_desc_size); 120 return EINVAL; // TODO: other error code? 121 } 122 123 // initialize the report parser 118 124 119 125 rc = usb_hid_parse_report_descriptor(*report, desc, report_desc_size); … … 122 128 if (rc != EOK) { 123 129 free(desc); 130 printf("usb_hid_parse_report_descriptor() failed.\n"); 124 131 return rc; 125 132 } … … 133 140 assert(report != NULL); 134 141 142 // printf("Calling usb_hid_parse_report() with size %zu and " 143 // "buffer: \n", size); 144 // for (size_t i = 0; i < size; ++i) { 145 // printf(" %X ", buffer[i]); 146 // } 147 // printf("\n"); 148 135 149 uint8_t report_id; 136 150 int rc = usb_hid_parse_report(report, buffer, size, &report_id); 137 if (rc != EOK) 151 if (rc != EOK) { 152 // printf("Error parsing report: %s\n", str_error(rc)); 138 153 return; 154 } 139 155 140 156 usb_hid_report_path_t *path = usb_hid_report_path(); … … 148 164 149 165 usb_hid_report_field_t *field = usb_hid_report_get_sibling( 150 report, NULL, path, USB_HID_PATH_COMPARE_END 151 | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY, 166 report, NULL, path, USB_HID_PATH_COMPARE_END 167 | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY, 152 168 USB_HID_REPORT_TYPE_INPUT); 153 169 170 // printf("Field: %p\n", field); 171 154 172 while (field != NULL) { 173 // printf("Field usage: %u, field value: %d\n", field->usage, 174 // field->value); 155 175 if (field->value != 0) { 156 176 const char *key_str = … … 163 183 | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY, 164 184 USB_HID_REPORT_TYPE_INPUT); 185 // printf("Next field: %p\n", field); 165 186 } 166 187 … … 173 194 { 174 195 #define _INDENT " " 175 printf(NAME ": Print out what multimedia keys were pressed.\n\n"); 176 printf("Usage: %s device\n", app_name); 177 printf(_INDENT "The device is a devman path to the device.\n"); 196 197 printf(NAME ": Print out what multimedia keys were pressed.\n\n"); 198 printf("Usage: %s device\n", app_name); 199 printf(_INDENT "The device is a devman path to the device.\n"); 200 178 201 #undef _OPTION 179 202 #undef _INDENT … … 200 223 } 201 224 202 async_sess_t *sess = devman_device_connect(EXCHANGE_SERIALIZE, 203 dev_handle, 0); 204 if (!sess) { 225 rc = devman_device_connect(dev_handle, 0); 226 if (rc < 0) { 205 227 printf(NAME ": failed to connect to the device (handle %" 206 PRIun "): %s.\n", dev_handle, str_error(errno)); 207 return errno; 208 } 209 210 dev_sess = sess; 228 PRIun "): %s.\n", dev_handle, str_error(rc)); 229 return rc; 230 } 231 232 dev_phone = rc; 233 // printf("Got phone to the device: %d\n", dev_phone); 211 234 212 235 char path[MAX_PATH_LENGTH]; … … 220 243 221 244 usb_hid_report_t *report = NULL; 222 rc = initialize_report_parser(dev_ sess, &report);245 rc = initialize_report_parser(dev_phone, &report); 223 246 if (rc != EOK) { 224 247 printf("Failed to initialize report parser: %s\n", … … 230 253 231 254 size_t size; 232 rc = usbhid_dev_get_event_length(dev_ sess, &size);255 rc = usbhid_dev_get_event_length(dev_phone, &size); 233 256 if (rc != EOK) { 234 257 printf("Failed to get event length: %s.\n", str_error(rc)); … … 236 259 } 237 260 261 // printf("Event length: %zu\n", size); 238 262 uint8_t *event = (uint8_t *)malloc(size); 239 263 if (event == NULL) { 240 // TODO:hangup phone?264 // hangup phone? 241 265 return ENOMEM; 242 266 } 267 268 // printf("Event length: %zu\n", size); 243 269 244 270 size_t actual_size; 245 271 int event_nr; 246 272 247 while (true) { 273 while (1) { 274 // get event from the driver 275 // printf("Getting event from the driver.\n"); 276 248 277 /** @todo Try blocking call. */ 249 rc = usbhid_dev_get_event(dev_ sess, event, size, &actual_size,278 rc = usbhid_dev_get_event(dev_phone, event, size, &actual_size, 250 279 &event_nr, 0); 251 280 if (rc != EOK) { 252 // TODO:hangup phone?281 // hangup phone? 253 282 printf("Error in getting event from the HID driver:" 254 283 "%s.\n", str_error(rc)); … … 256 285 } 257 286 287 // printf("Got buffer: %p, size: %zu, max size: %zu\n", event, 288 // actual_size, size); 289 290 // printf("Event number: %d, my actual event: %d\n", event_nr, 291 // act_event); 258 292 if (event_nr > act_event) { 259 293 print_key(event, size, report); … … 267 301 } 268 302 303 269 304 /** @} 270 305 */
Note:
See TracChangeset
for help on using the changeset viewer.