1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-27 02:05:31 +03:00

Merge remote-tracking branch 'multiwii/master' into hott-telemetry

Conflicts:
	src/drv_softserial.c
This commit is contained in:
Dominic Clifton 2014-04-07 20:22:07 +01:00
commit 171ab22fb7
2 changed files with 25 additions and 31 deletions

View file

@ -203,19 +203,17 @@ void updateBufferIndex(softSerial_t *softSerial)
/*********************************************/ /*********************************************/
void prepareToSendNextByte(softSerial_t *softSerial) void processTxState(softSerial_t *softSerial)
{ {
uint8_t mask;
if (!softSerial->isTransmittingData) {
char byteToSend; char byteToSend;
if ((softSerial->port.mode & MODE_TX) == 0) {
return;
}
if (isSoftSerialTransmitBufferEmpty((serialPort_t *)softSerial)) { if (isSoftSerialTransmitBufferEmpty((serialPort_t *)softSerial)) {
return; return;
} }
// choose data to send and update pointer to next byte // data to send
byteToSend = softSerial->port.txBuffer[softSerial->port.txBufferTail++]; byteToSend = softSerial->port.txBuffer[softSerial->port.txBufferTail++];
if (softSerial->port.txBufferTail >= softSerial->port.txBufferSize) { if (softSerial->port.txBufferTail >= softSerial->port.txBufferSize) {
softSerial->port.txBufferTail = 0; softSerial->port.txBufferTail = 0;
@ -225,28 +223,24 @@ void prepareToSendNextByte(softSerial_t *softSerial)
softSerial->internalTxBuffer = (1 << (TX_TOTAL_BITS - 1)) | (byteToSend << 1); softSerial->internalTxBuffer = (1 << (TX_TOTAL_BITS - 1)) | (byteToSend << 1);
softSerial->bitsLeftToTransmit = TX_TOTAL_BITS; softSerial->bitsLeftToTransmit = TX_TOTAL_BITS;
softSerial->isTransmittingData = true; softSerial->isTransmittingData = true;
return;
} }
void processTxState(softSerial_t *softSerial) if (softSerial->bitsLeftToTransmit) {
{
uint8_t mask;
if (softSerial->isTransmittingData) {
mask = softSerial->internalTxBuffer & 1; mask = softSerial->internalTxBuffer & 1;
softSerial->internalTxBuffer >>= 1; softSerial->internalTxBuffer >>= 1;
setTxSignal(softSerial, mask); setTxSignal(softSerial, mask);
softSerial->bitsLeftToTransmit--;
if (--softSerial->bitsLeftToTransmit <= 0) {
softSerial->isTransmittingData = false;
}
return; return;
} }
prepareToSendNextByte(softSerial); softSerial->isTransmittingData = false;
} }
enum { enum {
TRAILING, TRAILING,
LEADING LEADING

View file

@ -24,7 +24,7 @@ typedef struct softSerial_s {
uint8_t rxEdge; uint8_t rxEdge;
uint8_t isTransmittingData; uint8_t isTransmittingData;
uint8_t bitsLeftToTransmit; int8_t bitsLeftToTransmit;
uint16_t internalTxBuffer; // includes start and stop bits uint16_t internalTxBuffer; // includes start and stop bits
uint16_t internalRxBuffer; // includes start and stop bits uint16_t internalRxBuffer; // includes start and stop bits