From e2deeeebd3f8ca882c1abd27846303a608c42054 Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Mon, 7 Apr 2014 18:12:42 +0100 Subject: [PATCH] Fixing software serial stop bits. Was broken since timer frequency calculation changes in c7de7d2ebc63ae02c598f19e7af3b9673feaae62. --- src/drv_softserial.c | 15 +++++++++------ src/drv_softserial.h | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/drv_softserial.c b/src/drv_softserial.c index 848cb7d1e..abc33768a 100644 --- a/src/drv_softserial.c +++ b/src/drv_softserial.c @@ -218,17 +218,20 @@ void processTxState(softSerial_t *softSerial) softSerial->internalTxBuffer = (1 << (TX_TOTAL_BITS - 1)) | (byteToSend << 1); softSerial->bitsLeftToTransmit = TX_TOTAL_BITS; softSerial->isTransmittingData = true; + return; } - mask = softSerial->internalTxBuffer & 1; - softSerial->internalTxBuffer >>= 1; + if (softSerial->bitsLeftToTransmit) { + mask = softSerial->internalTxBuffer & 1; + softSerial->internalTxBuffer >>= 1; - setTxSignal(softSerial, mask); - - if (--softSerial->bitsLeftToTransmit <= 0) { - softSerial->isTransmittingData = false; + setTxSignal(softSerial, mask); + softSerial->bitsLeftToTransmit--; + return; } + + softSerial->isTransmittingData = false; } enum { diff --git a/src/drv_softserial.h b/src/drv_softserial.h index 260568d51..0f18f9e0e 100644 --- a/src/drv_softserial.h +++ b/src/drv_softserial.h @@ -24,7 +24,7 @@ typedef struct softSerial_s { uint8_t rxEdge; uint8_t isTransmittingData; - uint8_t bitsLeftToTransmit; + int8_t bitsLeftToTransmit; uint16_t internalTxBuffer; // includes start and stop bits uint16_t internalRxBuffer; // includes start and stop bits