Changeset e765ccb in mainline for uspace/lib
- Timestamp:
- 2011-05-20T10:44:53Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e7079cf
- Parents:
- d1fb591
- Location:
- uspace/lib
- Files:
-
- 3 edited
-
drv/generic/remote_usbhid.c (modified) (3 diffs)
-
usbhid/include/usb/hid/iface.h (modified) (1 diff)
-
usbhid/src/hidiface.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/generic/remote_usbhid.c
rd1fb591 re765ccb 71 71 } 72 72 73 int len = hid_iface->get_event_length(fun);73 size_t len = hid_iface->get_event_length(fun); 74 74 if (len == 0) { 75 75 len = EEMPTY; … … 100 100 return; 101 101 } 102 /* Check that length is even number. Truncate otherwise. */103 if ((len % 2) == 1) {104 len--;105 }102 // /* Check that length is even number. Truncate otherwise. */ 103 // if ((len % 2) == 1) { 104 // len--; 105 // } 106 106 if (len == 0) { 107 107 async_answer_0(data_callid, EINVAL); … … 111 111 int rc; 112 112 113 size_t items = len / 2; 114 uint16_t *usage_pages_and_usages = malloc(sizeof(uint16_t) * len); 115 if (usage_pages_and_usages == NULL) { 113 int32_t *data = malloc(len); 114 if (data == NULL) { 116 115 async_answer_0(data_callid, ENOMEM); 117 116 async_answer_0(callid, ENOMEM); 118 117 } 119 118 120 size_t act_items; 121 int rc = hid_iface->get_event(fun, usage_pages_and_usages, 122 usage_pages_and_usages + items, items, &act_items, flags); 119 size_t act_length; 120 rc = hid_iface->get_event(fun, data, len, &act_length, flags); 123 121 if (rc != EOK) { 124 free( usage_pages_and_usages);122 free(data); 125 123 async_answer_0(data_callid, rc); 126 124 async_answer_0(callid, rc); 127 125 } 128 if (act_ items >= items) {126 if (act_length >= len) { 129 127 /* This shall not happen. */ 130 128 // FIXME: how about an assert here? 131 act_ items = items;129 act_length = len; 132 130 } 133 131 134 async_data_read_finalize(data_callid, usage_pages_and_usages, 135 act_items * 2 * sizeof(uint16_t)); 132 async_data_read_finalize(data_callid, data, act_length); 136 133 137 free( usage_pages_and_usages);134 free(data); 138 135 139 136 async_answer_0(callid, EOK); -
uspace/lib/usbhid/include/usb/hid/iface.h
rd1fb591 re765ccb 38 38 #include <sys/types.h> 39 39 40 int usbhid_dev_get_event_length(int );41 int usbhid_dev_get_event(int, uint16_t *, uint16_t *, size_t, size_t *,40 int usbhid_dev_get_event_length(int, size_t *); 41 int usbhid_dev_get_event(int, int32_t *, size_t, size_t *, 42 42 unsigned int); 43 43 -
uspace/lib/usbhid/src/hidiface.c
rd1fb591 re765ccb 46 46 * @return Number of usages returned or negative error code. 47 47 */ 48 int usbhid_dev_get_event_length(int dev_phone )48 int usbhid_dev_get_event_length(int dev_phone, size_t *size) 49 49 { 50 50 if (dev_phone < 0) { … … 56 56 IPC_M_USBHID_GET_EVENT_LENGTH, &len); 57 57 if (rc == EOK) { 58 return (int) len; 59 } else { 60 return rc; 58 *size = (size_t) len; 61 59 } 60 61 return rc; 62 62 } 63 63 … … 74 74 * @return Error code. 75 75 */ 76 int usbhid_dev_get_event(int dev_phone, uint16_t *usage_pages, uint16_t *usages,77 size_t usage_count, size_t *actual_usage_count, unsigned int flags)76 int usbhid_dev_get_event(int dev_phone, int32_t *buf, 77 size_t size, size_t *actual_size, unsigned int flags) 78 78 { 79 79 if (dev_phone < 0) { 80 80 return EINVAL; 81 81 } 82 if (( usage_pages == NULL) || (usages== NULL)) {82 if ((buf == NULL)) { 83 83 return ENOMEM; 84 84 } 85 if ( usage_count== 0) {85 if (size == 0) { 86 86 return EINVAL; 87 87 } 88 88 89 size_t buffer_size = sizeof(uint16_t) * usage_count * 2;89 size_t buffer_size = size; 90 90 uint16_t *buffer = malloc(buffer_size); 91 91 if (buffer == NULL) { … … 128 128 } 129 129 130 size_t actual_size = IPC_GET_ARG2(data_request_call); 131 size_t items = actual_size / 2; 130 size_t act_size = IPC_GET_ARG2(data_request_call); 132 131 133 132 /* Copy the individual items. */ 134 memcpy( usage_pages, buffer, items * sizeof(uint16_t));135 memcpy(usages, buffer + items, items * sizeof(uint16_t));133 memcpy(buf, buffer, act_size); 134 // memcpy(usages, buffer + items, items * sizeof(int32_t)); 136 135 137 if (actual_ usage_count!= NULL) {138 *actual_ usage_count = items;136 if (actual_size != NULL) { 137 *actual_size = act_size; 139 138 } 140 139
Note:
See TracChangeset
for help on using the changeset viewer.
