Make data bus setMode a little more efficient

This commit is contained in:
Andrew Kay
2020-07-20 07:40:44 -05:00
parent 768b919ec7
commit 194b54d773
3 changed files with 14 additions and 6 deletions

View File

@@ -70,11 +70,13 @@ private:
class NewCoaxDataBus
{
public:
void setMode(int mode);
void setMode(uint8_t mode, bool force);
uint16_t read();
void write(uint16_t word);
private:
int _mode = -1;
uint16_t encode(uint16_t word);
uint16_t decode(uint16_t word);
};

View File

@@ -23,7 +23,7 @@ NewCoaxTransmitter transmitter(dataBus, receiver);
void CoaxTransceiver::setup()
{
dataBus.setMode(INPUT);
dataBus.setMode(INPUT, true);
receiver.begin();
transmitter.begin();

View File

@@ -78,7 +78,7 @@ int NewCoaxTransmitter::transmit(uint16_t *buffer, size_t bufferCount)
_receiver.disable();
_dataBus.setMode(OUTPUT);
_dataBus.setMode(OUTPUT, true);
for (int index = 0; index < bufferCount; index++) {
while (digitalRead(TX_FULL_PIN)) {
@@ -91,7 +91,7 @@ int NewCoaxTransmitter::transmit(uint16_t *buffer, size_t bufferCount)
delayMicroseconds(2);
}
_dataBus.setMode(INPUT);
_dataBus.setMode(INPUT, true);
while (digitalRead(TX_ACTIVE_PIN)) {
// NOP
@@ -137,7 +137,7 @@ void NewCoaxReceiver::begin()
void NewCoaxReceiver::enable()
{
_dataBus.setMode(INPUT);
_dataBus.setMode(INPUT, false);
_state = Idle;
@@ -271,11 +271,17 @@ inline uint16_t NewCoaxReceiver::read()
return word;
}
void NewCoaxDataBus::setMode(int mode)
void NewCoaxDataBus::setMode(uint8_t mode, bool force)
{
if (mode == _mode && !force) {
return;
}
for (int pin = DATA_BUS_START_PIN; pin <= DATA_BUS_END_PIN; pin++) {
pinMode(pin, mode);
}
_mode = mode;
}
inline uint16_t NewCoaxDataBus::read()