# HG changeset patch
# User dejoigny
# Date 1147792874 -7200
# Node ID 126e37bcca0ffd7e58337221378378ba942753f1
# Parent  8038ced64796e4a1c93e9329a23ef90b8b451765
ajout filtrage msgs

diff -r 8038ced64796 -r 126e37bcca0f drivers/hcs12/canOpenDriver.c
--- a/drivers/hcs12/canOpenDriver.c	Tue May 16 17:18:56 2006 +0200
+++ b/drivers/hcs12/canOpenDriver.c	Tue May 16 17:21:14 2006 +0200
@@ -28,11 +28,11 @@
 #include "../include/hcs12/asm-m68hc12/portsaccess.h"
 #include "../include/hcs12/asm-m68hc12/ports_def.h"
 #include "../include/hcs12/asm-m68hc12/ports.h"
+#include "../include/data.h"
 #include "../include/hcs12/applicfg.h"
 #include "../include/hcs12/candriver.h"
 #include "../include/hcs12/interrupt.h"
 #include "../include/hcs12/canOpenDriver.h"
-
 #include "../include/can.h"
 #include "../include/objdictdef.h"
 #include "../include/timer.h"
@@ -247,6 +247,22 @@
 }
 
 /***************************************************************************/
+char canChangeFilter(UNS16 adrCAN, canBusFilterInit fi)
+{
+  /* If not in init mode, go to sleep before going in init mode*/
+  if (! canTestInitMode(adrCAN)) {
+    canSleepMode(adrCAN);
+    canInitMode(adrCAN); 
+  }
+  //update the filters configuration
+  canInitFilter(adrCAN, fi);
+  canInitModeQ(adrCAN);
+  canSleepModeQ(adrCAN);
+  canSetInterrupt(adrCAN);
+  return 0;
+}
+
+/***************************************************************************/
 char canEnable(UNS16 adrCAN)
 {
   /* Register CANCTL1
@@ -287,8 +303,7 @@
   /* rxfrm is cleared, mupe also (should be before)*/
     IO_PORTS_8(adrCAN + CANCTL0) &= 0x53; /* Clr the bits that may be modified */
     IO_PORTS_8(adrCAN + CANCTL0) = (bi.cswai << 5) | (bi.time << 3);
-    IO_PORTS_8(adrCAN + CANRIER) = 0X01; /* Allow interruptions on receive */
-    IO_PORTS_8(adrCAN + CANTIER) = 0X00; /* disallow  interruptions on transmit */
+    canSetInterrupt(adrCAN);
     canInitModeQ(adrCAN); /* Leave the init mode */
     canSleepModeQ(adrCAN); /* Leave the sleep mode */    
   return 0;
@@ -427,6 +442,13 @@
 }
 
 /***************************************************************************/
+char canSetInterrupt(UNS16 adrCAN) 
+{
+  IO_PORTS_8(adrCAN + CANRIER) = 0X01; /* Allow interruptions on receive */
+  IO_PORTS_8(adrCAN + CANTIER) = 0X00; /* disallow  interruptions on transmit */
+  return 0;  
+}
+/***************************************************************************/
 char canSleepMode(UNS16 adrCAN)
 {
   IO_PORTS_8(adrCAN + CANCTL0) &= 0xFB;   /* clr the bit WUPE  to avoid a wake-up*/ 
@@ -562,7 +584,7 @@
   IO_PORTS_8(CAN0 + CANRFLG) |= 0x01;
   // Not very usefull
   IO_PORTS_8(CAN0 + CANCTL0) |= 0x80;
-  IO_PORTS_8(PORTB) |= 0x40; // led 6 port B : ON
+  IO_PORTS_8(PORTB) |= 0x40; // led 6 port B : OFF
   unlock();
 }
 
diff -r 8038ced64796 -r 126e37bcca0f include/hcs12/candriver.h
--- a/include/hcs12/candriver.h	Tue May 16 17:18:56 2006 +0200
+++ b/include/hcs12/candriver.h	Tue May 16 17:21:14 2006 +0200
@@ -168,6 +168,7 @@
 extern canBusInit bi;
 
 
+
 /*
 For the received messsage, add a Identificator to
 the list of ID to accept.
@@ -189,6 +190,12 @@
 		       );
 
 /*
+ Use this function to change the CAN message acceptance filters and masks.
+ */
+char canChangeFilter (UNS16 adrCAN, canBusFilterInit fi);
+
+
+/*
 Enable one of the 5 MSCAN.
 Must be done only one time after a reset of the CPU.
 To do before any CAN initialisation
@@ -286,6 +293,11 @@
 		     );
 
 /*
+ Set the interruptions. Must be call just after having left the init mode.
+ */	     
+char canSetInterrupt (UNS16 adrCAN);		     
+
+/*
 Put one of the 5 mscan in sleep mode
 Beware! If some messages are to be sent,
 or if it is receiving, going into sleep mode