master/fsm_master.c
changeset 1079 ef1266652c4d
parent 1064 5f27403587a8
child 1174 235f34ca50e2
--- a/master/fsm_master.c	Wed Jul 02 09:22:55 2008 +0000
+++ b/master/fsm_master.c	Wed Jul 02 11:26:51 2008 +0000
@@ -296,17 +296,14 @@
 
     // search the first request to be processed
     while (1) {
-        down(&master->sii_sem);
-        if (list_empty(&master->sii_requests)) {
-            up(&master->sii_sem);
+        if (list_empty(&master->sii_requests))
             break;
-        }
+
         // get first request
         request = list_entry(master->sii_requests.next,
                 ec_sii_write_request_t, list);
         list_del_init(&request->list); // dequeue
         request->state = EC_REQUEST_BUSY;
-        up(&master->sii_sem);
 
         // found pending SII write operation. execute it!
         if (master->debug_level)
@@ -379,17 +376,14 @@
     
     // search the first external request to be processed
     while (1) {
-        down(&master->sdo_sem);
-        if (list_empty(&master->slave_sdo_requests)) {
-            up(&master->sdo_sem);
+        if (list_empty(&master->slave_sdo_requests))
             break;
-        }
+
         // get first request
         request = list_entry(master->slave_sdo_requests.next,
                 ec_master_sdo_request_t, list);
         list_del_init(&request->list); // dequeue
         request->req.state = EC_REQUEST_BUSY;
-        up(&master->sdo_sem);
 
         slave = request->slave;
         if (slave->current_state == EC_SLAVE_STATE_INIT) {
@@ -778,11 +772,16 @@
     if (master->debug_level)
         EC_DBG("Finished writing %u words of SII data to slave %u.\n",
                 request->nwords, slave->ring_position);
+
+    if (request->offset <= 4 && request->offset + request->nwords > 4) {
+        // alias was written
+        slave->sii.alias = EC_READ_U16(request->words + 4);
+    }
+    // TODO: Evaluate other SII contents!
+    
     request->state = EC_REQUEST_SUCCESS;
     wake_up(&master->sii_queue);
 
-    // TODO: Evaluate new SII contents!
-
     // check for another SII write request
     if (ec_fsm_master_action_process_sii(fsm))
         return; // processing another request