master/sdo_request.c
changeset 880 f6212c54a5e3
parent 869 6c2f4130ed46
child 881 c5ac0ab2d6cf
equal deleted inserted replaced
879:9b395c5646ab 880:f6212c54a5e3
    67 {
    67 {
    68     req->data = NULL;
    68     req->data = NULL;
    69     req->mem_size = 0;
    69     req->mem_size = 0;
    70     req->data_size = 0;
    70     req->data_size = 0;
    71     req->dir = EC_DIR_OUTPUT;
    71     req->dir = EC_DIR_OUTPUT;
       
    72     req->timeout = 0; // no timeout
    72     req->state = EC_REQUEST_INIT;
    73     req->state = EC_REQUEST_INIT;
    73 }
    74 }
    74 
    75 
    75 /*****************************************************************************/
    76 /*****************************************************************************/
    76 
    77 
   158     memcpy(req->data, source, size);
   159     memcpy(req->data, source, size);
   159     req->data_size = size;
   160     req->data_size = size;
   160     return 0;
   161     return 0;
   161 }
   162 }
   162 
   163 
       
   164 /*****************************************************************************/
       
   165 
       
   166 /** Checks, if the timeout was exceeded.
       
   167  *
       
   168  * \return non-zero if the timeout was exceeded, else zero.
       
   169  */
       
   170 int ec_sdo_request_timed_out(const ec_sdo_request_t *req /**< Sdo request. */)
       
   171 {
       
   172     return req->timeout
       
   173         && jiffies - req->start_jiffies > HZ * req->timeout / 1000;
       
   174 }
       
   175 
   163 /*****************************************************************************
   176 /*****************************************************************************
   164  * Realtime interface.
   177  * Realtime interface.
   165  ****************************************************************************/
   178  ****************************************************************************/
   166 
   179 
   167 void ecrt_sdo_request_timeout(ec_sdo_request_t *req, uint32_t timeout)
   180 void ecrt_sdo_request_timeout(ec_sdo_request_t *req, uint32_t timeout)
   168 {
   181 {
       
   182     req->timeout = timeout;
   169 }
   183 }
   170 
   184 
   171 /*****************************************************************************/
   185 /*****************************************************************************/
   172 
   186 
   173 uint8_t *ecrt_sdo_request_data(ec_sdo_request_t *req)
   187 uint8_t *ecrt_sdo_request_data(ec_sdo_request_t *req)
   193 
   207 
   194 void ecrt_sdo_request_read(ec_sdo_request_t *req)
   208 void ecrt_sdo_request_read(ec_sdo_request_t *req)
   195 {
   209 {
   196     req->dir = EC_DIR_INPUT;
   210     req->dir = EC_DIR_INPUT;
   197     req->state = EC_REQUEST_QUEUED;
   211     req->state = EC_REQUEST_QUEUED;
       
   212     req->start_jiffies = jiffies;
   198 }
   213 }
   199 
   214 
   200 /*****************************************************************************/
   215 /*****************************************************************************/
   201 
   216 
   202 void ecrt_sdo_request_write(ec_sdo_request_t *req)
   217 void ecrt_sdo_request_write(ec_sdo_request_t *req)
   203 {
   218 {
   204     req->dir = EC_DIR_OUTPUT;
   219     req->dir = EC_DIR_OUTPUT;
   205     req->state = EC_REQUEST_QUEUED;
   220     req->state = EC_REQUEST_QUEUED;
       
   221     req->start_jiffies = jiffies;
   206 }
   222 }
   207 
   223 
   208 /*****************************************************************************/
   224 /*****************************************************************************/
   209 
   225 
   210 /** \cond */
   226 /** \cond */