Manchester

Revision:
9:7a23184aa9ef
Parent:
8:c1b5893191fe
--- a/Manchester.cpp	Sun Oct 14 09:38:33 2018 +0000
+++ b/Manchester.cpp	Thu Apr 11 07:52:23 2019 +0000
@@ -40,7 +40,10 @@
    the line "#define G_E_THOMAS 1" in the Manchester.h header file.
  */
 #include "Manchester.h"
-#include "ManchesterMsg.h"
+#include "mbed-trace/mbed_trace.h"
+
+#undef TRACE_GROUP
+#define TRACE_GROUP  "Manchester"
 
 /**
  * @brief   Creates a Manchester object
@@ -70,16 +73,12 @@
     _rx.disable_irq();
     _rx.rise(callback(this, &Manchester::reception));
     _rx.fall(callback(this, &Manchester::reception));
-    _preamble = 8;                                          // number of synch_start patterns
-    _error = "no error";
-    //    printf("_midBitTime    = %d\r\n", _midBitTime);
-    //    printf("_minPulseWidth = %d\r\n", _minPulseWidth);
-    //    printf("_maxPulseWidth = %d\r\n", _maxPulseWidth);
-#ifdef G_E_THOMAS
-    _tx = 1;
-#else
+    _preamble = 1;                                          // number of synch_start patterns
+
+    tr_debug("_midBitTime    = %d", _midBitTime);
+    tr_debug("_minPulseWidth = %d", _minPulseWidth);
+    tr_debug("_maxPulseWidth = %d", _maxPulseWidth);
     _tx = 0;
-#endif
 }
 
 /**
@@ -88,12 +87,12 @@
  * @param   msg Message to transmit
  * @retval
  */
-void Manchester::transmit(ManchesterMsg& msg)
+void Manchester::transmit(uint8_t* msg, uint8_t len)
 {
     bool    txFinished;
 
-    _data = msg.data;
-    _len = msg.len;
+    _data = (char*)msg;
+    _len = len;
     _state = SYNCH_START;
     _txTicker.attach_us(callback(this, &Manchester::transmission), _midBitTime);
 
@@ -133,48 +132,32 @@
                 break;
             }
 
-    #ifdef G_E_THOMAS
-            _tx = 0;                    // pull line low to start synch pulse
-    #else
             _tx = 1;                    // bring line high to start synch pulse
-    #endif
+            
             counter = 0;
             _state = SYNCH_NEXT;
             break;
 
         case SYNCH_NEXT:
             counter++;
-            if ((counter % 4) == 0)
-                _tx = !_tx;
-            if (counter < (_preamble * 8))
-                break;
-            else
-            {
-                byteIndex = 0;
-                encodeByte = _data[byteIndex];
-                bitIndex = 0;
-                _state = SETUP;
-                break;
-            }
+            _tx = !_tx;
+            byteIndex = 0;
+            encodeByte = _data[byteIndex];
+            bitIndex = 0;
+            _state = SETUP;
+            break;
 
         case SETUP:
-    #ifdef G_E_THOMAS
-            _tx = encodeByte & 0x01;    // setup for next bit to transmit
-    #else
-            _tx = !(encodeByte & 0x01); // setup for next bit to transmit
-    #endif
+            _tx = ((encodeByte >> 7) & 0x01); // setup for next bit to transmit
             _state = TRANSITION;
             break;
 
         case TRANSITION:
-    #ifdef G_E_THOMAS
-            _tx = !(encodeByte & 0x01); // set line appropriately for transition
-    #else
-            _tx = encodeByte & 0x01;    // set line appropriately for transition
-    #endif
+            _tx = !((encodeByte >> 7) & 0x01);    // set line appropriately for transition
+            
             if (++bitIndex < 8)
             {
-                encodeByte = (encodeByte >> 1);
+                encodeByte = (encodeByte << 1);
                 _state = SETUP;
             }
             else
@@ -195,34 +178,14 @@
 
         case STOP:
             counter++;
-            if (counter == 1)
-            {
-    #ifdef G_E_THOMAS
-                _tx = 1;
-    #else
-                _tx = 0;
-    #endif
-            }
-            else
-            if (counter == 5)
-            {
-    #ifdef G_E_THOMAS
-                _tx = 0;
-    #else
-                _tx = 1;
-    #endif
-            }
-            else
-            if (counter == 8)
+            _tx = 0;
+
+            if (counter == 4)
                 _state = COMPLETE;
             break;
 
         case COMPLETE:
