From 32bafc7adcbe54f68e120d14079526a89b1a8ca3 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 23 Oct 2019 11:20:18 +0200 Subject: [PATCH] Abstract away direct Serial access In preparation for making Serial access configurable on a per-board basis, introduce `KeyboardHardware.serialPort()`, which - for the time being - returns the Serial object. All users of Serial have been updated to use the new API. Signed-off-by: Gergely Nagy --- doc/plugin/CycleTimeReport.md | 2 +- doc/plugin/Leader.md | 6 ++--- doc/plugin/Syster.md | 6 ++--- .../Devices/Keyboardio/Model01/Model01.ino | 2 +- examples/Devices/OLKB/Planck/Planck.ino | 2 +- .../SOFTHRUF/Splitography/Splitography.ino | 2 +- .../CycleTimeReport/CycleTimeReport.ino | 2 +- .../EEPROM-Keymap-Programmer.ino | 2 +- .../EEPROM-Settings/EEPROM-Settings.ino | 10 ++++---- examples/Features/HostOS/HostOS.ino | 6 ++--- examples/Features/Steno/Steno.ino | 2 +- examples/Keystrokes/Leader/Leader.ino | 4 ++-- examples/Keystrokes/Syster/Syster.ino | 4 ++-- src/kaleidoscope/Hardware.h | 7 ++++++ src/kaleidoscope/Kaleidoscope.cpp | 2 +- src/kaleidoscope/plugin/FocusSerial.cpp | 22 ++++++++--------- src/kaleidoscope/plugin/FocusSerial.h | 24 +++++++++---------- src/kaleidoscope/plugin/GeminiPR.cpp | 2 +- src/kaleidoscope/plugin/Model01-TestMode.cpp | 4 ++-- 19 files changed, 59 insertions(+), 52 deletions(-) diff --git a/doc/plugin/CycleTimeReport.md b/doc/plugin/CycleTimeReport.md index ef594022..8578318f 100644 --- a/doc/plugin/CycleTimeReport.md +++ b/doc/plugin/CycleTimeReport.md @@ -17,7 +17,7 @@ the box, without any further configuration: KALEIDOSCOPE_INIT_PLUGINS(CycleTimeReport); void setup (void) { - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); Kaleidoscope.setup (); } ``` diff --git a/doc/plugin/Leader.md b/doc/plugin/Leader.md index 3feef1cd..d6335795 100644 --- a/doc/plugin/Leader.md +++ b/doc/plugin/Leader.md @@ -32,11 +32,11 @@ dictionary: #include static void leaderA(uint8_t seq_index) { - Serial.println("leaderA"); + KeyboardHardware.serialPort().println("leaderA"); } static void leaderTX(uint8_t seq_index) { - Serial.println("leaderTX"); + KeyboardHardware.serialPort().println("leaderTX"); } static const kaleidoscope::Leader::dictionary_t leader_dictionary[] PROGMEM = @@ -46,7 +46,7 @@ static const kaleidoscope::Leader::dictionary_t leader_dictionary[] PROGMEM = KALEIDOSCOPE_INIT_PLUGINS(Leader); void setup() { - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); Kaleidoscope.setup(); diff --git a/doc/plugin/Syster.md b/doc/plugin/Syster.md index e97afc64..52910d9b 100644 --- a/doc/plugin/Syster.md +++ b/doc/plugin/Syster.md @@ -34,8 +34,8 @@ void systerAction(kaleidoscope::plugin::Syster::action_t action, const char *sym kaleidoscope::hid::sendKeyboardReport (); break; case kaleidoscope::plugin::Syster::SymbolAction: - Serial.print ("systerAction: symbol="); - Serial.println (symbol); + KeyboardHardware.serialPort().print ("systerAction: symbol="); + KeyboardHardware.serialPort().println (symbol); if (strcmp (symbol, "coffee") == 0) { Unicode.type (0x2615); } @@ -46,7 +46,7 @@ void systerAction(kaleidoscope::plugin::Syster::action_t action, const char *sym KALEIDOSCOPE_INIT_PLUGINS(EEPROMSettings, HostOS, Unicode, Syster); void setup() { - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); Kaleidoscope.setup (); } ``` diff --git a/examples/Devices/Keyboardio/Model01/Model01.ino b/examples/Devices/Keyboardio/Model01/Model01.ino index 7787aca1..26d4d50b 100644 --- a/examples/Devices/Keyboardio/Model01/Model01.ino +++ b/examples/Devices/Keyboardio/Model01/Model01.ino @@ -86,7 +86,7 @@ static kaleidoscope::plugin::LEDSolidColor solidViolet(70, 0, 60); const macro_t *macroAction(uint8_t macroIndex, uint8_t keyState) { if (macroIndex == 1 && keyToggledOn(keyState)) { - Serial.print("Keyboard.IO keyboard driver v0.00"); + KeyboardHardware.serialPort().print("Keyboard.IO keyboard driver v0.00"); return MACRO(I(25), D(LeftShift), T(M), U(LeftShift), T(O), T(D), T(E), T(L), T(Spacebar), diff --git a/examples/Devices/OLKB/Planck/Planck.ino b/examples/Devices/OLKB/Planck/Planck.ino index c81b329c..8d936504 100644 --- a/examples/Devices/OLKB/Planck/Planck.ino +++ b/examples/Devices/OLKB/Planck/Planck.ino @@ -167,7 +167,7 @@ KALEIDOSCOPE_INIT_PLUGINS(Macros); void setup() { Kaleidoscope.setup(); - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); } void loop() { diff --git a/examples/Devices/SOFTHRUF/Splitography/Splitography.ino b/examples/Devices/SOFTHRUF/Splitography/Splitography.ino index 83ac4e44..005cadf1 100644 --- a/examples/Devices/SOFTHRUF/Splitography/Splitography.ino +++ b/examples/Devices/SOFTHRUF/Splitography/Splitography.ino @@ -50,7 +50,7 @@ KEYMAPS( KALEIDOSCOPE_INIT_PLUGINS(GeminiPR); void setup() { - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); Kaleidoscope.setup(); } diff --git a/examples/Features/CycleTimeReport/CycleTimeReport.ino b/examples/Features/CycleTimeReport/CycleTimeReport.ino index d8ccffec..99025e32 100644 --- a/examples/Features/CycleTimeReport/CycleTimeReport.ino +++ b/examples/Features/CycleTimeReport/CycleTimeReport.ino @@ -43,7 +43,7 @@ KEYMAPS( KALEIDOSCOPE_INIT_PLUGINS(CycleTimeReport); void setup() { - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); Kaleidoscope.setup(); } diff --git a/examples/Features/EEPROM/EEPROM-Keymap-Programmer/EEPROM-Keymap-Programmer.ino b/examples/Features/EEPROM/EEPROM-Keymap-Programmer/EEPROM-Keymap-Programmer.ino index fe47d2fe..83eb0524 100644 --- a/examples/Features/EEPROM/EEPROM-Keymap-Programmer/EEPROM-Keymap-Programmer.ino +++ b/examples/Features/EEPROM/EEPROM-Keymap-Programmer/EEPROM-Keymap-Programmer.ino @@ -56,7 +56,7 @@ KALEIDOSCOPE_INIT_PLUGINS(EEPROMSettings, Macros); void setup() { - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); Kaleidoscope.setup(); diff --git a/examples/Features/EEPROM/EEPROM-Settings/EEPROM-Settings.ino b/examples/Features/EEPROM/EEPROM-Settings/EEPROM-Settings.ino index 464c31d8..3f3f1fb5 100644 --- a/examples/Features/EEPROM/EEPROM-Settings/EEPROM-Settings.ino +++ b/examples/Features/EEPROM/EEPROM-Settings/EEPROM-Settings.ino @@ -42,16 +42,16 @@ KEYMAPS( KALEIDOSCOPE_INIT_PLUGINS(EEPROMSettings); void setup() { - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); Kaleidoscope.setup(); - while (!Serial) { + while (!KeyboardHardware.serialPort()) { } - Serial.println(EEPROMSettings.isValid() ? F("valid EEPROM settings") : F("invalid EEPROM settings")); - Serial.println(EEPROMSettings.crc(), HEX); - Serial.println(EEPROMSettings.version()); + KeyboardHardware.serialPort().println(EEPROMSettings.isValid() ? F("valid EEPROM settings") : F("invalid EEPROM settings")); + KeyboardHardware.serialPort().println(EEPROMSettings.crc(), HEX); + KeyboardHardware.serialPort().println(EEPROMSettings.version()); } void loop() { diff --git a/examples/Features/HostOS/HostOS.ino b/examples/Features/HostOS/HostOS.ino index eadc0b90..1e25fa6f 100644 --- a/examples/Features/HostOS/HostOS.ino +++ b/examples/Features/HostOS/HostOS.ino @@ -43,12 +43,12 @@ KEYMAPS( KALEIDOSCOPE_INIT_PLUGINS(EEPROMSettings, HostOS); void setup() { - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); Kaleidoscope.setup(); - Serial.print("Host OS id is: "); - Serial.println(HostOS.os(), DEC); + KeyboardHardware.serialPort().print("Host OS id is: "); + KeyboardHardware.serialPort().println(HostOS.os(), DEC); } void loop() { diff --git a/examples/Features/Steno/Steno.ino b/examples/Features/Steno/Steno.ino index 82c98ebf..da416c46 100644 --- a/examples/Features/Steno/Steno.ino +++ b/examples/Features/Steno/Steno.ino @@ -61,7 +61,7 @@ KEYMAPS( KALEIDOSCOPE_INIT_PLUGINS(GeminiPR); void setup() { - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); Kaleidoscope.setup(); } diff --git a/examples/Keystrokes/Leader/Leader.ino b/examples/Keystrokes/Leader/Leader.ino index 355237ab..a4ecbe3d 100644 --- a/examples/Keystrokes/Leader/Leader.ino +++ b/examples/Keystrokes/Leader/Leader.ino @@ -40,11 +40,11 @@ KEYMAPS( // *INDENT-ON* static void leaderTestA(uint8_t seq_index) { - Serial.println(F("leaderTestA")); + KeyboardHardware.serialPort().println(F("leaderTestA")); } static void leaderTestAA(uint8_t seq_index) { - Serial.println(F("leaderTestAA")); + KeyboardHardware.serialPort().println(F("leaderTestAA")); } static const kaleidoscope::plugin::Leader::dictionary_t leader_dictionary[] PROGMEM = diff --git a/examples/Keystrokes/Syster/Syster.ino b/examples/Keystrokes/Syster/Syster.ino index 00d5db62..35695d16 100644 --- a/examples/Keystrokes/Syster/Syster.ino +++ b/examples/Keystrokes/Syster/Syster.ino @@ -56,8 +56,8 @@ void systerAction(kaleidoscope::plugin::Syster::action_t action, const char *sym kaleidoscope::hid::sendKeyboardReport(); break; case kaleidoscope::plugin::Syster::SymbolAction: - Serial.print("systerAction: symbol="); - Serial.println(symbol); + KeyboardHardware.serialPort().print("systerAction: symbol="); + KeyboardHardware.serialPort().println(symbol); if (strcmp(symbol, "coffee") == 0) { Unicode.type(0x2615); } diff --git a/src/kaleidoscope/Hardware.h b/src/kaleidoscope/Hardware.h index 4c507234..21c9a148 100644 --- a/src/kaleidoscope/Hardware.h +++ b/src/kaleidoscope/Hardware.h @@ -394,6 +394,13 @@ class Hardware { return EEPROM; } + /** + * Method to return the serial port object used by the hardware. + */ + auto serialPort() -> decltype(Serial) & { + return Serial; + } + /** @} */ }; } diff --git a/src/kaleidoscope/Kaleidoscope.cpp b/src/kaleidoscope/Kaleidoscope.cpp index ed2929bc..7d980283 100644 --- a/src/kaleidoscope/Kaleidoscope.cpp +++ b/src/kaleidoscope/Kaleidoscope.cpp @@ -34,7 +34,7 @@ Kaleidoscope_::setup(void) { // // TODO(anyone): Figure out a way we can get rid of this, and fix the bug // properly. - Serial.begin(9600); + KeyboardHardware.serialPort().begin(9600); kaleidoscope::Hooks::onSetup(); diff --git a/src/kaleidoscope/plugin/FocusSerial.cpp b/src/kaleidoscope/plugin/FocusSerial.cpp index ec0fdce6..9b3efd66 100644 --- a/src/kaleidoscope/plugin/FocusSerial.cpp +++ b/src/kaleidoscope/plugin/FocusSerial.cpp @@ -27,20 +27,20 @@ namespace plugin { char FocusSerial::command_[32]; void FocusSerial::drain(void) { - if (Serial.available()) - while (Serial.peek() != '\n') - Serial.read(); + if (KeyboardHardware.serialPort().available()) + while (KeyboardHardware.serialPort().peek() != '\n') + KeyboardHardware.serialPort().read(); } EventHandlerResult FocusSerial::beforeReportingState() { - if (Serial.available() == 0) + if (KeyboardHardware.serialPort().available() == 0) return EventHandlerResult::OK; uint8_t i = 0; do { - command_[i++] = Serial.read(); + command_[i++] = KeyboardHardware.serialPort().read(); - if (Serial.peek() == '\n') + if (KeyboardHardware.serialPort().peek() == '\n') break; } while (command_[i - 1] != ' ' && i < 32); if (command_[i - 1] == ' ') @@ -50,12 +50,12 @@ EventHandlerResult FocusSerial::beforeReportingState() { Kaleidoscope.onFocusEvent(command_); - Serial.println(F("\r\n.")); + KeyboardHardware.serialPort().println(F("\r\n.")); drain(); - if (Serial.peek() == '\n') - Serial.read(); + if (KeyboardHardware.serialPort().peek() == '\n') + KeyboardHardware.serialPort().read(); return EventHandlerResult::OK; } @@ -65,7 +65,7 @@ bool FocusSerial::handleHelp(const char *command, if (strcmp_P(command, PSTR("help")) != 0) return false; - Serial.println((const __FlashStringHelper *)help_message); + KeyboardHardware.serialPort().println((const __FlashStringHelper *)help_message); return true; } @@ -75,7 +75,7 @@ EventHandlerResult FocusSerial::onFocusEvent(const char *command) { } void FocusSerial::printBool(bool b) { - Serial.print((b) ? F("true") : F("false")); + KeyboardHardware.serialPort().print((b) ? F("true") : F("false")); } } diff --git a/src/kaleidoscope/plugin/FocusSerial.h b/src/kaleidoscope/plugin/FocusSerial.h index 86a9621d..1aeb6ef9 100644 --- a/src/kaleidoscope/plugin/FocusSerial.h +++ b/src/kaleidoscope/plugin/FocusSerial.h @@ -37,12 +37,12 @@ class FocusSerial : public kaleidoscope::Plugin { } void send(const bool b) { printBool(b); - Serial.print(SEPARATOR); + KeyboardHardware.serialPort().print(SEPARATOR); } template void send(V v) { - Serial.print(v); - Serial.print(SEPARATOR); + KeyboardHardware.serialPort().print(v); + KeyboardHardware.serialPort().print(SEPARATOR); } template void send(Var v, const Vars&... vars) { @@ -53,31 +53,31 @@ class FocusSerial : public kaleidoscope::Plugin { void sendRaw() {} template void sendRaw(Var v, const Vars&... vars) { - Serial.print(v); + KeyboardHardware.serialPort().print(v); sendRaw(vars...); } const char peek() { - return Serial.peek(); + return KeyboardHardware.serialPort().peek(); } void read(Key &key) { - key.raw = Serial.parseInt(); + key.raw = KeyboardHardware.serialPort().parseInt(); } void read(cRGB &color) { - color.r = Serial.parseInt(); - color.g = Serial.parseInt(); - color.b = Serial.parseInt(); + color.r = KeyboardHardware.serialPort().parseInt(); + color.g = KeyboardHardware.serialPort().parseInt(); + color.b = KeyboardHardware.serialPort().parseInt(); } void read(uint8_t &u8) { - u8 = Serial.parseInt(); + u8 = KeyboardHardware.serialPort().parseInt(); } void read(uint16_t &u16) { - u16 = Serial.parseInt(); + u16 = KeyboardHardware.serialPort().parseInt(); } bool isEOL() { - return Serial.peek() == '\n'; + return KeyboardHardware.serialPort().peek() == '\n'; } static constexpr char COMMENT = '#'; diff --git a/src/kaleidoscope/plugin/GeminiPR.cpp b/src/kaleidoscope/plugin/GeminiPR.cpp index 659684ca..637db5b6 100644 --- a/src/kaleidoscope/plugin/GeminiPR.cpp +++ b/src/kaleidoscope/plugin/GeminiPR.cpp @@ -39,7 +39,7 @@ EventHandlerResult GeminiPR::onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr, if (keys_held_ == 0) { state_[0] |= 0x80; - Serial.write(state_, sizeof(state_)); + KeyboardHardware.serialPort().write(state_, sizeof(state_)); memset(state_, 0, sizeof(state_)); } } diff --git a/src/kaleidoscope/plugin/Model01-TestMode.cpp b/src/kaleidoscope/plugin/Model01-TestMode.cpp index 467f0fbc..46dc1387 100644 --- a/src/kaleidoscope/plugin/Model01-TestMode.cpp +++ b/src/kaleidoscope/plugin/Model01-TestMode.cpp @@ -159,13 +159,13 @@ void TestMode::toggle_programming_leds_on() { } void TestMode::run_tests() { - // Serial.println("Running tests"); + // KeyboardHardware.serialPort().println("Running tests"); toggle_programming_leds_on(); // Disable debouncing KeyboardHardware.setKeyscanInterval(2); test_leds(); testMatrix(); - // Serial.println("Done running tests"); + // KeyboardHardware.serialPort().println("Done running tests"); } }