mirror of
https://github.com/lowobservable/coax.git
synced 2026-03-06 19:42:01 +00:00
Make data bus setMode a little more efficient
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
@@ -23,7 +23,7 @@ NewCoaxTransmitter transmitter(dataBus, receiver);
|
||||
|
||||
void CoaxTransceiver::setup()
|
||||
{
|
||||
dataBus.setMode(INPUT);
|
||||
dataBus.setMode(INPUT, true);
|
||||
|
||||
receiver.begin();
|
||||
transmitter.begin();
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user