]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/virtual.c
CPC-PCI second chip IRQ corrected. Message timestamp code added.
[lincan.git] / lincan / src / virtual.c
index 80ce0fbd5f07df20f61c442eaf63e97e545bfd48..b7e5f37a55c091628bff07d0d74139636ae1284f 100644 (file)
@@ -3,7 +3,7 @@
  * Written for new CAN driver version by Pavel Pisa - OCERA team member
  * email:pisa@cmp.felk.cvut.cz
  * This software is released under the GPL-License.
- * Version lincan-0.2  9 Jul 2003
+ * Version lincan-0.3  17 Jun 2004
  */ 
 
 #include "../include/can.h"
@@ -302,7 +302,7 @@ void virtual_schedule_next(struct msgobj_t *obj)
                if(cmd>=0) {
                        mod_timer(&obj->tx_timeout,
                                jiffies+virtual_bus_latency(obj));
-                       CANMSG("virtual: scheduled delivery\n");
+                       DEBUGMSG("virtual: scheduled delivery\n");
 
                } else          
                        can_msgobj_clear_fl(obj,TX_LOCK);
@@ -320,12 +320,15 @@ void virtual_do_tx_timeout(unsigned long data)
        struct msgobj_t *obj=(struct msgobj_t *)data;
        
        if(obj->tx_slot) {
+               /* fill CAN message timestamp */
+               can_filltimestamp(&obj->tx_slot->msg.timestamp);
+
                /* Deliver message to edges */
                canque_filter_msg2edges(obj->qends, &obj->tx_slot->msg);
                /* Free transmitted slot */
                canque_free_outslot(obj->qends, obj->tx_qedge, obj->tx_slot);
                obj->tx_slot=NULL;
-               CANMSG("virtual: delayed delivery\n");
+               DEBUGMSG("virtual: delayed delivery\n");
        }
        can_msgobj_clear_fl(obj,TX_LOCK);
 
@@ -337,6 +340,9 @@ void virtual_do_tx_timeout(unsigned long data)
  * @chip: pointer to chip state structure
  * @obj: pointer to message object structure
  *
+ * Function is responsible for initiating message transmition.
+ * It is responsible for clearing of object TX_REQUEST flag
+ *
  * Return Value: negative value reports error.
  * File: src/virtual.c
  */
@@ -348,14 +354,19 @@ int virtual_wakeup_tx(struct chip_t *chip, struct msgobj_t *obj)
        struct canque_slot_t *slot;
        int cmd;
 
+       can_msgobj_clear_fl(obj,TX_REQUEST);
+
     #ifndef CAN_WITH_RTL
        if(!virtual_bus_latency(obj)) {
     #endif /*CAN_WITH_RTL*/
                /* Ensure delivery of all ready slots */
                while((cmd=canque_test_outslot(obj->qends, &qedge, &slot)) >= 0){
                        if(cmd==0) {
+                               /* fill CAN message timestamp */
+                               can_filltimestamp(&slot->msg.timestamp);
+                               
                                canque_filter_msg2edges(obj->qends, &slot->msg);
-                               CANMSG("virtual: direct delivery\n");
+                               DEBUGMSG("virtual: direct delivery\n");
                        }
                        canque_free_outslot(obj->qends, qedge, slot);
                }