Manchester
Diff: Manchester.cpp
- Revision:
- 6:7454ad91f714
- Parent:
- 5:3b2c7e9fda3f
- Child:
- 7:afd0ee36dcd1
--- a/Manchester.cpp Sun May 21 19:17:28 2017 +0000 +++ b/Manchester.cpp Mon May 22 09:35:26 2017 +0000 @@ -3,7 +3,7 @@ * @file Manchester.cpp * @author Zoltan Hudak * @version - * @date 16-May-2017 + * @date 2017-May-16 * @brief Manchester code for mbed ****************************************************************************** * @attention @@ -28,10 +28,10 @@ /* This library implements Manchester code according to both IEEE 802.3 - and G.E. Thomas' convention. + and G.E. Thomas' conventions. • A '0' is expressed by a high-to-low transition, a '1' by low-to-high transition in the IEEE 802.3 convention. The reverse is true in the G.E. Thomas' convention. - • The transitions which signify 0 or 1 occur at the midpoint of a period. + • The transitions which signify '0' or '1' occur at the midpoint of a period. • Transitions at the start of a period are overhead and don't signify data. • Least significant bit is sent first • There is one synchronization pulse at the begin of transmission @@ -55,10 +55,10 @@ */ Manchester::Manchester ( - PinName txPin, - PinName rxPin, - uint32_t speed, /* = 1200 bps */ - uint8_t tol /* = (+/-)25% */ + PinName txPin, + PinName rxPin, + uint32_t speed, /* = 1200 bps */ + uint8_t tol /* = (+/-)25% */ ) : _tx(txPin), _rx(rxPin) { @@ -83,19 +83,18 @@ * @retval */ void Manchester::transmit(ManchesterMsg& msg) { - bool txComplete; + bool txFinished; _data = msg.data; _len = msg.len; _state = SYNCH_START; _txTicker.attach_us(callback(this, &Manchester::transmission), _midBitTime); - do - { + do { core_util_critical_section_enter(); - txComplete = (_state == IDLE); + txFinished = (_state == IDLE); core_util_critical_section_exit(); - } while(!txComplete); + } while(!txFinished); _txTicker.detach(); } @@ -206,7 +205,6 @@ */ bool Manchester::receive(ManchesterMsg& msg) { bool rxFinished; - uint32_t now = us_ticker_read(); _data = msg.data; _maxLen = msg.maxLen(); @@ -216,8 +214,7 @@ _rx.enable_irq(); core_util_critical_section_exit(); - do - { + do { core_util_critical_section_enter(); rxFinished = ((_state == IDLE) || (_state == ERROR)); core_util_critical_section_exit(); @@ -337,3 +334,4 @@ _state = ERROR; // Incomplete transmission } +