295 /*****************************************************************************/ |
296 /*****************************************************************************/ |
296 |
297 |
297 ec_sdo_request_t *ecrt_slave_config_create_sdo_request(ec_slave_config_t *sc, |
298 ec_sdo_request_t *ecrt_slave_config_create_sdo_request(ec_slave_config_t *sc, |
298 uint16_t index, uint8_t subindex, size_t size) |
299 uint16_t index, uint8_t subindex, size_t size) |
299 { |
300 { |
300 return 0; // TODO |
301 ec_ioctl_sdo_request_t data; |
|
302 ec_sdo_request_t *req; |
|
303 |
|
304 req = malloc(sizeof(ec_sdo_request_t)); |
|
305 if (!req) { |
|
306 fprintf(stderr, "Failed to allocate memory.\n"); |
|
307 return 0; |
|
308 } |
|
309 |
|
310 if (size) { |
|
311 req->data = malloc(size); |
|
312 if (!req->data) { |
|
313 fprintf(stderr, "Failed to allocate %u bytes of SDO data" |
|
314 " memory.\n", size); |
|
315 free(req); |
|
316 return 0; |
|
317 } |
|
318 } else { |
|
319 req->data = NULL; |
|
320 } |
|
321 |
|
322 data.config_index = sc->index; |
|
323 data.sdo_index = index; |
|
324 data.sdo_subindex = subindex; |
|
325 data.size = size; |
|
326 |
|
327 if (ioctl(sc->master->fd, EC_IOCTL_SC_SDO_REQUEST, &data) == -1) { |
|
328 fprintf(stderr, "Failed to create SDO request: %s\n", |
|
329 strerror(errno)); |
|
330 if (req->data) |
|
331 free(req->data); |
|
332 free(req); |
|
333 return NULL; |
|
334 } |
|
335 |
|
336 req->config = sc; |
|
337 req->index = data.request_index; |
|
338 req->sdo_index = data.sdo_index; |
|
339 req->sdo_subindex = data.sdo_subindex; |
|
340 req->data_size = size; |
|
341 req->mem_size = size; |
|
342 return req; |
301 } |
343 } |
302 |
344 |
303 /*****************************************************************************/ |
345 /*****************************************************************************/ |
304 |
346 |
305 ec_voe_handler_t *ecrt_slave_config_create_voe_handler(ec_slave_config_t *sc, |
347 ec_voe_handler_t *ecrt_slave_config_create_voe_handler(ec_slave_config_t *sc, |