diff --git a/src/Wippersnapper.cpp b/src/Wippersnapper.cpp index 728fedc7f..51eb2e073 100644 --- a/src/Wippersnapper.cpp +++ b/src/Wippersnapper.cpp @@ -100,45 +100,9 @@ void Wippersnapper::provision() { // Board specific initializations #ifdef ARDUINO_ARDUINO_NESSO_N1 - Wire.begin(SDA, SCL, 100000); - - // verify chip id 0x49 at 0x0Ah - Wire.beginTransmission(0x49); - Wire.write(0x0A); - Wire.endTransmission(); - Wire.requestFrom(0x49, 1); - uint8_t chipId = Wire.read(); - if (chipId != 0x49) { - WS_DEBUG_PRINTLN("ERROR: AW32001E not found on I2C bus!"); - Wire.endTransmission(); - Wire.end(); - } else { - WS_DEBUG_PRINTLN("AW32001E detected on I2C bus."); - // Disable AW32001E watchdog timer, read 05h, & 0x1F, write back - Wire.beginTransmission(0x49); - Wire.write(0x05); - Wire.endTransmission(); - Wire.requestFrom(0x49, 1); - uint8_t regVal = Wire.read(); - Wire.endTransmission(); - WS_DEBUG_PRINTLN("AW32001E WDT reg before disable: " + String(regVal, BIN)); - delay(10); - regVal &= - 0b00011111; // Clear bits 5:6 to disable Watchdog timer, 7 for discharge - Wire.beginTransmission(0x49); - Wire.write(0x05); - Wire.write(regVal); - Wire.endTransmission(); - Wire.end(); - delay(10); - - battery.enableCharge(); - } - - // // digitalWrite(LORA_ENABLE, FALSE); - // // digitalWrite(LORA_LNA_ENABLE, FALSE); - // // digitalWrite(GROVE_POWER_EN, TRUE); - // delay(10); + battery.begin(); + delay(10); + battery.enableCharge(); #endif // Initialize the status LED for signaling FS errors @@ -1703,7 +1667,7 @@ void cbDisplayMessage(char *data, uint16_t len) { /****************************************************************************/ bool Wippersnapper::encodePinEvent( wippersnapper_signal_v1_CreateSignalRequest *outgoingSignalMsg, - uint8_t pinName, int pinVal) { + uint16_t pinName, int pinVal) { bool is_success = true; outgoingSignalMsg->which_payload = wippersnapper_signal_v1_CreateSignalRequest_pin_event_tag; diff --git a/src/Wippersnapper.h b/src/Wippersnapper.h index f06a91a8a..56ee8c2f3 100644 --- a/src/Wippersnapper.h +++ b/src/Wippersnapper.h @@ -243,6 +243,28 @@ class DisplayController; #ifdef ARDUINO_ARDUINO_NESSO_N1 static NessoBattery battery; ///< Nesso-N1 Battery instance + +/**************************************************************************/ +/*! + @brief Printable subclass of ExpanderPin for use with Serial.println() + Allows ExpanderPin to be used interchangeably with uint8_t pins + when printing to Serial. +*/ +/**************************************************************************/ +class WsExpanderPin : public ExpanderPin, public Printable { +public: + WsExpanderPin(uint16_t _pin) : ExpanderPin(_pin) {} + WsExpanderPin(ExpanderPin ep) + : ExpanderPin(ep.pin | (ep.address == 0x44 ? 0x100 : 0x200)) {} + + size_t printTo(Print &p) const override { + size_t n = p.print("0x"); + n += p.print(address, HEX); + n += p.print("_"); + n += p.print(pin); + return n; + } +}; #endif /**************************************************************************/ @@ -322,7 +344,7 @@ class Wippersnapper { // Encodes a pin event message bool encodePinEvent(wippersnapper_signal_v1_CreateSignalRequest *outgoingSignalMsg, - uint8_t pinName, int pinVal); + uint16_t pinName, int pinVal); // Pin configure message bool configureDigitalPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg); diff --git a/src/Wippersnapper_Boards.h b/src/Wippersnapper_Boards.h index b63051cfe..6e115719e 100644 --- a/src/Wippersnapper_Boards.h +++ b/src/Wippersnapper_Boards.h @@ -170,7 +170,7 @@ #define BOARD_ID "arduino-nesso-n1" #define USE_LITTLEFS #define USE_STATUS_LED -#define STATUS_LED_PIN LED_BUILTIN +#define STATUS_LED_PIN LED_BUILTIN // can be +512/+256 as expander (0x43/44) #define STATUS_LED_INVERTED #elif defined(ARDUINO_ADAFRUIT_FEATHER_ESP32C6) #define BOARD_ID "feather-esp32c6" diff --git a/src/components/digitalIO/Wippersnapper_DigitalGPIO.cpp b/src/components/digitalIO/Wippersnapper_DigitalGPIO.cpp index bbe33b286..00c4d43fe 100644 --- a/src/components/digitalIO/Wippersnapper_DigitalGPIO.cpp +++ b/src/components/digitalIO/Wippersnapper_DigitalGPIO.cpp @@ -60,8 +60,13 @@ Wippersnapper_DigitalGPIO::~Wippersnapper_DigitalGPIO() { /*******************************************************************************************************************************/ void Wippersnapper_DigitalGPIO::initDigitalPin( wippersnapper_pin_v1_ConfigurePinRequest_Direction direction, - uint8_t pinName, float period, + uint16_t pinName, float period, wippersnapper_pin_v1_ConfigurePinRequest_Pull pull) { +#if defined(ARDUINO_ARDUINO_NESSO_N1) + WsExpanderPin flexPinName = (ExpanderPin)pinName; +#else + uint8_t flexPinName = (uint8_t)pinName; +#endif if (direction == wippersnapper_pin_v1_ConfigurePinRequest_Direction_DIRECTION_OUTPUT) { @@ -70,14 +75,14 @@ void Wippersnapper_DigitalGPIO::initDigitalPin( // if (String("D") + pinName == STATUS_LED_PIN.pin) // #else // deinit status led, use it as a dio component instead - if (pinName == STATUS_LED_PIN) + if (flexPinName == STATUS_LED_PIN) releaseStatusLED(); #endif #endif - pinMode(pinName, OUTPUT); + pinMode(flexPinName, OUTPUT); WS_DEBUG_PRINT("Configured digital output pin on D"); - WS_DEBUG_PRINTLN(pinName); + WS_DEBUG_PRINTLN(flexPinName); // Initialize LOW #if defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH) // not until we support @@ -91,20 +96,20 @@ void Wippersnapper_DigitalGPIO::initDigitalPin( digitalWrite(pinName, LOW); } #else - pinMode(pinName, OUTPUT); - digitalWrite(pinName, LOW); // initialize LOW + pinMode(flexPinName, OUTPUT); + digitalWrite(flexPinName, LOW); // initialize LOW #endif } else if ( direction == wippersnapper_pin_v1_ConfigurePinRequest_Direction_DIRECTION_INPUT) { WS_DEBUG_PRINT("Configuring digital input pin on D"); - WS_DEBUG_PRINT(pinName); + WS_DEBUG_PRINT(flexPinName); if (pull == wippersnapper_pin_v1_ConfigurePinRequest_Pull_PULL_UP) { WS_DEBUG_PRINTLN("with internal pull-up enabled"); - pinMode(pinName, INPUT_PULLUP); + pinMode(flexPinName, INPUT_PULLUP); } else { - pinMode(pinName, INPUT); + pinMode(flexPinName, INPUT); WS_DEBUG_PRINT("\n"); } @@ -142,7 +147,7 @@ void Wippersnapper_DigitalGPIO::initDigitalPin( /********************************************************************************************************************************/ void Wippersnapper_DigitalGPIO::deinitDigitalPin( wippersnapper_pin_v1_ConfigurePinRequest_Direction direction, - uint8_t pinName) { + uint16_t pinName) { WS_DEBUG_PRINT("Deinitializing digital pin "); WS_DEBUG_PRINTLN(pinName); @@ -182,24 +187,17 @@ void Wippersnapper_DigitalGPIO::deinitDigitalPin( */ /********************************************************************/ int Wippersnapper_DigitalGPIO::digitalReadSvc(int pinName) { - // Service using arduino `digitalRead` - int pinVal = digitalRead(pinName); - return pinVal; -} - #if defined(ARDUINO_ARDUINO_NESSO_N1) -/********************************************************************/ -/*! - @brief High-level digitalRead service impl. which performs a - digitalRead. - @param pin - The ExpanderPin instance - @returns The pin's value. -*/ -/********************************************************************/ -int Wippersnapper_DigitalGPIO::digitalReadSvc(ExpanderPin pin) { + // probably this should be >255 instead for future use. + if ((pinName & 0x100) || (pinName & 0x200)) { + WsExpanderPin flexPinName = (ExpanderPin)pinName; + // Service using expander `digitalRead` + int pinVal = digitalRead(flexPinName); + return pinVal; + } +#endif // Service using arduino `digitalRead` - int pinVal = digitalRead(pin); + int pinVal = digitalRead(pinName); return pinVal; } @@ -212,25 +210,8 @@ int Wippersnapper_DigitalGPIO::digitalReadSvc(ExpanderPin pin) { The pin's value. */ /*******************************************************************************/ -void Wippersnapper_DigitalGPIO::digitalWriteSvc(ExpanderPin pin, int pinValue) { - WS_DEBUG_PRINT("Digital Pin Event: Set "); - WS_DEBUG_PRINT(pin.pin); - WS_DEBUG_PRINT(" to "); - WS_DEBUG_PRINTLN(pinValue); - digitalWrite(pin, pinValue); -} -#endif - -/*******************************************************************************/ -/*! - @brief Writes a value to a pin. - @param pinName - The pin's name. - @param pinValue - The pin's value. -*/ -/*******************************************************************************/ -void Wippersnapper_DigitalGPIO::digitalWriteSvc(uint8_t pinName, int pinValue) { +void Wippersnapper_DigitalGPIO::digitalWriteSvc(uint16_t pinName, + int pinValue) { WS_DEBUG_PRINT("Digital Pin Event: Set "); WS_DEBUG_PRINT(pinName); WS_DEBUG_PRINT(" to "); @@ -244,6 +225,13 @@ void Wippersnapper_DigitalGPIO::digitalWriteSvc(uint8_t pinName, int pinValue) { digitalWrite(pinName, !pinValue); else digitalWrite(pinName, pinValue); +#elif defined(ARDUINO_ARDUINO_NESSO_N1) + if ((pinName & 0x100) || (pinName & 0x200)) { + WsExpanderPin flexPinName = (ExpanderPin)pinName; + digitalWrite(flexPinName, pinValue); + } else { + digitalWrite(pinName, pinValue); + } #else digitalWrite(pinName, pinValue); #endif diff --git a/src/components/digitalIO/Wippersnapper_DigitalGPIO.h b/src/components/digitalIO/Wippersnapper_DigitalGPIO.h index 27e0d02fe..f2146d534 100644 --- a/src/components/digitalIO/Wippersnapper_DigitalGPIO.h +++ b/src/components/digitalIO/Wippersnapper_DigitalGPIO.h @@ -20,10 +20,10 @@ /** Holds data about a digital input pin */ struct digitalInputPin { - uint8_t pinName; ///< Pin name - long period; ///< Timer interval, in millis, -1 if disabled. - long prvPeriod; ///< When timer was previously serviced, in millis - int prvPinVal; ///< Previous pin value + uint16_t pinName; ///< Pin name + long period; ///< Timer interval, in millis, -1 if disabled. + long prvPeriod; ///< When timer was previously serviced, in millis + int prvPinVal; ///< Previous pin value }; // forward decl. @@ -42,28 +42,13 @@ class Wippersnapper_DigitalGPIO { void initDigitalPin(wippersnapper_pin_v1_ConfigurePinRequest_Direction direction, - uint8_t pinName, float period, + uint16_t pinName, float period, wippersnapper_pin_v1_ConfigurePinRequest_Pull pull); void deinitDigitalPin(wippersnapper_pin_v1_ConfigurePinRequest_Direction direction, - uint8_t pinName); - + uint16_t pinName); int digitalReadSvc(int pinName); - void digitalWriteSvc(uint8_t pinName, int pinValue); -#if defined(ARDUINO_ARDUINO_NESSO_N1) - // void - // initDigitalPin(wippersnapper_pin_v1_ConfigurePinRequest_Direction - // direction, - // ExpanderPin pinName, float period, - // wippersnapper_pin_v1_ConfigurePinRequest_Pull pull); - // void - // deinitDigitalPin(wippersnapper_pin_v1_ConfigurePinRequest_Direction - // direction, - // ExpanderPin pinName); - - int digitalReadSvc(ExpanderPin pinName); - void digitalWriteSvc(ExpanderPin pinName, int pinValue); -#endif + void digitalWriteSvc(uint16_t pinName, int pinValue); void processDigitalInputs(); digitalInputPin *_digital_input_pins; /*!< Array of gpio pin objects */