lib/slave_config.c
changeset 1352 275d2fdeab48
parent 1327 4d179b06dd3c
child 1363 11c0b2caa253
equal deleted inserted replaced
1351:cf8f08631c8e 1352:275d2fdeab48
    31 #include <errno.h>
    31 #include <errno.h>
    32 #include <string.h>
    32 #include <string.h>
    33 
    33 
    34 #include "slave_config.h"
    34 #include "slave_config.h"
    35 #include "domain.h"
    35 #include "domain.h"
       
    36 #include "sdo_request.h"
    36 #include "voe_handler.h"
    37 #include "voe_handler.h"
    37 #include "master.h"
    38 #include "master.h"
    38 #include "master/ioctl.h"
    39 #include "master/ioctl.h"
    39 
    40 
    40 /*****************************************************************************/
    41 /*****************************************************************************/
   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,