Changeset d7c72db in mainline
- Timestamp:
- 2011-05-24T21:01:02Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a28b41d
- Parents:
- 4e78236
- Location:
- uspace
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/mkbd/main.c
r4e78236 rd7c72db 50 50 #include <usb/dev/pipes.h> 51 51 #include <async.h> 52 #include <usb/hid/usages/core.h> 53 #include <usb/hid/hidparser.h> 54 #include <usb/hid/hiddescriptor.h> 55 #include <usb/hid/usages/consumer.h> 56 #include <assert.h> 52 57 53 58 #define NAME "mkbd" … … 55 60 static int dev_phone = -1; 56 61 57 //static void print_found_hc(size_t class_index, const char *path) 58 //{ 59 // // printf(NAME ": host controller %zu is `%s'.\n", class_index, path); 60 // printf("Bus %02zu: %s\n", class_index, path); 61 //} 62 //static void print_found_dev(usb_address_t addr, const char *path) 63 //{ 64 // // printf(NAME ": device with address %d is `%s'.\n", addr, path); 65 // printf(" Device %02d: %s\n", addr, path); 66 //} 67 68 //static void print_hc_devices(devman_handle_t hc_handle) 69 //{ 70 // int rc; 71 // usb_hc_connection_t conn; 72 73 // usb_hc_connection_initialize(&conn, hc_handle); 74 // rc = usb_hc_connection_open(&conn); 75 // if (rc != EOK) { 76 // printf(NAME ": failed to connect to HC: %s.\n", 77 // str_error(rc)); 78 // return; 79 // } 80 // usb_address_t addr; 81 // for (addr = 1; addr < 5; addr++) { 82 // devman_handle_t dev_handle; 83 // rc = usb_hc_get_handle_by_address(&conn, addr, &dev_handle); 84 // if (rc != EOK) { 85 // continue; 86 // } 87 // char path[MAX_PATH_LENGTH]; 88 // rc = devman_get_device_path(dev_handle, path, MAX_PATH_LENGTH); 89 // if (rc != EOK) { 90 // continue; 91 // } 92 // print_found_dev(addr, path); 93 // } 94 // usb_hc_connection_close(&conn); 95 //} 96 97 //static bool try_parse_class_and_address(const char *path, 98 // devman_handle_t *out_hc_handle, usb_address_t *out_device_address) 99 //{ 100 // size_t class_index; 101 // size_t address; 102 // int rc; 103 // char *ptr; 104 105 // rc = str_size_t(path, &ptr, 10, false, &class_index); 106 // if (rc != EOK) { 107 // return false; 108 // } 109 // if ((*ptr == ':') || (*ptr == '.')) { 110 // ptr++; 111 // } else { 112 // return false; 113 // } 114 // rc = str_size_t(ptr, NULL, 10, true, &address); 115 // if (rc != EOK) { 116 // return false; 117 // } 118 // rc = usb_ddf_get_hc_handle_by_class(class_index, out_hc_handle); 119 // if (rc != EOK) { 120 // return false; 121 // } 122 // if (out_device_address != NULL) { 123 // *out_device_address = (usb_address_t) address; 124 // } 125 // return true; 126 //} 127 128 //static bool resolve_hc_handle_and_dev_addr(const char *devpath, 129 // devman_handle_t *out_hc_handle, usb_address_t *out_device_address) 130 //{ 131 // int rc; 132 133 // /* Hack for QEMU to save-up on typing ;-). */ 134 // if (str_cmp(devpath, "qemu") == 0) { 135 // devpath = "/hw/pci0/00:01.2/uhci-rh/usb00_a1"; 136 // } 137 138 // /* Hack for virtual keyboard. */ 139 // if (str_cmp(devpath, "virt") == 0) { 140 // devpath = "/virt/usbhc/usb00_a1/usb00_a2"; 141 // } 142 143 // if (try_parse_class_and_address(devpath, 144 // out_hc_handle, out_device_address)) { 145 // return true; 146 // } 147 148 // char *path = str_dup(devpath); 149 // if (path == NULL) { 150 // return ENOMEM; 151 // } 152 153 // devman_handle_t hc = 0; 154 // bool hc_found = false; 155 // usb_address_t addr = 0; 156 // bool addr_found = false; 157 158 // /* Remove suffixes and hope that we will encounter device node. */ 159 // while (str_length(path) > 0) { 160 // /* Get device handle first. */ 161 // devman_handle_t dev_handle; 162 // rc = devman_device_get_handle(path, &dev_handle, 0); 163 // if (rc != EOK) { 164 // free(path); 165 // return false; 166 // } 167 168 // /* Try to find its host controller. */ 169 // if (!hc_found) { 170 // rc = usb_hc_find(dev_handle, &hc); 171 // if (rc == EOK) { 172 // hc_found = true; 173 // } 174 // } 175 // /* Try to get its address. */ 176 // if (!addr_found) { 177 // addr = usb_device_get_assigned_address(dev_handle); 178 // if (addr >= 0) { 179 // addr_found = true; 180 // } 181 // } 182 183 // /* Speed-up. */ 184 // if (hc_found && addr_found) { 185 // break; 186 // } 187 188 // /* Remove the last suffix. */ 189 // char *slash_pos = str_rchr(path, '/'); 190 // if (slash_pos != NULL) { 191 // *slash_pos = 0; 192 // } 193 // } 194 195 // free(path); 196 197 // if (hc_found && addr_found) { 198 // if (out_hc_handle != NULL) { 199 // *out_hc_handle = hc; 200 // } 201 // if (out_device_address != NULL) { 202 // *out_device_address = addr; 203 // } 204 // return true; 205 // } else { 206 // return false; 207 // } 208 //} 62 static int initialize_report_parser(int dev_phone, usb_hid_report_t *report) 63 { 64 report = (usb_hid_report_t *)malloc(sizeof(usb_hid_report_t)); 65 if (report == NULL) { 66 return ENOMEM; 67 } 68 69 int rc = usb_hid_report_init(report); 70 if (rc != EOK) { 71 usb_hid_free_report(report); 72 return rc; 73 } 74 75 // get the report descriptor length from the device 76 size_t report_desc_size; 77 rc = usbhid_dev_get_report_descriptor_length( 78 dev_phone, &report_desc_size); 79 if (rc != EOK) { 80 usb_hid_free_report(report); 81 return rc; 82 } 83 84 if (report_desc_size == 0) { 85 usb_hid_free_report(report); 86 return EINVAL; // TODO: other error code? 87 } 88 89 uint8_t *desc = (uint8_t *)malloc(report_desc_size); 90 if (desc == NULL) { 91 usb_hid_free_report(report); 92 return ENOMEM; 93 } 94 95 // get the report descriptor from the device 96 size_t actual_size; 97 rc = usbhid_dev_get_report_descriptor(dev_phone, desc, report_desc_size, 98 &actual_size); 99 if (rc != EOK) { 100 usb_hid_free_report(report); 101 free(desc); 102 return rc; 103 } 104 105 if (actual_size != report_desc_size) { 106 usb_hid_free_report(report); 107 free(desc); 108 return EINVAL; // TODO: other error code? 109 } 110 111 // initialize the report parser 112 113 rc = usb_hid_parse_report_descriptor(report, desc, report_desc_size); 114 free(desc); 115 116 if (rc != EOK) { 117 free(desc); 118 return rc; 119 } 120 121 return EOK; 122 } 123 124 static void print_key(uint8_t *buffer, size_t size, usb_hid_report_t *report) 125 { 126 assert(buffer != NULL); 127 assert(report != NULL); 128 129 uint8_t report_id; 130 usb_hid_parse_report(report, buffer, size, &report_id); 131 132 usb_hid_report_path_t *path = usb_hid_report_path(); 133 if (path == NULL) { 134 return; 135 } 136 137 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_CONSUMER, 0); 138 139 usb_hid_report_path_set_report_id(path, report_id); 140 141 usb_hid_report_field_t *field = usb_hid_report_get_sibling( 142 report, NULL, path, USB_HID_PATH_COMPARE_END 143 | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY, 144 USB_HID_REPORT_TYPE_INPUT); 145 146 while (field != NULL) { 147 if (field->value != 0) { 148 const char *key_str = 149 usbhid_multimedia_usage_to_str(field->usage); 150 printf("Pressed key: %s\n", key_str); 151 } 152 153 field = usb_hid_report_get_sibling( 154 report, field, path, USB_HID_PATH_COMPARE_END 155 | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY, 156 USB_HID_REPORT_TYPE_INPUT); 157 } 158 159 usb_hid_report_path_free(path); 160 } 161 162 #define MAX_PATH_LENGTH 1024 209 163 210 164 static void print_usage(char *app_name) … … 212 166 #define _INDENT " " 213 167 214 215 216 168 printf(NAME ": Print out what multimedia keys were pressed.\n\n"); 169 printf("Usage: %s device\n", app_name); 170 printf(_INDENT "The device is a devman path to the device.\n"); 217 171 218 172 #undef _OPTION 219 173 #undef _INDENT 220 174 } 221 222 #define MAX_PATH_LENGTH 1024223 175 224 176 int main(int argc, char *argv[]) … … 232 184 //char *devpath = argv[1]; 233 185 const char *devpath = "/hw/pci0/00:06.0/ohci-rh/usb00_a2/HID0/hid"; 234 235 // /* The initialization is here only to make compiler happy. */236 // devman_handle_t hc_handle = 0;237 // usb_address_t dev_addr = 0;238 // bool found = resolve_hc_handle_and_dev_addr(devpath,239 // &hc_handle, &dev_addr);240 // if (!found) {241 // fprintf(stderr, NAME ": device `%s' not found "242 // "or not of USB kind. Exiting.\n", devpath);243 // return -1;244 // }245 246 // int rc;247 // usb_hc_connection_t conn;248 249 // usb_hc_connection_initialize(&conn, hc_handle);250 // rc = usb_hc_connection_open(&conn);251 // if (rc != EOK) {252 // printf(NAME ": failed to connect to HC: %s.\n",253 // str_error(rc));254 // return -1;255 // }256 257 // devman_handle_t dev_handle;258 // rc = usb_hc_get_handle_by_address(&conn, dev_addr, &dev_handle);259 // if (rc != EOK) {260 // printf(NAME ": failed getting handle to the device: %s.\n",261 // str_error(rc));262 // return -1;263 // }264 265 // usb_hc_connection_close(&conn);266 186 267 187 int rc; … … 293 213 printf("Device path: %s\n", path); 294 214 215 216 usb_hid_report_t *report = NULL; 217 rc = initialize_report_parser(dev_phone, report); 218 if (rc != EOK) { 219 printf("Failed to initialize report parser: %s\n", 220 str_error(rc)); 221 return rc; 222 } 223 224 assert(report != NULL); 225 295 226 size_t size; 296 227 rc = usbhid_dev_get_event_length(dev_phone, &size); 297 228 if (rc != EOK) { 298 printf("Failed to get event length: %s.\n", 299 str_error(rc)); 229 printf("Failed to get event length: %s.\n", str_error(rc)); 300 230 return rc; 301 231 } 302 232 303 233 printf("Event length: %zu\n", size); 304 int32_t *event = (int32_t *)malloc(size);234 uint8_t *event = (uint8_t *)malloc(size); 305 235 if (event == NULL) { 306 236 // hangup phone? … … 315 245 // get event from the driver 316 246 printf("Getting event from the driver.\n"); 247 248 /** @todo Try blocking call. */ 317 249 rc = usbhid_dev_get_event(dev_phone, event, size, &actual_size, 318 250 0); … … 326 258 printf("Got buffer: %p, size: %zu\n", event, actual_size); 327 259 260 print_key(event, size, report); 261 328 262 async_usleep(10000); 329 263 } -
uspace/drv/usbhid/generic/hiddev.c
r4e78236 rd7c72db 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 … … 100 107 /*----------------------------------------------------------------------------*/ 101 108 102 static int usb_generic_hid_get_event(ddf_fun_t *fun, int32_t *buffer,109 static int usb_generic_hid_get_event(ddf_fun_t *fun, uint8_t *buffer, 103 110 size_t size, size_t *act_size, unsigned int flags) 104 111 { … … 129 136 // note that we already received this report 130 137 // report_received = true; 138 139 return EOK; 140 } 141 142 /*----------------------------------------------------------------------------*/ 143 144 static size_t usb_generic_get_report_descriptor_length(ddf_fun_t *fun) 145 { 146 usb_log_debug("Generic HID: Get report descriptor length.\n"); 147 148 if (fun == NULL || fun->driver_data == NULL) { 149 usb_log_debug("No function"); 150 return EINVAL; 151 } 152 153 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 154 155 return hid_dev->report_desc_size; 156 } 157 158 /*----------------------------------------------------------------------------*/ 159 160 static int usb_generic_get_report_descriptor(ddf_fun_t *fun, uint8_t *desc, 161 size_t size, size_t *actual_size) 162 { 163 usb_log_debug("Generic HID: Get report descriptor.\n"); 164 165 if (fun == NULL || fun->driver_data == NULL) { 166 usb_log_debug("No function"); 167 return EINVAL; 168 } 169 170 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 171 172 if (hid_dev->report_desc_size > size) { 173 return EINVAL; // TODO: other error code 174 } 175 176 memcpy(desc, hid_dev->report_desc, hid_dev->report_desc_size); 177 *actual_size = hid_dev->report_desc_size; 131 178 132 179 return EOK; -
uspace/drv/usbhid/multimedia/keymap.c
r4e78236 rd7c72db 75 75 }; 76 76 77 static const char *usb_hid_consumer_usage_str[0x29d] = {78 [0x01] = "Consumer Control",79 [0x02] = "Numeric Key Pad",80 [0x03] = "Programmable Buttons",81 [0x04] = "Microphone",82 [0x05] = "Headphone",83 [0x06] = "Graphic Equalizer",84 [0x07] = "Reserved",85 [0x08] = "Reserved",86 [0x09] = "Reserved",87 [0x0a] = "Reserved",88 [0x0b] = "Reserved",89 [0x0c] = "Reserved",90 [0x0d] = "Reserved",91 [0x0e] = "Reserved",92 [0x0f] = "Reserved",93 [0x10] = "Reserved",94 [0x11] = "Reserved",95 [0x12] = "Reserved",96 [0x13] = "Reserved",97 [0x14] = "Reserved",98 [0x15] = "Reserved",99 [0x16] = "Reserved",100 [0x17] = "Reserved",101 [0x18] = "Reserved",102 [0x19] = "Reserved",103 [0x1a] = "Reserved",104 [0x1b] = "Reserved",105 [0x1c] = "Reserved",106 [0x1d] = "Reserved",107 [0x1e] = "Reserved",108 [0x1f] = "Reserved",109 [0x20] = "+10",110 [0x21] = "+100",111 [0x22] = "AM/PM",112 [0x23] = "Reserved",113 [0x24] = "Reserved",114 [0x25] = "Reserved",115 [0x26] = "Reserved",116 [0x27] = "Reserved",117 [0x28] = "Reserved",118 [0x29] = "Reserved",119 [0x2a] = "Reserved",120 [0x2b] = "Reserved",121 [0x2c] = "Reserved",122 [0x2d] = "Reserved",123 [0x2e] = "Reserved",124 [0x2f] = "Reserved",125 [0x30] = "Reserved",126 [0x31] = "Reserved",127 [0x32] = "Reserved",128 [0x33] = "Reserved",129 [0x34] = "Reserved",130 [0x35] = "Reserved",131 [0x36] = "Reserved",132 [0x37] = "Reserved",133 [0x38] = "Reserved",134 [0x39] = "Reserved",135 [0x3a] = "Reserved",136 [0x3b] = "Reserved",137 [0x3c] = "Reserved",138 [0x3d] = "Reserved",139 [0x3e] = "Reserved",140 [0x3f] = "Reserved",141 [0x40] = "Menu",142 [0x41] = "Menu Pick",143 [0x42] = "Menu Up",144 [0x43] = "Menu Down",145 [0x44] = "Menu Left",146 [0x45] = "Menu Right",147 [0x46] = "Menu Escape",148 [0x47] = "Menu Value Increase",149 [0x48] = "Menu Value Decrease",150 [0x49] = "Reserved",151 [0x4a] = "Reserved",152 [0x4b] = "Reserved",153 [0x4c] = "Reserved",154 [0x4d] = "Reserved",155 [0x4e] = "Reserved",156 [0x4f] = "Reserved",157 [0x50] = "Reserved",158 [0x51] = "Reserved",159 [0x52] = "Reserved",160 [0x53] = "Reserved",161 [0x54] = "Reserved",162 [0x55] = "Reserved",163 [0x56] = "Reserved",164 [0x57] = "Reserved",165 [0x58] = "Reserved",166 [0x59] = "Reserved",167 [0x5a] = "Reserved",168 [0x5b] = "Reserved",169 [0x5c] = "Reserved",170 [0x5d] = "Reserved",171 [0x5e] = "Reserved",172 [0x5f] = "Reserved",173 [0x60] = "Data On Screen",174 [0x61] = "Closed Caption",175 [0x62] = "Closed Caption Select",176 [0x63] = "VCR/TV",177 [0x64] = "Broadcast Mode",178 [0x65] = "Snapshot",179 [0x66] = "Still",180 [0x67] = "Reserved",181 [0x68] = "Reserved",182 [0x69] = "Reserved",183 [0x6a] = "Reserved",184 [0x6b] = "Reserved",185 [0x6c] = "Reserved",186 [0x6d] = "Reserved",187 [0x6e] = "Reserved",188 [0x6f] = "Reserved",189 [0x70] = "Reserved",190 [0x71] = "Reserved",191 [0x72] = "Reserved",192 [0x73] = "Reserved",193 [0x74] = "Reserved",194 [0x75] = "Reserved",195 [0x76] = "Reserved",196 [0x77] = "Reserved",197 [0x78] = "Reserved",198 [0x79] = "Reserved",199 [0x7a] = "Reserved",200 [0x7b] = "Reserved",201 [0x7c] = "Reserved",202 [0x7d] = "Reserved",203 [0x7e] = "Reserved",204 [0x7f] = "Reserved",205 [0x80] = "Selection",206 [0x81] = "Assign Selection",207 [0x82] = "Mode Step",208 [0x83] = "Recall Last",209 [0x84] = "Enter Channel",210 [0x85] = "Order Movie",211 [0x86] = "Channel",212 [0x87] = "Media Selection",213 [0x88] = "Media Select Computer",214 [0x89] = "Media Select TV",215 [0x8a] = "Media Select WWW",216 [0x8b] = "Media Select DVD",217 [0x8c] = "Media Select Telephone",218 [0x8d] = "Media Select Program Guide",219 [0x8e] = "Media Select Video Phone",220 [0x8f] = "Media Select Games",221 [0x90] = "Media Select Messages",222 [0x91] = "Media Select CD",223 [0x92] = "Media Select VCR",224 [0x93] = "Media Select Tuner",225 [0x94] = "Quit",226 [0x95] = "Help",227 [0x96] = "Media Select Tape",228 [0x97] = "Media Select Cable",229 [0x98] = "Media Select Satellite",230 [0x99] = "Media Select Security",231 [0x9a] = "Media Select Home",232 [0x9b] = "Media Select Call",233 [0x9c] = "Channel Increment",234 [0x9d] = "Channel Decrement",235 [0x9e] = "Media Select SAP",236 [0x9f] = "Reserved",237 [0xa0] = "VCR Plus",238 [0xa1] = "Once",239 [0xa2] = "Daily",240 [0xa3] = "Weekly",241 [0xa4] = "Monthly",242 [0xa5] = "Reserved",243 [0xa6] = "Reserved",244 [0xa7] = "Reserved",245 [0xa8] = "Reserved",246 [0xa9] = "Reserved",247 [0xaa] = "Reserved",248 [0xab] = "Reserved",249 [0xac] = "Reserved",250 [0xad] = "Reserved",251 [0xae] = "Reserved",252 [0xaf] = "Reserved",253 [0xb0] = "Play",254 [0xb1] = "Pause",255 [0xb2] = "Record",256 [0xb3] = "Fast Forward",257 [0xb4] = "Rewind",258 [0xb5] = "Scan Next Track",259 [0xb6] = "Scan Previous Trac",260 [0xb7] = "Stop",261 [0xb8] = "Eject",262 [0xb9] = "Random Play",263 [0xba] = "Select Disc",264 [0xbb] = "Enter Disc",265 [0xbc] = "Repeat",266 [0xbd] = "Tracking",267 [0xbe] = "Track Normal",268 [0xbf] = "Slow Tracking",269 [0xc0] = "Frame Forward",270 [0xc1] = "Frame Back",271 [0xc2] = "Mark",272 [0xc3] = "Clear Mark",273 [0xc4] = "Repeat From Mark",274 [0xc5] = "Return to Mark",275 [0xc6] = "Search Mark Forward",276 [0xc7] = "Search Mark Backwards",277 [0xc8] = "Counter Reset",278 [0xc9] = "Show Counter",279 [0xca] = "Tracking Increment",280 [0xcb] = "Tracking Decrement",281 [0xcc] = "Stop/Eject",282 [0xcd] = "Play/Pause",283 [0xce] = "Play/Skip",284 [0xcf] = "Reserved",285 [0xd0] = "Reserved",286 [0xd1] = "Reserved",287 [0xd2] = "Reserved",288 [0xd3] = "Reserved",289 [0xd4] = "Reserved",290 [0xd5] = "Reserved",291 [0xd6] = "Reserved",292 [0xd7] = "Reserved",293 [0xd8] = "Reserved",294 [0xd9] = "Reserved",295 [0xda] = "Reserved",296 [0xdb] = "Reserved",297 [0xdc] = "Reserved",298 [0xdd] = "Reserved",299 [0xde] = "Reserved",300 [0xdf] = "Reserved",301 [0xe0] = "Volume",302 [0xe1] = "Balance",303 [0xe2] = "Mute",304 [0xe3] = "Bass",305 [0xe4] = "Treble",306 [0xe5] = "Bass Boost",307 [0xe6] = "Surround Mode",308 [0xe7] = "Loudness",309 [0xe8] = "MPX",310 [0xe9] = "Volume Increment",311 [0xea] = "Volume Decrement",312 [0xeb] = "Reserved",313 [0xec] = "Reserved",314 [0xed] = "Reserved",315 [0xee] = "Reserved",316 [0xef] = "Reserved",317 [0xf0] = "Speed Select",318 [0xf1] = "Playback Speed",319 [0xf2] = "Standard Play",320 [0xf3] = "Long Play",321 [0xf4] = "Extended Play",322 [0xf5] = "Slow",323 [0xf6] = "Reserved",324 [0xf7] = "Reserved",325 [0xf8] = "Reserved",326 [0xf9] = "Reserved",327 [0xfa] = "Reserved",328 [0xfb] = "Reserved",329 [0xfc] = "Reserved",330 [0xfd] = "Reserved",331 [0xfe] = "Reserved",332 [0xff] = "Reserved",333 [0x100] = "Fan Enable",334 [0x101] = "Fan Speed",335 [0x102] = "Light Enable",336 [0x103] = "Light Illumination Level",337 [0x104] = "Climate Control Enable",338 [0x105] = "Room Temperature",339 [0x106] = "Security Enable",340 [0x107] = "Fire Alarm",341 [0x108] = "Police Alarm",342 [0x109] = "Proximity",343 [0x10a] = "Motion",344 [0x10b] = "Duress Alarm",345 [0x10c] = "Holdup Alarm",346 [0x10d] = "Medical Alarm",347 [0x10e] = "Reserved",348 [0x10f] = "Reserved",349 [0x110] = "Reserved",350 [0x111] = "Reserved",351 [0x112] = "Reserved",352 [0x113] = "Reserved",353 [0x114] = "Reserved",354 [0x115] = "Reserved",355 [0x116] = "Reserved",356 [0x117] = "Reserved",357 [0x118] = "Reserved",358 [0x119] = "Reserved",359 [0x11a] = "Reserved",360 [0x11b] = "Reserved",361 [0x11c] = "Reserved",362 [0x11d] = "Reserved",363 [0x11e] = "Reserved",364 [0x11f] = "Reserved",365 [0x120] = "Reserved",366 [0x121] = "Reserved",367 [0x122] = "Reserved",368 [0x123] = "Reserved",369 [0x124] = "Reserved",370 [0x125] = "Reserved",371 [0x126] = "Reserved",372 [0x127] = "Reserved",373 [0x128] = "Reserved",374 [0x129] = "Reserved",375 [0x12a] = "Reserved",376 [0x12b] = "Reserved",377 [0x12c] = "Reserved",378 [0x12d] = "Reserved",379 [0x12e] = "Reserved",380 [0x12f] = "Reserved",381 [0x130] = "Reserved",382 [0x131] = "Reserved",383 [0x132] = "Reserved",384 [0x133] = "Reserved",385 [0x134] = "Reserved",386 [0x135] = "Reserved",387 [0x136] = "Reserved",388 [0x137] = "Reserved",389 [0x138] = "Reserved",390 [0x139] = "Reserved",391 [0x13a] = "Reserved",392 [0x13b] = "Reserved",393 [0x13c] = "Reserved",394 [0x13d] = "Reserved",395 [0x13e] = "Reserved",396 [0x13f] = "Reserved",397 [0x140] = "Reserved",398 [0x141] = "Reserved",399 [0x142] = "Reserved",400 [0x143] = "Reserved",401 [0x144] = "Reserved",402 [0x145] = "Reserved",403 [0x146] = "Reserved",404 [0x147] = "Reserved",405 [0x148] = "Reserved",406 [0x149] = "Reserved",407 [0x14a] = "Reserved",408 [0x14b] = "Reserved",409 [0x14c] = "Reserved",410 [0x14d] = "Reserved",411 [0x14e] = "Reserved",412 [0x14f] = "Reserved",413 [0x150] = "Balance Right",414 [0x151] = "Balance Left",415 [0x152] = "Bass Increment",416 [0x153] = "Bass Decrement",417 [0x154] = "Treble Increment",418 [0x155] = "Treble Decrement",419 [0x156] = "Reserved",420 [0x157] = "Reserved",421 [0x158] = "Reserved",422 [0x159] = "Reserved",423 [0x15a] = "Reserved",424 [0x15b] = "Reserved",425 [0x15c] = "Reserved",426 [0x15d] = "Reserved",427 [0x15e] = "Reserved",428 [0x15f] = "Reserved",429 [0x160] = "Speaker System",430 [0x161] = "Channel Left",431 [0x162] = "Channel Right",432 [0x163] = "Channel Center",433 [0x164] = "Channel Front",434 [0x165] = "Channel Center Front",435 [0x166] = "Channel Side",436 [0x167] = "Channel Surround",437 [0x168] = "Channel Low Frequency Enhancement",438 [0x169] = "Channel Top",439 [0x16a] = "Channel Unknown",440 [0x16b] = "Reserved",441 [0x16c] = "Reserved",442 [0x16d] = "Reserved",443 [0x16e] = "Reserved",444 [0x16f] = "Reserved",445 [0x170] = "Sub-channel",446 [0x171] = "Sub-channel Increment",447 [0x172] = "Sub-channel Decrement",448 [0x173] = "Alternate Audio Increment",449 [0x174] = "Alternate Audio Decrement",450 [0x175] = "Reserved",451 [0x176] = "Reserved",452 [0x177] = "Reserved",453 [0x178] = "Reserved",454 [0x179] = "Reserved",455 [0x17a] = "Reserved",456 [0x17b] = "Reserved",457 [0x17c] = "Reserved",458 [0x17d] = "Reserved",459 [0x17e] = "Reserved",460 [0x17f] = "Reserved",461 [0x180] = "Application Launch Buttons",462 [0x181] = "AL Launch Buttion Configuration Tool",463 [0x182] = "AL Programmable Button Configuration",464 [0x183] = "AL Consumer Control Configuration",465 [0x184] = "AL Word Processor",466 [0x185] = "AL Text Editor",467 [0x186] = "AL Spreadsheet",468 [0x187] = "AL Graphics Editor",469 [0x188] = "AL Presentation App",470 [0x189] = "AL Database App",471 [0x18a] = "AL Email Reader",472 [0x18b] = "AL Newsreader",473 [0x18c] = "AL Voicemail",474 [0x18d] = "AL Contacts/Address Book",475 [0x18e] = "AL Calendar/Schedule",476 [0x18f] = "AL Task/Project Manager",477 [0x190] = "AL Log/Journal/Timecard",478 [0x191] = "AL Checkbook/Finance",479 [0x192] = "AL Calculator",480 [0x193] = "AL A/V Capture/Playback",481 [0x194] = "AL Local Machine Browser",482 [0x195] = "AL LAN/WAN Browser",483 [0x196] = "AL Internet Browser",484 [0x197] = "AL Remote Networking/ISP Connect",485 [0x198] = "AL Network Conference",486 [0x199] = "AL Network Chat",487 [0x19a] = "AL Telephony/Dialer",488 [0x19b] = "AL Logon",489 [0x19c] = "AL Logoff",490 [0x19d] = "AL Logon/Logoff",491 [0x19e] = "AL Terminal Lock/Screensaver",492 [0x19f] = "AL Control Panel",493 [0x1a0] = "AL Command Line Processor/Run",494 [0x1a1] = "AL Process/Task Manager",495 [0x1a2] = "AL Select Task/Application",496 [0x1a3] = "AL Next Task/Application",497 [0x1a4] = "AL Previous Task/Application",498 [0x1a5] = "AL Preemptive Halt Task/Application",499 [0x1a6] = "AL Integrated Help Center",500 [0x1a7] = "AL Documents",501 [0x1a8] = "AL Thesaurus",502 [0x1a9] = "AL Dictionary",503 [0x1aa] = "AL Desktop",504 [0x1ab] = "AL Spell Check",505 [0x1ac] = "AL Grammar Check",506 [0x1ad] = "AL Wireless Status",507 [0x1ae] = "AL Keyboard Layout",508 [0x1af] = "AL Virus Protection",509 [0x1b0] = "AL Encryption",510 [0x1b1] = "AL Screen Saver",511 [0x1b2] = "AL Alarms",512 [0x1b3] = "AL Clock",513 [0x1b4] = "AL File Browser",514 [0x1b5] = "AL Power Status",515 [0x1b6] = "AL Image Browser",516 [0x1b7] = "AL Audio Browser",517 [0x1b8] = "AL Movie Browser",518 [0x1b9] = "AL Digital Rights Manager",519 [0x1ba] = "AL Digital Wallet",520 [0x1bb] = "Reserved",521 [0x1bc] = "AL Instant Messaging",522 [0x1bd] = "AL OEM Features Tips/Tutorial Browser",523 [0x1be] = "AL OEM Help",524 [0x1bf] = "AL Online Community",525 [0x1c0] = "AL Entertainment Content Browser",526 [0x1c1] = "AL Online Shopping Browser",527 [0x1c2] = "AL SmartCard Information/Help",528 [0x1c3] = "AL Market Monitor/Finance Browser",529 [0x1c4] = "AL Customized Corporate News Browser",530 [0x1c5] = "AL Online Activity Browser",531 [0x1c6] = "AL Research/Search Browser",532 [0x1c7] = "AL Audio Player",533 [0x1c8] = "Reserved",534 [0x1c9] = "Reserved",535 [0x1ca] = "Reserved",536 [0x1cb] = "Reserved",537 [0x1cc] = "Reserved",538 [0x1cd] = "Reserved",539 [0x1ce] = "Reserved",540 [0x1cf] = "Reserved",541 [0x1d0] = "Reserved",542 [0x1d1] = "Reserved",543 [0x1d2] = "Reserved",544 [0x1d3] = "Reserved",545 [0x1d4] = "Reserved",546 [0x1d5] = "Reserved",547 [0x1d6] = "Reserved",548 [0x1d7] = "Reserved",549 [0x1d8] = "Reserved",550 [0x1d9] = "Reserved",551 [0x1da] = "Reserved",552 [0x1db] = "Reserved",553 [0x1dc] = "Reserved",554 [0x1dd] = "Reserved",555 [0x1de] = "Reserved",556 [0x1df] = "Reserved",557 [0x1e0] = "Reserved",558 [0x1e1] = "Reserved",559 [0x1e2] = "Reserved",560 [0x1e3] = "Reserved",561 [0x1e4] = "Reserved",562 [0x1e5] = "Reserved",563 [0x1e6] = "Reserved",564 [0x1e7] = "Reserved",565 [0x1e8] = "Reserved",566 [0x1e9] = "Reserved",567 [0x1ea] = "Reserved",568 [0x1eb] = "Reserved",569 [0x1ec] = "Reserved",570 [0x1ed] = "Reserved",571 [0x1ee] = "Reserved",572 [0x1ef] = "Reserved",573 [0x1f0] = "Reserved",574 [0x1f1] = "Reserved",575 [0x1f2] = "Reserved",576 [0x1f3] = "Reserved",577 [0x1f4] = "Reserved",578 [0x1f5] = "Reserved",579 [0x1f6] = "Reserved",580 [0x1f7] = "Reserved",581 [0x1f8] = "Reserved",582 [0x1f9] = "Reserved",583 [0x1fa] = "Reserved",584 [0x1fb] = "Reserved",585 [0x1fc] = "Reserved",586 [0x1fd] = "Reserved",587 [0x1fe] = "Reserved",588 [0x1ff] = "Reserved",589 [0x200] = "Generic GUI Application Controls",590 [0x201] = "AC New",591 [0x202] = "AC Open",592 [0x203] = "AC Close",593 [0x204] = "AC Exit",594 [0x205] = "AC Maximize",595 [0x206] = "AC Minimize",596 [0x207] = "AC Save",597 [0x208] = "AC Print",598 [0x209] = "AC Properties",599 [0x20a] = "",600 [0x20b] = "",601 [0x20c] = "",602 [0x20d] = "",603 [0x20e] = "",604 [0x20f] = "",605 [0x210] = "",606 [0x211] = "",607 [0x212] = "",608 [0x213] = "",609 [0x214] = "",610 [0x215] = "",611 [0x216] = "",612 [0x217] = "",613 [0x218] = "",614 [0x219] = "",615 [0x21a] = "AC Undo",616 [0x21b] = "AC Copy",617 [0x21c] = "AC Cut",618 [0x21d] = "AC Paste",619 [0x21e] = "AC Select All",620 [0x21f] = "AC Find",621 [0x220] = "AC Find and Replace",622 [0x221] = "AC Search",623 [0x222] = "AC Go To",624 [0x223] = "AC Home",625 [0x224] = "AC Back",626 [0x225] = "AC Forward",627 [0x226] = "AC Stop",628 [0x227] = "AC Refresh",629 [0x228] = "AC Previous Link",630 [0x229] = "AC Next Link",631 [0x22a] = "AC Bookmarks",632 [0x22b] = "AC History",633 [0x22c] = "AC Subscriptions",634 [0x22d] = "AC Zoom In",635 [0x22e] = "AC Zoom Out",636 [0x22f] = "AC Zoom",637 [0x230] = "AC Full Screen View",638 [0x231] = "AC Normal View",639 [0x232] = "AC View Toggle",640 [0x233] = "AC Scroll Up",641 [0x234] = "AC Scroll Down",642 [0x235] = "AC Scroll",643 [0x236] = "AC Pan Left",644 [0x237] = "AC Pan Right",645 [0x238] = "AC Pan",646 [0x239] = "AC New Window",647 [0x23a] = "AC Tile Horizontally",648 [0x23b] = "AC Tile Vertically",649 [0x23c] = "AC Format",650 [0x23d] = "AC Edit",651 [0x23e] = "AC Bold",652 [0x23f] = "AC Italics",653 [0x240] = "AC Undeline",654 [0x241] = "AC Strikethrough",655 [0x242] = "AC Subscript",656 [0x243] = "AC Superscript",657 [0x244] = "AC All Caps",658 [0x245] = "AC Rotate",659 [0x246] = "AC Resize",660 [0x247] = "AC Flip Horizontal",661 [0x248] = "AC Flip Vertical",662 [0x249] = "AC Mirror Horizontal",663 [0x24a] = "AC Mirror Vertical",664 [0x24b] = "AC Font Select",665 [0x24c] = "AC Font Color",666 [0x24d] = "AC Font Size",667 [0x24e] = "AC Justify Left",668 [0x24f] = "AC Justify Center H",669 [0x250] = "AC Justify Right",670 [0x251] = "AC Justify Block H",671 [0x252] = "AC Justify Top",672 [0x253] = "AC Justify Center V",673 [0x254] = "AC Justify Bottom",674 [0x255] = "AC Justify Block V",675 [0x256] = "AC Indent Decrease",676 [0x257] = "AC Indent Increase",677 [0x258] = "AC Numbered List",678 [0x259] = "AC Restart Numbering",679 [0x25a] = "AC Bulleted List",680 [0x25b] = "AC Promote",681 [0x25c] = "AC Demote",682 [0x25d] = "AC Yes",683 [0x25e] = "AC No",684 [0x25f] = "AC Cancel",685 [0x260] = "AC Catalog",686 [0x261] = "AC Buy/Checkout",687 [0x262] = "AC Add to Cart",688 [0x263] = "AC Expand",689 [0x264] = "AC Expand All",690 [0x265] = "AC Collapse",691 [0x266] = "AC Collapse All",692 [0x267] = "AC Print Preview",693 [0x268] = "AC Paste Special",694 [0x269] = "AC Insert Mode",695 [0x26a] = "AC Delete",696 [0x26b] = "AC Lock",697 [0x26c] = "AC Unlock",698 [0x26d] = "AC Protect",699 [0x26e] = "AC Unprotect",700 [0x26f] = "AC Attach Comment",701 [0x270] = "AC Delete Comment",702 [0x271] = "AC View Comment",703 [0x272] = "AC Select Word",704 [0x273] = "AC Select Sentence",705 [0x274] = "AC Select Paragraph",706 [0x275] = "AC Select Column",707 [0x276] = "AC Select Row",708 [0x277] = "AC Select Table",709 [0x278] = "AC Select Object",710 [0x279] = "AC Redo/Repeat",711 [0x27a] = "AC Sort",712 [0x27b] = "AC Sort Ascending",713 [0x27c] = "AC Sort Descending",714 [0x27d] = "AC Filter",715 [0x27e] = "AC Set Clock",716 [0x27f] = "AC View Clock",717 [0x280] = "AC Select Time Zone",718 [0x281] = "AC Edit Time Zones",719 [0x282] = "AC Set Alarm",720 [0x283] = "AC Clear Alarm",721 [0x284] = "AC Snooze Alarm",722 [0x285] = "AC Reset Alarm",723 [0x286] = "AC Synchronize",724 [0x287] = "AC Send/Receive",725 [0x288] = "AC Send To",726 [0x289] = "AC Reply",727 [0x28a] = "AC Reply All",728 [0x28b] = "AC Forward Msg",729 [0x28c] = "AC Send",730 [0x28d] = "AC Attach File",731 [0x28e] = "AC Upload",732 [0x28f] = "AC Download (Save Target As)",733 [0x290] = "AC Set Borders",734 [0x291] = "AC Insert Row",735 [0x292] = "AC Insert Column",736 [0x293] = "AC Insert File",737 [0x294] = "AC Insert Picture",738 [0x295] = "AC Insert Object",739 [0x296] = "AC Insert Symbol",740 [0x297] = "AC Save and Close",741 [0x298] = "AC Rename",742 [0x299] = "AC Merge",743 [0x29a] = "AC Split",744 [0x29b] = "AC Distrubute Horizontally",745 [0x29c] = "AC Distrubute Vertically"746 };747 748 77 /** 749 78 * Translates USB HID Usages from the Consumer Page into HelenOS keycodes. … … 769 98 770 99 /** 771 * Translates USB HID Usages from the Consumer Page into their string772 * representation.773 *774 * @param usage USB HID Consumer Page Usage number.775 *776 * @retval HelenOS key code corresponding to the given USB Consumer Page Usage.777 */778 const char *usb_multimedia_usage_to_str(int usage)779 {780 size_t map_length = sizeof(usb_hid_consumer_usage_str) / sizeof(char *);781 782 if ((usage < 0) || ((size_t)usage >= map_length))783 return "Unknown usage";784 785 /*! @todo What if the usage is not in the table? */786 return usb_hid_consumer_usage_str[usage];787 }788 789 /**790 100 * @} 791 101 */ -
uspace/drv/usbhid/multimedia/keymap.h
r4e78236 rd7c72db 39 39 unsigned int usb_multimedia_map_usage(int usage); 40 40 41 const char *usb_multimedia_usage_to_str(int usage);42 43 41 #endif /* USB_HID_MULTIMEDIA_KEYMAP_H_ */ 44 42 -
uspace/drv/usbhid/multimedia/multimedia.c
r4e78236 rd7c72db 43 43 #include <usb/debug.h> 44 44 #include <usb/hid/usages/core.h> 45 #include <usb/hid/usages/consumer.h> 45 46 46 47 #include <errno.h> … … 359 360 usb_multimedia_map_usage(field->usage); 360 361 const char *key_str = 361 usb _multimedia_usage_to_str(field->usage);362 usbhid_multimedia_usage_to_str(field->usage); 362 363 usb_log_info("Pressed key: %s\n", key_str); 363 364 usb_multimedia_push_ev(hid_dev, multim_dev, KEY_PRESS, -
uspace/lib/drv/generic/dev_iface.c
r4e78236 rd7c72db 61 61 remote_iface_t *get_remote_iface(int idx) 62 62 { 63 printf("get_remote_iface(): idx: %d\n", idx);64 63 assert(is_valid_iface_idx(idx)); 65 printf("remote iface: %p\n", remote_ifaces.ifaces[idx]);66 67 printf("remote_usbhid_iface ptr: %p\n", &remote_usbhid_iface);68 64 69 65 return remote_ifaces.ifaces[idx]; … … 73 69 get_remote_method(remote_iface_t *rem_iface, sysarg_t iface_method_idx) 74 70 { 75 printf("remote iface: %p\n", rem_iface);76 printf("Method count: %d\n", rem_iface->method_count);77 71 if (iface_method_idx >= rem_iface->method_count) { 78 72 return NULL; -
uspace/lib/drv/generic/remote_usbhid.c
r4e78236 rd7c72db 43 43 static void remote_usbhid_get_event_length(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 44 44 static void remote_usbhid_get_event(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 45 static void remote_usbhid_get_report_descriptor_length(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 46 static void remote_usbhid_get_report_descriptor(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 45 47 // static void remote_usbhid_(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 46 48 … … 48 50 static remote_iface_func_ptr_t remote_usbhid_iface_ops [] = { 49 51 remote_usbhid_get_event_length, 50 remote_usbhid_get_event 52 remote_usbhid_get_event, 53 remote_usbhid_get_report_descriptor_length, 54 remote_usbhid_get_report_descriptor 51 55 }; 52 56 … … 117 121 int rc; 118 122 119 int32_t *data = malloc(len);123 uint8_t *data = malloc(len); 120 124 if (data == NULL) { 121 125 async_answer_0(data_callid, ENOMEM); … … 143 147 } 144 148 149 void remote_usbhid_get_report_descriptor(ddf_fun_t *fun, void *iface, 150 ipc_callid_t callid, ipc_call_t *call) 151 { 152 /** @todo Implement! */ 153 } 154 155 void remote_usbhid_get_report_descriptor_length(ddf_fun_t *fun, void *iface, 156 ipc_callid_t callid, ipc_call_t *call) 157 { 158 /** @todo Implement! */ 159 } 160 145 161 /** 146 162 * @} -
uspace/lib/drv/include/usbhid_iface.h
r4e78236 rd7c72db 45 45 * Parameters: none 46 46 * Answer: 47 * - EOK (expected always as long as device support USB HID interface) 48 * Parameters of the answer: 49 * - number of items 47 * - Size of one report in bytes. 50 48 */ 51 49 IPC_M_USBHID_GET_EVENT_LENGTH, … … 63 61 * It is okay if the client requests less data. Extra data must 64 62 * be truncated by the driver. 63 * 64 * @todo Change this comment. 65 65 */ 66 IPC_M_USBHID_GET_EVENT 66 IPC_M_USBHID_GET_EVENT, 67 68 /** Get the size of the report descriptor from the HID device. 69 * 70 * Parameters: 71 * - none 72 * Answer: 73 * - Size of one report in bytes. 74 * - 75 * 76 * @todo Finish this comment 77 */ 78 IPC_M_USBHID_GET_REPORT_DESCRIPTOR_LENGTH, 79 80 /** Get the report descriptor from the HID device. 81 * 82 * Parameters: 83 * - none 84 * Answer: 85 * - EOK - report descriptor returned. 86 * - 87 * 88 * @todo Finish this comment 89 */ 90 IPC_M_USBHID_GET_REPORT_DESCRIPTOR 67 91 } usbhid_iface_funcs_t; 68 92 … … 75 99 * 76 100 * @param[in] fun DDF function answering the request. 77 * @return Number of events or error code.101 * @return Size of the event in bytes. 78 102 */ 79 103 size_t (*get_event_length)(ddf_fun_t *fun); … … 87 111 * @return Error code. 88 112 */ 89 int (*get_event)(ddf_fun_t *fun, int32_t *buffer, size_t size,113 int (*get_event)(ddf_fun_t *fun, uint8_t *buffer, size_t size, 90 114 size_t *act_size, unsigned int flags); 115 116 /** Get size of the report descriptor in bytes. 117 * 118 * @param[in] fun DDF function answering the request. 119 * @return Size of the report descriptor in bytes. 120 */ 121 size_t (*get_report_descriptor_length)(ddf_fun_t *fun); 122 123 /** Get the report descriptor from the HID device. 124 * 125 * @param[in] fun DDF function answering the request. 126 * @param[out] desc Buffer with the report descriptor. 127 * @param[out] size Size of the report descriptors in bytes. 128 * @return Error code. 129 */ 130 int (*get_report_descriptor)(ddf_fun_t *fun, uint8_t *desc, 131 size_t size, size_t *act_size); 91 132 } usbhid_iface_t; 92 133 -
uspace/lib/usbhid/Makefile
r4e78236 rd7c72db 41 41 src/hidpath.c \ 42 42 src/hidreport.c \ 43 src/consumer.c \ 43 44 src/hidreq.c 44 45 -
uspace/lib/usbhid/include/usb/hid/iface.h
r4e78236 rd7c72db 39 39 40 40 int usbhid_dev_get_event_length(int, size_t *); 41 int usbhid_dev_get_event(int, int32_t *, size_t, size_t *,41 int usbhid_dev_get_event(int, uint8_t *, size_t, size_t *, 42 42 unsigned int); 43 int usbhid_dev_get_report_descriptor_length(int, size_t *); 44 int usbhid_dev_get_report_descriptor(int, uint8_t *, size_t, size_t *); 43 45 44 46 #endif -
uspace/lib/usbhid/src/hidiface.c
r4e78236 rd7c72db 74 74 * @return Error code. 75 75 */ 76 int usbhid_dev_get_event(int dev_phone, int32_t *buf,76 int usbhid_dev_get_event(int dev_phone, uint8_t *buf, 77 77 size_t size, size_t *actual_size, unsigned int flags) 78 78 { … … 92 92 93 93 size_t buffer_size = size; 94 uint 16_t *buffer = malloc(buffer_size);94 uint8_t *buffer = malloc(buffer_size); 95 95 if (buffer == NULL) { 96 96 return ENOMEM; … … 145 145 } 146 146 147 148 int usbhid_dev_get_report_descriptor_length(int dev_phone, size_t *size) 149 { 150 /** @todo Implement! */ 151 return ENOTSUP; 152 } 153 154 int usbhid_dev_get_report_descriptor(int dev_phone, uint8_t *buf, size_t size, 155 size_t *actual_size) 156 { 157 /** @todo Implement! */ 158 return ENOTSUP; 159 } 160 147 161 /** 148 162 * @}
Note:
See TracChangeset
for help on using the changeset viewer.