trennfix/sw: Nice, keep! Good!
[eisenbahn.git] / trennfix / sw / mm / src / mm_switch.c
index ba68a8b92354319fba7eec165bfae9495de962bd..4be3e3652f2d34afc64a255384eeab691e74f7e0 100644 (file)
  * Check for stuff we need
  *
  */
-#if !defined(MM_TSTART_FAST) || !defined(MM_TSTART_SLOW) || !defined(MM_TSTOP) \
-       || !defined(MM_SENSE) || !defined(MM_TIMER_INT_VECT)
+#if !defined(MM_TSTART) || !defined(MM_SENSE) || !defined(MM_TIMER_INT_VECT)
 
-#error Missing timer start macro MM_TSTART_FAST!
+#error Missing needed MM_... macro!
 
 #endif
 
@@ -233,18 +232,17 @@ ISR(MM_TIMER_INT_VECT) {
        uint8_t address;
        uint8_t command;
 
-       MM_TSTART_FAST;
-
 #ifdef MM_FILTER_REPEATED
        static uint8_t address_last = 0xff;
        static uint8_t function_last = 0xff;
        static uint8_t command_last = 0xff;
 #endif
 
+       MM_TSTART;
+
        switch(recstate) {
-       
        case MM_FIRST_FAST_SAMPLE:
-               recstate = MM_FIRST_SLOW_SAMPLE      ;
+               recstate = MM_FIRST_SLOW_SAMPLE;
                break;
 
        case MM_FIRST_SLOW_SAMPLE:
@@ -277,6 +275,7 @@ ISR(MM_TIMER_INT_VECT) {
 
        case MM_SLOW_WAIT_FOR_CLOCK:
                if (mm_rec_tolerated_timeouts) {
+                       trigger();
                        mm_rec_tolerated_timeouts--;
                        recstate = MM_SLOW_WAIT_FOR_CLOCK_DELAY;
                        return;
@@ -295,6 +294,7 @@ ISR(MM_TIMER_INT_VECT) {
                shift_function_first = shift_function;
                shift_command_first  = shift_command;
                mm_rec_tolerated_timeouts = 18;
+               trigger();
        } 
 
        if (bitno == 36) {
@@ -368,7 +368,7 @@ void mm_pinchange_handler(void)
        if (!sense_last)
                return;
 
-       MM_TSTART_FAST;
+       MM_TSTART;
 
        switch(recstate) {
        case MM_IDLE:
@@ -394,6 +394,9 @@ void mm_pinchange_handler(void)
                mm_rec_tolerated_timeouts = 0;
                break;
 
+       case MM_SLOW_SAMPLE_DELAY:
+               recstate = MM_SLOW_SAMPLE;
+               break;
                /* Not expected */
        case MM_FIRST_FAST_SAMPLE:
        case MM_FAST_SAMPLE: