From 2bdec154ad4145c30bcabe370aff3ac6e069da8b Mon Sep 17 00:00:00 2001 From: jgromes Date: Wed, 27 Oct 2021 21:15:46 +0200 Subject: [PATCH] Added CubeCell support --- src/BuildOpt.h | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/ISerial.cpp | 7 ++++--- src/ISerial.h | 2 ++ src/Module.cpp | 4 ++++ 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/BuildOpt.h b/src/BuildOpt.h index 8122f727..245cd157 100644 --- a/src/BuildOpt.h +++ b/src/BuildOpt.h @@ -19,7 +19,8 @@ * RADIOLIB_NC - alias for unused pin, usually the largest possible value of RADIOLIB_PIN_TYPE. * RADIOLIB_DEFAULT_SPI - default SPIClass instance to use. * RADIOLIB_PROGMEM - macro to place variable into program storage (usually Flash). - * RADIOLIB_PROGMEM_READ_BYTE - function/macro to read variables saved in program storage (usually Flash). + * RADIOLIB_PROGMEM_READ_BYTE - function/macro to read variables saved in program storage (usually Flash). + * RADIOLIB_TYPE_ALIAS - construct to create an alias for a type, usually vai the `using` keyword. * RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED - defined if the specific platform does not support SoftwareSerial. * RADIOLIB_HARDWARE_SERIAL_PORT - which hardware serial port should be used on platform that do not have SoftwareSerial support. * RADIOLIB_TONE_UNSUPPORTED - some platforms do not have tone()/noTone(), which is required for AFSK. @@ -48,6 +49,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; // the following must be defined if the Arduino core does not support SoftwareSerial library //#define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED @@ -102,6 +104,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #elif defined(ESP8266) // ESP8266 boards @@ -115,6 +118,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; // RadioLib has ESP8266 driver, this must be disabled to use ESP8266 as platform #define RADIOLIB_EXCLUDE_ESP8266 @@ -132,6 +136,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 @@ -151,6 +156,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 @@ -169,6 +175,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 @@ -187,6 +194,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 @@ -202,6 +210,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 #define RADIOLIB_TONE_UNSUPPORTED @@ -218,6 +227,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #elif defined(ARDUINO_ARC32_TOOLS) // Intel Curie @@ -244,6 +254,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo3 boards @@ -257,6 +268,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 @@ -278,6 +290,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 @@ -296,6 +309,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 @@ -314,6 +328,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 @@ -329,6 +344,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #elif defined(ARDUINO_ARCH_RP2040) // Raspberry Pi Pico @@ -342,10 +358,36 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED #define RADIOLIB_HARDWARE_SERIAL_PORT Serial1 #define RADIOLIB_EXCLUDE_ESP8266 + #elif defined(__ASR6501__) + // CubeCell + #define RADIOLIB_PLATFORM "CubeCell" + #define RADIOLIB_PIN_TYPE uint8_t + #define RADIOLIB_PIN_MODE PINMODE + #define RADIOLIB_PIN_STATUS uint8_t + #define RADIOLIB_INTERRUPT_STATUS IrqModes + #define RADIOLIB_DIGITAL_PIN_TO_INTERRUPT(p) digitalPinToInterrupt(p) + #define RADIOLIB_NC (0xFF) + #define RADIOLIB_DEFAULT_SPI SPI + #define RADIOLIB_PROGMEM PROGMEM + #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + + // CubeCell doesn't seem to define nullptr, let's do something like that now + #define nullptr NULL + + // ... and also defines pinMode() as a macro, which is by far the stupidest thing I have seen on Arduino + #undef pinMode + + // ... and uses an outdated GCC which does not support type aliases + #define RADIOLIB_TYPE_ALIAS(type, alias) typedef class type alias; + + // ... and it also has no tone(). This platform was designed by an idiot. + #define RADIOLIB_TONE_UNSUPPORTED + #else // other platforms not covered by the above list - this may or may not work #define RADIOLIB_PLATFORM "Unknown" @@ -359,6 +401,7 @@ #define RADIOLIB_DEFAULT_SPI SPI #define RADIOLIB_PROGMEM PROGMEM #define RADIOLIB_PROGMEM_READ_BYTE(addr) pgm_read_byte(addr) + #define RADIOLIB_TYPE_ALIAS(type, alias) using alias = type; #endif #endif diff --git a/src/ISerial.cpp b/src/ISerial.cpp index 7822e5c2..786ed00e 100644 --- a/src/ISerial.cpp +++ b/src/ISerial.cpp @@ -8,10 +8,11 @@ void ISerial::begin(long speed) { _mod->ModuleSerial->begin(speed); } +#if !defined(__ASR6501__) void ISerial::end() { _mod->ModuleSerial->end(); } - +#endif int ISerial::peek() { return(_mod->ModuleSerial->peek()); @@ -33,7 +34,7 @@ void ISerial::flush() { _mod->ModuleSerial->flush(); } -#ifndef ARDUINO_ARCH_MEGAAVR +#if !defined(ARDUINO_ARCH_MEGAAVR) size_t ISerial::print(const __FlashStringHelper *ifsh) { return(_mod->ModuleSerial->print(ifsh)); } @@ -79,7 +80,7 @@ size_t ISerial::print(const Printable& x) { return(_mod->ModuleSerial->print(x)); } -#ifndef ARDUINO_ARCH_MEGAAVR +#if !defined(ARDUINO_ARCH_MEGAAVR) size_t ISerial::println(const __FlashStringHelper *ifsh) { return(_mod->ModuleSerial->println(ifsh)); } diff --git a/src/ISerial.h b/src/ISerial.h index 908c4ee7..52d05bf5 100644 --- a/src/ISerial.h +++ b/src/ISerial.h @@ -13,7 +13,9 @@ class ISerial { explicit ISerial(Module* mod); void begin(long); + #if !defined(__ASR6501__) void end(); + #endif int peek(); size_t write(uint8_t); int read(); diff --git a/src/Module.cpp b/src/Module.cpp index 0d0dde53..121a17a2 100644 --- a/src/Module.cpp +++ b/src/Module.cpp @@ -139,9 +139,11 @@ void Module::term(uint8_t interface) { _spi->end(); } + #if !defined(__ASR6501__) if(((interface == RADIOLIB_USE_UART) && ModuleSerial != nullptr)) { ModuleSerial->end(); } + #endif } void Module::ATemptyBuffer() { @@ -374,7 +376,9 @@ void Module::detachInterrupt(RADIOLIB_PIN_TYPE interruptNum) { } void Module::yield() { + #if !defined(__ASR6501__) ::yield(); + #endif } void Module::delay(uint32_t ms) {