master/canopen.c
changeset 649 a4d3fffdaed7
parent 646 fbbd4e54e031
child 657 7756b9f2eac2
equal deleted inserted replaced
648:0a6d38ec463f 649:a4d3fffdaed7
   349     list_add_tail(&request.list, &master->sdo_requests);
   349     list_add_tail(&request.list, &master->sdo_requests);
   350     up(&master->sdo_sem);
   350     up(&master->sdo_sem);
   351 
   351 
   352     // wait for processing through FSM
   352     // wait for processing through FSM
   353     if (wait_event_interruptible(master->sdo_queue,
   353     if (wait_event_interruptible(master->sdo_queue,
   354                 request.state != EC_REQ_QUEUED)) {
   354                 request.state != EC_REQUEST_QUEUED)) {
   355         // interrupted by signal
   355         // interrupted by signal
   356         down(&master->sdo_sem);
   356         down(&master->sdo_sem);
   357         if (request.state == EC_REQ_QUEUED) {
   357         if (request.state == EC_REQUEST_QUEUED) {
   358             list_del(&request.list);
   358             list_del(&request.list);
   359             up(&master->sdo_sem);
   359             up(&master->sdo_sem);
   360             return -EINTR;
   360             return -EINTR;
   361         }
   361         }
   362         // request already processing: interrupt not possible.
   362         // request already processing: interrupt not possible.
   363         up(&master->sdo_sem);
   363         up(&master->sdo_sem);
   364     }
   364     }
   365 
   365 
   366     // wait until master FSM has finished processing
   366     // wait until master FSM has finished processing
   367     wait_event(master->sdo_queue, request.state != EC_REQ_BUSY);
   367     wait_event(master->sdo_queue, request.state != EC_REQUEST_IN_PROGRESS);
   368 
   368 
   369     if (request.state != EC_REQ_COMPLETED)
   369     if (request.state != EC_REQUEST_COMPLETE)
   370         return -EIO;
   370         return -EIO;
   371 
   371 
   372     off += ec_sdo_entry_format_data(entry, &request, buffer);
   372     off += ec_sdo_entry_format_data(entry, &request, buffer);
   373 
   373 
   374     ec_sdo_request_clear(&request);
   374     ec_sdo_request_clear(&request);
   407 {
   407 {
   408     req->sdo = sdo;
   408     req->sdo = sdo;
   409     req->entry = entry;
   409     req->entry = entry;
   410     req->data = NULL;
   410     req->data = NULL;
   411     req->size = 0;
   411     req->size = 0;
   412     req->state = EC_REQ_QUEUED;
   412     req->state = EC_REQUEST_QUEUED;
   413 }
   413 }
   414 
   414 
   415 /*****************************************************************************/
   415 /*****************************************************************************/
   416 
   416 
   417 /**
   417 /**