-    #ifdef G_E_THOMAS
-            _tx = 1;
-    #else
             _tx = 0;
-    #endif
             _state = IDLE;
             break;
 
@@ -253,12 +216,12 @@
  * @retval  true  On success
  *          false Otherwise
  */
-bool Manchester::receive(ManchesterMsg& msg)
+bool Manchester::receive(uint8_t *msg, uint8_t *len)
 {
     bool    rxFinished;
 
-    _data = msg.data;
-    _maxLen = msg.maxLen();
+    _data = (char*)msg;
+    _maxLen = *len;
     _state = LISTEN;
     _timeout.attach(callback(this, &Manchester::onRxTimeout), _rxTimeout);
     _rx.enable_irq();
@@ -275,13 +238,13 @@
 
     if (_state == ERROR)
     {
-        msg.len = 0;
+        len = 0;
         _state = IDLE;
         return false;
     }
     else
     {
-        msg.len = _len;
+        *len = _len;
         return true;
     }
 }
@@ -304,19 +267,13 @@
     {
         case LISTEN:
             begin = now;
-            if (
-    #ifdef G_E_THOMAS
-            _rx == 0
-    #else
-            _rx == 1
-    #endif
-            )
+            if (_rx == 1)
             {
                 _state = SYNCH_START;
             }
             else
             {
-                _error = "SYNCH_START: Isn't a SYNCH pulse";
+                tr_err("SYNCH_START: Isn't a SYNCH pulse");
                 _state = ERROR;
             }
             break;
@@ -331,7 +288,7 @@
             }
             else
             {
-                _error = "SYNCH_START: Isn't a SYNCH pulse";
+                tr_err("SYNCH_START: Isn't a SYNCH pulse");
                 _state = ERROR;
             }
             break;
@@ -351,11 +308,7 @@
                 decodeByte = 0;
                 bitIndex = 0;
                 _len = 0;
-    #ifdef G_E_THOMAS
-                decodeByte |= (((_rx == 0) & 0x01) << bitIndex++);
-    #else
                 decodeByte |= (((_rx == 1) & 0x01) << bitIndex++);
-    #endif
                 _state = DECODE;
             }
             break;
@@ -365,11 +318,7 @@
             if ((_minPulseWidth <= pulseWidth) && (pulseWidth <= _maxPulseWidth))
             {
                 begin = now;
-    #ifdef G_E_THOMAS
-                decodeByte |= (((_rx == 0) & 0x01) << bitIndex++);
-    #else
                 decodeByte |= (((_rx == 1) & 0x01) << bitIndex++);
-    #endif
                 if (bitIndex > 7)
                 {
                     _data[_len++] = decodeByte;
@@ -386,13 +335,7 @@
 
             if (pulseWidth > _maxPulseWidth)
             {
-                if (
-    #ifdef G_E_THOMAS
-                _rx == 0
-    #else
-                _rx == 1
-    #endif
-                )
+                if (_rx == 1)
                 {
                     begin = now;
                     _state = COMPLETE;  // End of reception
@@ -404,13 +347,7 @@
             pulseWidth = now - begin;
             if (pulseWidth > _maxPulseWidth)
             {
-                if (
-    #ifdef G_E_THOMAS
-                _rx == 1
-    #else
-                _rx == 0
-    #endif
-                )
+                if (_rx == 0)
                 {
                     _state = IDLE;  // End of reception
                 }
@@ -437,18 +374,14 @@
 {
     _timeout.detach();
 
-#ifdef G_E_THOMAS
-    if ((_state == DECODE) && (_rx == 1))
-#else
-        if ((_state == DECODE) && (_rx == 0))
-#endif
-        {
-            _error = "rx timeout";
-            _state = IDLE;  // Reception successful
-        }
-        else
-        {
-            _error = "reception error";
-            _state = ERROR; // Reception incomplete
-        }
+    if ((_state == DECODE) && (_rx == 0))
+    {
+        tr_err("rx timeout");
+        _state = IDLE;  // Reception successful
+    }
+    else
+    {
+        tr_err("reception error");
+        _state = ERROR; // Reception incomplete
+    }
 }