master/datagram.c
changeset 325 7833cf70c4f2
parent 293 14aeb79aa992
child 344 5d8281f1aa2a
equal deleted inserted replaced
324:9aa51cbdbfae 325:7833cf70c4f2
    50 #define EC_FUNC_HEADER \
    50 #define EC_FUNC_HEADER \
    51     if (unlikely(ec_datagram_prealloc(datagram, data_size))) \
    51     if (unlikely(ec_datagram_prealloc(datagram, data_size))) \
    52         return -1; \
    52         return -1; \
    53     datagram->index = 0; \
    53     datagram->index = 0; \
    54     datagram->working_counter = 0; \
    54     datagram->working_counter = 0; \
    55     datagram->state = EC_CMD_INIT;
    55     datagram->state = EC_DATAGRAM_INIT;
    56 
    56 
    57 #define EC_FUNC_FOOTER \
    57 #define EC_FUNC_FOOTER \
    58     datagram->data_size = data_size; \
    58     datagram->data_size = data_size; \
    59     memset(datagram->data, 0x00, data_size); \
    59     memset(datagram->data, 0x00, data_size); \
    60     return 0;
    60     return 0;
    67    Datagram constructor.
    67    Datagram constructor.
    68 */
    68 */
    69 
    69 
    70 void ec_datagram_init(ec_datagram_t *datagram /**< EtherCAT datagram */)
    70 void ec_datagram_init(ec_datagram_t *datagram /**< EtherCAT datagram */)
    71 {
    71 {
    72     datagram->type = EC_CMD_NONE;
    72     datagram->type = EC_DATAGRAM_NONE;
    73     datagram->address.logical = 0x00000000;
    73     datagram->address.logical = 0x00000000;
    74     datagram->data = NULL;
    74     datagram->data = NULL;
    75     datagram->mem_size = 0;
    75     datagram->mem_size = 0;
    76     datagram->data_size = 0;
    76     datagram->data_size = 0;
    77     datagram->index = 0x00;
    77     datagram->index = 0x00;
    78     datagram->working_counter = 0x00;
    78     datagram->working_counter = 0x00;
    79     datagram->state = EC_CMD_INIT;
    79     datagram->state = EC_DATAGRAM_INIT;
    80     datagram->t_sent = 0;
    80     datagram->t_sent = 0;
    81 }
    81 }
    82 
    82 
    83 /*****************************************************************************/
    83 /*****************************************************************************/
    84 
    84 
   140 {
   140 {
   141     if (unlikely(node_address == 0x0000))
   141     if (unlikely(node_address == 0x0000))
   142         EC_WARN("Using node address 0x0000!\n");
   142         EC_WARN("Using node address 0x0000!\n");
   143 
   143 
   144     EC_FUNC_HEADER;
   144     EC_FUNC_HEADER;
   145     datagram->type = EC_CMD_NPRD;
   145     datagram->type = EC_DATAGRAM_NPRD;
   146     datagram->address.physical.slave = node_address;
   146     datagram->address.physical.slave = node_address;
   147     datagram->address.physical.mem = offset;
   147     datagram->address.physical.mem = offset;
   148     EC_FUNC_FOOTER;
   148     EC_FUNC_FOOTER;
   149 }
   149 }
   150 
   150 
   168 {
   168 {
   169     if (unlikely(node_address == 0x0000))
   169     if (unlikely(node_address == 0x0000))
   170         EC_WARN("Using node address 0x0000!\n");
   170         EC_WARN("Using node address 0x0000!\n");
   171 
   171 
   172     EC_FUNC_HEADER;
   172     EC_FUNC_HEADER;
   173     datagram->type = EC_CMD_NPWR;
   173     datagram->type = EC_DATAGRAM_NPWR;
   174     datagram->address.physical.slave = node_address;
   174     datagram->address.physical.slave = node_address;
   175     datagram->address.physical.mem = offset;
   175     datagram->address.physical.mem = offset;
   176     EC_FUNC_FOOTER;
   176     EC_FUNC_FOOTER;
   177 }
   177 }
   178 
   178 
   193                      size_t data_size
   193                      size_t data_size
   194                      /**< number of bytes to read */
   194                      /**< number of bytes to read */
   195                      )
   195                      )
   196 {
   196 {
   197     EC_FUNC_HEADER;
   197     EC_FUNC_HEADER;
   198     datagram->type = EC_CMD_APRD;
   198     datagram->type = EC_DATAGRAM_APRD;
   199     datagram->address.physical.slave = (int16_t) ring_position * (-1);
   199     datagram->address.physical.slave = (int16_t) ring_position * (-1);
   200     datagram->address.physical.mem = offset;
   200     datagram->address.physical.mem = offset;
   201     EC_FUNC_FOOTER;
   201     EC_FUNC_FOOTER;
   202 }
   202 }
   203 
   203 
   218                      size_t data_size
   218                      size_t data_size
   219                      /**< number of bytes to write */
   219                      /**< number of bytes to write */
   220                      )
   220                      )
   221 {
   221 {
   222     EC_FUNC_HEADER;
   222     EC_FUNC_HEADER;
   223     datagram->type = EC_CMD_APWR;
   223     datagram->type = EC_DATAGRAM_APWR;
   224     datagram->address.physical.slave = (int16_t) ring_position * (-1);
   224     datagram->address.physical.slave = (int16_t) ring_position * (-1);
   225     datagram->address.physical.mem = offset;
   225     datagram->address.physical.mem = offset;
   226     EC_FUNC_FOOTER;
   226     EC_FUNC_FOOTER;
   227 }
   227 }
   228 
   228 
   241                     size_t data_size
   241                     size_t data_size
   242                     /**< number of bytes to read */
   242                     /**< number of bytes to read */
   243                     )
   243                     )
   244 {
   244 {
   245     EC_FUNC_HEADER;
   245     EC_FUNC_HEADER;
   246     datagram->type = EC_CMD_BRD;
   246     datagram->type = EC_DATAGRAM_BRD;
   247     datagram->address.physical.slave = 0x0000;
   247     datagram->address.physical.slave = 0x0000;
   248     datagram->address.physical.mem = offset;
   248     datagram->address.physical.mem = offset;
   249     EC_FUNC_FOOTER;
   249     EC_FUNC_FOOTER;
   250 }
   250 }
   251 
   251 
   264                     size_t data_size
   264                     size_t data_size
   265                     /**< number of bytes to write */
   265                     /**< number of bytes to write */
   266                     )
   266                     )
   267 {
   267 {
   268     EC_FUNC_HEADER;
   268     EC_FUNC_HEADER;
   269     datagram->type = EC_CMD_BWR;
   269     datagram->type = EC_DATAGRAM_BWR;
   270     datagram->address.physical.slave = 0x0000;
   270     datagram->address.physical.slave = 0x0000;
   271     datagram->address.physical.mem = offset;
   271     datagram->address.physical.mem = offset;
   272     EC_FUNC_FOOTER;
   272     EC_FUNC_FOOTER;
   273 }
   273 }
   274 
   274 
   287                     size_t data_size
   287                     size_t data_size
   288                     /**< number of bytes to read/write */
   288                     /**< number of bytes to read/write */
   289                     )
   289                     )
   290 {
   290 {
   291     EC_FUNC_HEADER;
   291     EC_FUNC_HEADER;
   292     datagram->type = EC_CMD_LRW;
   292     datagram->type = EC_DATAGRAM_LRW;
   293     datagram->address.logical = offset;
   293     datagram->address.logical = offset;
   294     EC_FUNC_FOOTER;
   294     EC_FUNC_FOOTER;
   295 }
   295 }
   296 
   296 
   297 /*****************************************************************************/
   297 /*****************************************************************************/