Changeset a35b458 in mainline for uspace/lib/drv/generic/remote_usbhid.c
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/generic/remote_usbhid.c
r3061bc1 ra35b458 67 67 */ 68 68 IPC_M_USBHID_GET_EVENT, 69 69 70 70 /** Get the size of the report descriptor from the HID device. 71 71 * … … 78 78 */ 79 79 IPC_M_USBHID_GET_REPORT_DESCRIPTOR_LENGTH, 80 80 81 81 /** Get the report descriptor from the HID device. 82 82 * … … 101 101 if (!dev_sess) 102 102 return EINVAL; 103 103 104 104 async_exch_t *exch = async_exchange_begin(dev_sess); 105 105 106 106 sysarg_t len; 107 107 errno_t rc = async_req_1_1(exch, DEV_IFACE_ID(USBHID_DEV_IFACE), 108 108 IPC_M_USBHID_GET_EVENT_LENGTH, &len); 109 109 110 110 async_exchange_end(exch); 111 111 112 112 if (rc == EOK) { 113 113 if (size != NULL) 114 114 *size = (size_t) len; 115 115 } 116 116 117 117 return rc; 118 118 } … … 137 137 if (!dev_sess) 138 138 return EINVAL; 139 139 140 140 if (buf == NULL) 141 141 return ENOMEM; 142 142 143 143 if (size == 0) 144 144 return EINVAL; 145 145 146 146 size_t buffer_size = size; 147 147 uint8_t *buffer = malloc(buffer_size); 148 148 if (buffer == NULL) 149 149 return ENOMEM; 150 150 151 151 async_exch_t *exch = async_exchange_begin(dev_sess); 152 152 153 153 ipc_call_t opening_request_call; 154 154 aid_t opening_request = async_send_2(exch, 155 155 DEV_IFACE_ID(USBHID_DEV_IFACE), IPC_M_USBHID_GET_EVENT, 156 156 flags, &opening_request_call); 157 157 158 158 if (opening_request == 0) { 159 159 async_exchange_end(exch); … … 161 161 return ENOMEM; 162 162 } 163 163 164 164 ipc_call_t data_request_call; 165 165 aid_t data_request = async_data_read(exch, buffer, buffer_size, 166 166 &data_request_call); 167 167 168 168 async_exchange_end(exch); 169 169 170 170 if (data_request == 0) { 171 171 async_forget(opening_request); … … 173 173 return ENOMEM; 174 174 } 175 175 176 176 errno_t data_request_rc; 177 177 errno_t opening_request_rc; 178 178 async_wait_for(data_request, &data_request_rc); 179 179 async_wait_for(opening_request, &opening_request_rc); 180 180 181 181 if (data_request_rc != EOK) { 182 182 /* Prefer return code of the opening request. */ … … 186 186 return (errno_t) data_request_rc; 187 187 } 188 188 189 189 if (opening_request_rc != EOK) 190 190 return (errno_t) opening_request_rc; 191 191 192 192 size_t act_size = IPC_GET_ARG2(data_request_call); 193 193 194 194 /* Copy the individual items. */ 195 195 memcpy(buf, buffer, act_size); 196 196 197 197 if (actual_size != NULL) 198 198 *actual_size = act_size; 199 199 200 200 if (event_nr != NULL) 201 201 *event_nr = IPC_GET_ARG1(opening_request_call); 202 202 203 203 return EOK; 204 204 } … … 209 209 if (!dev_sess) 210 210 return EINVAL; 211 211 212 212 async_exch_t *exch = async_exchange_begin(dev_sess); 213 213 214 214 sysarg_t arg_size; 215 215 errno_t rc = async_req_1_1(exch, DEV_IFACE_ID(USBHID_DEV_IFACE), 216 216 IPC_M_USBHID_GET_REPORT_DESCRIPTOR_LENGTH, &arg_size); 217 217 218 218 async_exchange_end(exch); 219 219 220 220 if (rc == EOK) { 221 221 if (size != NULL) 222 222 *size = (size_t) arg_size; 223 223 } 224 224 225 225 return rc; 226 226 } … … 231 231 if (!dev_sess) 232 232 return EINVAL; 233 233 234 234 if (buf == NULL) 235 235 return ENOMEM; 236 236 237 237 if (size == 0) 238 238 return EINVAL; 239 239 240 240 async_exch_t *exch = async_exchange_begin(dev_sess); 241 241 242 242 aid_t opening_request = async_send_1(exch, 243 243 DEV_IFACE_ID(USBHID_DEV_IFACE), IPC_M_USBHID_GET_REPORT_DESCRIPTOR, … … 247 247 return ENOMEM; 248 248 } 249 249 250 250 ipc_call_t data_request_call; 251 251 aid_t data_request = async_data_read(exch, buf, size, 252 252 &data_request_call); 253 253 254 254 async_exchange_end(exch); 255 255 256 256 if (data_request == 0) { 257 257 async_forget(opening_request); 258 258 return ENOMEM; 259 259 } 260 260 261 261 errno_t data_request_rc; 262 262 errno_t opening_request_rc; 263 263 async_wait_for(data_request, &data_request_rc); 264 264 async_wait_for(opening_request, &opening_request_rc); 265 265 266 266 if (data_request_rc != EOK) { 267 267 /* Prefer return code of the opening request. */ … … 271 271 return (errno_t) data_request_rc; 272 272 } 273 273 274 274 if (opening_request_rc != EOK) 275 275 return (errno_t) opening_request_rc; 276 276 277 277 size_t act_size = IPC_GET_ARG2(data_request_call); 278 278 279 279 if (actual_size != NULL) 280 280 *actual_size = act_size; 281 281 282 282 return EOK; 283 283 } … … 312 312 { 313 313 printf("remote_usbhid_get_event_length()\n"); 314 314 315 315 usbhid_iface_t *hid_iface = (usbhid_iface_t *) iface; 316 316 … … 326 326 // } 327 327 async_answer_1(callid, EOK, len); 328 328 329 329 // if (len < 0) { 330 330 // async_answer_0(callid, len);
Note:
See TracChangeset
for help on using the changeset viewer.