diff --git a/src/arduino_lmic_hal_boards.h b/src/arduino_lmic_hal_boards.h index 0cb98384..cce0acab 100644 --- a/src/arduino_lmic_hal_boards.h +++ b/src/arduino_lmic_hal_boards.h @@ -36,6 +36,10 @@ const HalPinmap_t *GetPinmap_Catena4618(); const HalPinmap_t *GetPinmap_Catena4630(); const HalPinmap_t *GetPinmap_Catena4801(); const HalPinmap_t *GetPinmap_Catena4802(); +const HalPinmap_t *GetPinmap_Catena4916(); +const HalPinmap_t *GetPinmap_Catena4917(); +const HalPinmap_t *GetPinmap_Catena4931(); +const HalPinmap_t *GetPinmap_Catena4933(); const HalPinmap_t* GetPinmap_ttgo_lora32_v1(); const HalPinmap_t *GetPinmap_ttgo_lora32_v21(); const HalPinmap_t* GetPinmap_heltec_lora32(); diff --git a/src/hal/getpinmap_catena4916.cpp b/src/hal/getpinmap_catena4916.cpp new file mode 100644 index 00000000..7b0fbea7 --- /dev/null +++ b/src/hal/getpinmap_catena4916.cpp @@ -0,0 +1,101 @@ +/* + +Module: getconfig_catena4916.cpp + +Function: + Arduino-LMIC C++ HAL pinmaps for various boards + +Copyright & License: + See accompanying LICENSE file. + +Author: + Dhinesh Kumar Pitchai, MCCI November 2022 + +*/ + +#if defined(ARDUINO_MCCI_MODEL_4916) + +#include +#include + +#include "../lmic/oslmic.h" + +namespace Arduino_LMIC { + +class HalConfiguration_Catena4916_t : public HalConfiguration_t + { +public: + enum DIGITAL_PINS : uint8_t + { + PIN_SX1276_NSS = D7, + PIN_SX1276_NRESET = D8, + PIN_SX1276_DIO0 = D25, + PIN_SX1276_DIO1 = D26, + PIN_SX1276_DIO2 = D27, + PIN_SX1276_ANT_SWITCH_RX = D29, + PIN_SX1276_ANT_SWITCH_TX_BOOST = D30, + PIN_SX1276_ANT_SWITCH_TX_RFO = D31, + PIN_VDD_BOOST_ENABLE = A0, + PIN_TCXO_VDD = D33, + }; + + static constexpr ostime_t TCXO_DELAY_MS = 5; + + virtual void begin(void) override + { + digitalWrite(PIN_TCXO_VDD, 0); + pinMode(PIN_TCXO_VDD, OUTPUT); + } + + virtual void end(void) override + { + digitalWrite(PIN_TCXO_VDD, 0); + pinMode(PIN_TCXO_VDD, INPUT); + } + + virtual bool queryUsingTcxo(void) override { return true; }; + + virtual ostime_t setModuleActive(bool state) override + { + ostime_t result; + const int oldState = digitalRead(PIN_TCXO_VDD); + + // if turning on, we need to delay. + result = 0; + if (state && ! oldState) + result = ms2osticksCeil(TCXO_DELAY_MS); + + if (state != oldState) + digitalWrite(PIN_TCXO_VDD, state); + + return result; + } + }; + +// save some typing by bringing the pin numbers into scope +static HalConfiguration_Catena4916_t myConfig; + +static const HalPinmap_t myPinmap = + { + .nss = HalConfiguration_Catena4916_t::PIN_SX1276_NSS, // chip select is D7 + .rxtx = HalConfiguration_Catena4916_t::PIN_SX1276_ANT_SWITCH_RX, // RXTX is D29 + .rst = HalConfiguration_Catena4916_t::PIN_SX1276_NRESET, // NRESET is D8 + + .dio = {HalConfiguration_Catena4916_t::PIN_SX1276_DIO0, // DIO0 (IRQ) is D25 + HalConfiguration_Catena4916_t::PIN_SX1276_DIO1, // DIO1 is D26 + HalConfiguration_Catena4916_t::PIN_SX1276_DIO2, // DIO2 is D27 + }, + .rxtx_rx_active = 1, + .rssi_cal = 10, + .spi_freq = 8000000, /* 8MHz */ + .pConfig = &myConfig + }; + +const HalPinmap_t *GetPinmap_Catena4916(void) + { + return &myPinmap; + } + +}; // namespace Arduino_LMIC + +#endif /* defined(ARDUINO_MCCI_MODEL_4916)*/ \ No newline at end of file diff --git a/src/hal/getpinmap_catena4917.cpp b/src/hal/getpinmap_catena4917.cpp new file mode 100644 index 00000000..ee818461 --- /dev/null +++ b/src/hal/getpinmap_catena4917.cpp @@ -0,0 +1,101 @@ +/* + +Module: getconfig_catena4917.cpp + +Function: + Arduino-LMIC C++ HAL pinmaps for various boards + +Copyright & License: + See accompanying LICENSE file. + +Author: + Dhinesh Kumar Pitchai, MCCI November 2022 + +*/ + +#if defined(ARDUINO_MCCI_MODEL_4917) + +#include +#include + +#include "../lmic/oslmic.h" + +namespace Arduino_LMIC { + +class HalConfiguration_Catena4917_t : public HalConfiguration_t + { +public: + enum DIGITAL_PINS : uint8_t + { + PIN_SX1276_NSS = D7, + PIN_SX1276_NRESET = D8, + PIN_SX1276_DIO0 = D25, + PIN_SX1276_DIO1 = D26, + PIN_SX1276_DIO2 = D27, + PIN_SX1276_ANT_SWITCH_RX = D29, + PIN_SX1276_ANT_SWITCH_TX_BOOST = D30, + PIN_SX1276_ANT_SWITCH_TX_RFO = D31, + PIN_VDD_BOOST_ENABLE = A0, + PIN_TCXO_VDD = D33, + }; + + static constexpr ostime_t TCXO_DELAY_MS = 5; + + virtual void begin(void) override + { + digitalWrite(PIN_TCXO_VDD, 0); + pinMode(PIN_TCXO_VDD, OUTPUT); + } + + virtual void end(void) override + { + digitalWrite(PIN_TCXO_VDD, 0); + pinMode(PIN_TCXO_VDD, INPUT); + } + + virtual bool queryUsingTcxo(void) override { return true; }; + + virtual ostime_t setModuleActive(bool state) override + { + ostime_t result; + const int oldState = digitalRead(PIN_TCXO_VDD); + + // if turning on, we need to delay. + result = 0; + if (state && ! oldState) + result = ms2osticksCeil(TCXO_DELAY_MS); + + if (state != oldState) + digitalWrite(PIN_TCXO_VDD, state); + + return result; + } + }; + +// save some typing by bringing the pin numbers into scope +static HalConfiguration_Catena4917_t myConfig; + +static const HalPinmap_t myPinmap = + { + .nss = HalConfiguration_Catena4917_t::PIN_SX1276_NSS, // chip select is D7 + .rxtx = HalConfiguration_Catena4917_t::PIN_SX1276_ANT_SWITCH_RX, // RXTX is D29 + .rst = HalConfiguration_Catena4917_t::PIN_SX1276_NRESET, // NRESET is D8 + + .dio = {HalConfiguration_Catena4917_t::PIN_SX1276_DIO0, // DIO0 (IRQ) is D25 + HalConfiguration_Catena4917_t::PIN_SX1276_DIO1, // DIO1 is D26 + HalConfiguration_Catena4917_t::PIN_SX1276_DIO2, // DIO2 is D27 + }, + .rxtx_rx_active = 1, + .rssi_cal = 10, + .spi_freq = 8000000, /* 8MHz */ + .pConfig = &myConfig + }; + +const HalPinmap_t *GetPinmap_Catena4917(void) + { + return &myPinmap; + } + +}; // namespace Arduino_LMIC + +#endif /* defined(ARDUINO_MCCI_MODEL_4917)*/ \ No newline at end of file diff --git a/src/hal/getpinmap_catena4931.cpp b/src/hal/getpinmap_catena4931.cpp new file mode 100644 index 00000000..407050b7 --- /dev/null +++ b/src/hal/getpinmap_catena4931.cpp @@ -0,0 +1,101 @@ +/* + +Module: getpinmap_catena4931.cpp + +Function: + Arduino-LMIC C++ HAL pinmaps for various boards + +Copyright & License: + See accompanying LICENSE file. + +Author: + Pranau R, MCCI November 2023 + +*/ + +#if defined(ARDUINO_MCCI_MODEL_4931) + +#include +#include + +#include "../lmic/oslmic.h" + +namespace Arduino_LMIC { + +class HalConfiguration_Catena4931_t : public HalConfiguration_t + { +public: + enum DIGITAL_PINS : uint8_t + { + PIN_SX1276_NSS = D7, + PIN_SX1276_NRESET = D8, + PIN_SX1276_DIO0 = D25, + PIN_SX1276_DIO1 = D26, + PIN_SX1276_DIO2 = D27, + PIN_SX1276_ANT_SWITCH_RX = D29, + PIN_SX1276_ANT_SWITCH_TX_BOOST = D30, + PIN_SX1276_ANT_SWITCH_TX_RFO = D31, + PIN_VDD_BOOST_ENABLE = D12, + PIN_TCXO_VDD = D33, + }; + + static constexpr ostime_t TCXO_DELAY_MS = 5; + + virtual void begin(void) override + { + digitalWrite(PIN_TCXO_VDD, 0); + pinMode(PIN_TCXO_VDD, OUTPUT); + } + + virtual void end(void) override + { + digitalWrite(PIN_TCXO_VDD, 0); + pinMode(PIN_TCXO_VDD, INPUT); + } + + virtual bool queryUsingTcxo(void) override { return true; }; + + virtual ostime_t setModuleActive(bool state) override + { + ostime_t result; + const int oldState = digitalRead(PIN_TCXO_VDD); + + // if turning on, we need to delay. + result = 0; + if (state && ! oldState) + result = ms2osticksCeil(TCXO_DELAY_MS); + + if (state != oldState) + digitalWrite(PIN_TCXO_VDD, state); + + return result; + } + }; + +// save some typing by bringing the pin numbers into scope +static HalConfiguration_Catena4931_t myConfig; + +static const HalPinmap_t myPinmap = + { + .nss = HalConfiguration_Catena4931_t::PIN_SX1276_NSS, // chip select is D7 + .rxtx = HalConfiguration_Catena4931_t::PIN_SX1276_ANT_SWITCH_RX, // RXTX is D29 + .rst = HalConfiguration_Catena4931_t::PIN_SX1276_NRESET, // NRESET is D8 + + .dio = {HalConfiguration_Catena4931_t::PIN_SX1276_DIO0, // DIO0 (IRQ) is D25 + HalConfiguration_Catena4931_t::PIN_SX1276_DIO1, // DIO1 is D26 + HalConfiguration_Catena4931_t::PIN_SX1276_DIO2, // DIO2 is D27 + }, + .rxtx_rx_active = 1, + .rssi_cal = 10, + .spi_freq = 8000000, /* 8MHz */ + .pConfig = &myConfig + }; + +const HalPinmap_t *GetPinmap_Catena4931(void) + { + return &myPinmap; + } + +}; // namespace Arduino_LMIC + +#endif /* defined(ARDUINO_MCCI_MODEL_4931)*/ \ No newline at end of file diff --git a/src/hal/getpinmap_catena4933.cpp b/src/hal/getpinmap_catena4933.cpp new file mode 100644 index 00000000..19a7eb1a --- /dev/null +++ b/src/hal/getpinmap_catena4933.cpp @@ -0,0 +1,101 @@ +/* + +Module: getpinmap_catena4933.cpp + +Function: + Arduino-LMIC C++ HAL pinmaps for various boards + +Copyright & License: + See accompanying LICENSE file. + +Author: + Pranau R, MCCI October 2023 + +*/ + +#if defined(ARDUINO_MCCI_MODEL_4933) + +#include +#include + +#include "../lmic/oslmic.h" + +namespace Arduino_LMIC { + +class HalConfiguration_Catena4933_t : public HalConfiguration_t + { +public: + enum DIGITAL_PINS : uint8_t + { + PIN_SX1276_NSS = D7, + PIN_SX1276_NRESET = D8, + PIN_SX1276_DIO0 = D25, + PIN_SX1276_DIO1 = D26, + PIN_SX1276_DIO2 = D27, + PIN_SX1276_ANT_SWITCH_RX = D29, + PIN_SX1276_ANT_SWITCH_TX_BOOST = D30, + PIN_SX1276_ANT_SWITCH_TX_RFO = D31, + PIN_VDD_BOOST_ENABLE = D12, + PIN_TCXO_VDD = D33, + }; + + static constexpr ostime_t TCXO_DELAY_MS = 5; + + virtual void begin(void) override + { + digitalWrite(PIN_TCXO_VDD, 0); + pinMode(PIN_TCXO_VDD, OUTPUT); + } + + virtual void end(void) override + { + digitalWrite(PIN_TCXO_VDD, 0); + pinMode(PIN_TCXO_VDD, INPUT); + } + + virtual bool queryUsingTcxo(void) override { return true; }; + + virtual ostime_t setModuleActive(bool state) override + { + ostime_t result; + const int oldState = digitalRead(PIN_TCXO_VDD); + + // if turning on, we need to delay. + result = 0; + if (state && ! oldState) + result = ms2osticksCeil(TCXO_DELAY_MS); + + if (state != oldState) + digitalWrite(PIN_TCXO_VDD, state); + + return result; + } + }; + +// save some typing by bringing the pin numbers into scope +static HalConfiguration_Catena4933_t myConfig; + +static const HalPinmap_t myPinmap = + { + .nss = HalConfiguration_Catena4933_t::PIN_SX1276_NSS, // chip select is D7 + .rxtx = HalConfiguration_Catena4933_t::PIN_SX1276_ANT_SWITCH_RX, // RXTX is D29 + .rst = HalConfiguration_Catena4933_t::PIN_SX1276_NRESET, // NRESET is D8 + + .dio = {HalConfiguration_Catena4933_t::PIN_SX1276_DIO0, // DIO0 (IRQ) is D25 + HalConfiguration_Catena4933_t::PIN_SX1276_DIO1, // DIO1 is D26 + HalConfiguration_Catena4933_t::PIN_SX1276_DIO2, // DIO2 is D27 + }, + .rxtx_rx_active = 1, + .rssi_cal = 10, + .spi_freq = 8000000, /* 8MHz */ + .pConfig = &myConfig + }; + +const HalPinmap_t *GetPinmap_Catena4933(void) + { + return &myPinmap; + } + +}; // namespace Arduino_LMIC + +#endif /* defined(ARDUINO_MCCI_MODEL_4933)*/ \ No newline at end of file diff --git a/src/hal/getpinmap_thisboard.cpp b/src/hal/getpinmap_thisboard.cpp index 19b9a553..d004401a 100644 --- a/src/hal/getpinmap_thisboard.cpp +++ b/src/hal/getpinmap_thisboard.cpp @@ -57,6 +57,16 @@ const HalPinmap_t *GetPinmap_ThisBoard(void) return GetPinmap_Catena4801(); #elif defined(ARDUINO_MCCI_CATENA_4802) return GetPinmap_Catena4802(); +#elif defined(ARDUINO_MCCI_MODEL_4916) || \ + /* legacy names */ \ + defined(ARDUINO_MODEL_4916) + return GetPinmap_Catena4916(); +#elif defined(ARDUINO_MCCI_MODEL_4917) + return GetPinmap_Catena4917(); +#elif defined(ARDUINO_MCCI_MODEL_4931) + return GetPinmap_Catena4931(); +#elif defined(ARDUINO_MCCI_MODEL_4933) + return GetPinmap_Catena4933(); #elif defined(ARDUINO_DISCO_L072CZ_LRWAN1) return GetPinmap_Disco_L072cz_Lrwan1(); #elif defined(PINNOCHIO_SCOUT)