diff --git a/src/Config.cpp b/src/Config.cpp index 4b36c96b..e81d6cd6 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -106,15 +106,15 @@ bool getBoardReady() // reads the EEPROM until NUL terminator and returns the number of characters incl. terminator, starting from given address bool readconfigLengthEEPROM() { - uint16_t addreeprom = MEM_OFFSET_CONFIG; + uint16_t addrMem = MEM_OFFSET_CONFIG; uint16_t length = MFeeprom.get_length(); configLengthEEPROM = 0; if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) return false; - while (MFeeprom.read_byte(addreeprom++) != 0x00) { + while (MFeeprom.read_byte(addrMem++) != 0x00) { configLengthEEPROM++; - if (addreeprom > length) { + if (addrMem > length) { cmdMessenger.sendCmd(kStatus, F("Loading config failed")); // text or "-1" like config upload? return false; } @@ -420,15 +420,15 @@ void readConfigFromMemory(bool configFromFlash) do { switch (command) { case kTypeButton: - params[0] = readUint(&addrMem, configFromFlash); // Pin number - Button::Add(params[0], &nameBuffer[pNameBuffer]); // MUST be before readName because readName returns the pointer for the NEXT Name - copy_success = readName(&addrMem, nameBuffer, &pNameBuffer, configFromFlash); // copy the NULL terminated name to nameBuffer and set to next free memory location + params[0] = readUint(&addrMem, configFromFlash); // Pin number + Button::Add(params[0]); + copy_success = readEndCommand(&addrMem, ':', configFromFlash); break; case kTypeOutput: params[0] = readUint(&addrMem, configFromFlash); // Pin number Output::Add(params[0]); - copy_success = readEndCommand(&addrMem, ':', configFromFlash); // check EEPROM until end of name + copy_success = readEndCommand(&addrMem, ':', configFromFlash); break; #if MF_SEGMENT_SUPPORT == 1 @@ -499,8 +499,8 @@ void readConfigFromMemory(bool configFromFlash) if (command == kTypeEncoder) params[2] = readUint(&addrMem, configFromFlash); // type - Encoder::Add(params[0], params[1], params[2], &nameBuffer[pNameBuffer]); // MUST be before readName because readName returns the pointer for the NEXT Name - copy_success = readName(&addrMem, nameBuffer, &pNameBuffer, configFromFlash); // copy the NULL terminated name to nameBuffer and set to next free memory location + Encoder::Add(params[0], params[1], params[2]); + copy_success = readEndCommand(&addrMem, ':', configFromFlash); break; #if MF_LCD_SUPPORT == 1 @@ -509,21 +509,20 @@ void readConfigFromMemory(bool configFromFlash) params[1] = readUint(&addrMem, configFromFlash); // columns params[2] = readUint(&addrMem, configFromFlash); // lines LCDDisplay::Add(params[0], params[1], params[2]); - copy_success = readEndCommand(&addrMem, ':', configFromFlash); // check EEPROM until end of name + copy_success = readEndCommand(&addrMem, ':', configFromFlash); break; #endif #if MF_ANALOG_SUPPORT == 1 case kTypeAnalogInputDeprecated: case kTypeAnalogInput: - params[0] = readUint(&addrMem, configFromFlash); // pin number - params[1] = readUint(&addrMem, configFromFlash); // sensitivity + params[0] = readUint(&addrMem, configFromFlash); // pin number + params[1] = readUint(&addrMem, configFromFlash); // sensitivity if (command == kTypeAnalogInputDeprecated) - Analog::Add(params[0], &nameBuffer[pNameBuffer], params[1], true); // MUST be before readName because readName returns the pointer for the NEXT Name + Analog::Add(params[0], params[1], true); else - Analog::Add(params[0], &nameBuffer[pNameBuffer], params[1], false); // MUST be before readName because readName returns the pointer for the NEXT Name - copy_success = readName(&addrMem, nameBuffer, &pNameBuffer, configFromFlash); // copy the NULL terminated name to to nameBuffer and set to next free memory location - // copy_success = readEndCommand(&addrMem, ':'); // once the nameBuffer is not required anymore uncomment this line and delete the line before + Analog::Add(params[0], params[1], false); + copy_success = readEndCommand(&addrMem, ':', configFromFlash); break; #endif @@ -534,7 +533,7 @@ void readConfigFromMemory(bool configFromFlash) params[2] = readUint(&addrMem, configFromFlash); // data Pin params[3] = readUint(&addrMem, configFromFlash); // number of daisy chained modules OutputShifter::Add(params[0], params[1], params[2], params[3]); - copy_success = readEndCommand(&addrMem, ':', configFromFlash); // check EEPROM until end of name + copy_success = readEndCommand(&addrMem, ':', configFromFlash); break; #endif @@ -544,9 +543,8 @@ void readConfigFromMemory(bool configFromFlash) params[1] = readUint(&addrMem, configFromFlash); // clock Pin params[2] = readUint(&addrMem, configFromFlash); // data Pin params[3] = readUint(&addrMem, configFromFlash); // number of daisy chained modules - InputShifter::Add(params[0], params[1], params[2], params[3], &nameBuffer[pNameBuffer]); - copy_success = readName(&addrMem, nameBuffer, &pNameBuffer, configFromFlash); // copy the NULL terminated name to to nameBuffer and set to next free memory location - // copy_success = readEndCommand(&addrMem, ':'); // once the nameBuffer is not required anymore uncomment this line and delete the line before + InputShifter::Add(params[0], params[1], params[2], params[3]); + copy_success = readEndCommand(&addrMem, ':', configFromFlash); break; #endif @@ -562,8 +560,8 @@ void readConfigFromMemory(bool configFromFlash) params[4] = readUint(&addrMem, configFromFlash); // Sel3 pin MUX.attach(params[1], params[2], params[3], params[4]); params[5] = readUint(&addrMem, configFromFlash); // 8-bit registers (1-2) - DigInMux::Add(params[0], params[5], &nameBuffer[pNameBuffer]); - copy_success = readName(&addrMem, nameBuffer, &pNameBuffer, configFromFlash); + DigInMux::Add(params[0], params[5]); + copy_success = readEndCommand(&addrMem, ':', configFromFlash); break; #endif @@ -594,8 +592,8 @@ void readConfigFromMemory(bool configFromFlash) } command = readUint(&addrMem, configFromFlash); } while (command && copy_success); - if (!copy_success) { // too much/long names for input devices - nameBuffer[MEMLEN_NAMES_BUFFER - 1] = 0x00; // terminate the last copied (part of) string with 0x00 + if (!copy_success) { // EEPROM size exceeded while reading the config, might happen if EEPROM is corrupted + configActivated = false; cmdMessenger.sendCmd(kStatus, F("Failure on reading config")); } } diff --git a/src/MF_Analog/Analog.cpp b/src/MF_Analog/Analog.cpp index 6e91fc12..e808be91 100644 --- a/src/MF_Analog/Analog.cpp +++ b/src/MF_Analog/Analog.cpp @@ -15,12 +15,12 @@ namespace Analog uint8_t analogRegistered = 0; uint8_t maxAnalogIn = 0; - void handlerOnAnalogChange(int value, const char *name) + void handlerOnAnalogChange(int value, uint8_t deviceID) { if (!getBoardReady()) return; cmdMessenger.sendCmdStart(kAnalogChange); - cmdMessenger.sendCmdArg(name); + cmdMessenger.sendCmdArg(deviceID); cmdMessenger.sendCmdArg(value); cmdMessenger.sendCmdEnd(); }; @@ -29,18 +29,18 @@ namespace Analog { if (!FitInMemory(sizeof(MFAnalog) * count)) return false; - analog = new (allocateMemory(sizeof(MFAnalog) * count)) MFAnalog; + analog = new (allocateMemory(sizeof(MFAnalog) * count)) MFAnalog(); maxAnalogIn = count; return true; } - void Add(uint8_t pin, char const *name, uint8_t sensitivity, bool deprecated) + void Add(uint8_t pin, uint8_t sensitivity, bool deprecated) { if (analogRegistered == maxAnalogIn) return; analog[analogRegistered] = MFAnalog(); - analog[analogRegistered].attach(pin, name, sensitivity, deprecated); + analog[analogRegistered].attach(pin, analogRegistered, sensitivity, deprecated); MFAnalog::attachHandler(handlerOnAnalogChange); analogRegistered++; #ifdef DEBUG2CMDMESSENGER diff --git a/src/MF_Analog/Analog.h b/src/MF_Analog/Analog.h index 32bd05ab..da73aa1e 100644 --- a/src/MF_Analog/Analog.h +++ b/src/MF_Analog/Analog.h @@ -10,7 +10,7 @@ namespace Analog { bool setupArray(uint16_t count); - void Add(uint8_t pin, char const *name = "AnalogInput", uint8_t sensitivity = 3, bool deprecated = true); + void Add(uint8_t pin, uint8_t sensitivity = 3, bool deprecated = true); void Clear(); void read(); void readAverage(); diff --git a/src/MF_Analog/MFAnalog.cpp b/src/MF_Analog/MFAnalog.cpp index 86f4af96..a2e4ce71 100644 --- a/src/MF_Analog/MFAnalog.cpp +++ b/src/MF_Analog/MFAnalog.cpp @@ -13,11 +13,11 @@ MFAnalog::MFAnalog() _initialized = false; } -void MFAnalog::attach(uint8_t pin, const char *name, uint8_t sensitivity, bool deprecated) +void MFAnalog::attach(uint8_t pin, uint8_t deviceID, uint8_t sensitivity, bool deprecated) { _sensitivity = sensitivity; _pin = pin; - _name = name; + _deviceID = deviceID; #if defined(ARDUINO_AVR_PROMICRO16) // ProMicro has a special pin assignment for analog pins // therefore reading from A6 and A7 does not work @@ -55,7 +55,7 @@ void MFAnalog::readChannel(uint8_t alwaysTrigger) if (alwaysTrigger || valueHasChanged(newValue)) { _lastValue = newValue; if (_handler != NULL) { - (*_handler)(_lastValue, _name); + (*_handler)(_lastValue, _deviceID); } } } diff --git a/src/MF_Analog/MFAnalog.h b/src/MF_Analog/MFAnalog.h index 00e01097..c6c34ba3 100644 --- a/src/MF_Analog/MFAnalog.h +++ b/src/MF_Analog/MFAnalog.h @@ -16,7 +16,7 @@ extern "C" { // callback functions -typedef void (*analogEvent)(int, const char *); +typedef void (*analogEvent)(int, uint8_t); }; ///////////////////////////////////////////////////////////////////// @@ -26,7 +26,7 @@ class MFAnalog public: MFAnalog(); static void attachHandler(analogEvent handler); - void attach(uint8_t pin, const char *name, uint8_t sensitivity, bool deprecated); + void attach(uint8_t pin, uint8_t deviceID, uint8_t sensitivity, bool deprecated); void update(); void retrigger(); void readBuffer(); @@ -35,8 +35,9 @@ class MFAnalog private: static analogEvent _handler; - int _lastValue; + int16_t _lastValue; uint8_t _sensitivity; + uint8_t _deviceID; uint16_t ADC_Buffer[ADC_MAX_AVERAGE] = {0}; // Buffer for all values from each channel uint16_t ADC_Average_Total = 0; // sum of sampled values, must be divided by ADC_MAX_AVERAGE to get actual value diff --git a/src/MF_Button/Button.cpp b/src/MF_Button/Button.cpp index 343b56fc..ad3da3da 100644 --- a/src/MF_Button/Button.cpp +++ b/src/MF_Button/Button.cpp @@ -14,12 +14,12 @@ namespace Button uint8_t buttonsRegistered = 0; uint8_t maxButtons = 0; - void handlerButtonOnChange(uint8_t eventId, const char *name) + void handlerButtonOnChange(uint8_t eventId, uint8_t deviceID) { if (!getBoardReady()) return; cmdMessenger.sendCmdStart(kButtonChange); - cmdMessenger.sendCmdArg(name); + cmdMessenger.sendCmdArg(deviceID); cmdMessenger.sendCmdArg(eventId); cmdMessenger.sendCmdEnd(); }; @@ -33,12 +33,12 @@ namespace Button return true; } - void Add(uint8_t pin, char const *name) + void Add(uint8_t pin) { if (buttonsRegistered == maxButtons) return; buttons[buttonsRegistered] = MFButton(); - buttons[buttonsRegistered].attach(pin, name); + buttons[buttonsRegistered].attach(pin, buttonsRegistered); MFButton::attachHandler(handlerButtonOnChange); buttonsRegistered++; #ifdef DEBUG2CMDMESSENGER diff --git a/src/MF_Button/Button.h b/src/MF_Button/Button.h index 5dd41673..2ee7efa5 100644 --- a/src/MF_Button/Button.h +++ b/src/MF_Button/Button.h @@ -11,7 +11,7 @@ namespace Button { bool setupArray(uint16_t count); - void Add(uint8_t pin, char const *name = "Button"); + void Add(uint8_t pin); void Clear(); void read(); void OnTrigger(); diff --git a/src/MF_Button/MFButton.cpp b/src/MF_Button/MFButton.cpp index d51adb17..ba68b31a 100644 --- a/src/MF_Button/MFButton.cpp +++ b/src/MF_Button/MFButton.cpp @@ -12,10 +12,10 @@ MFButton::MFButton() _initialized = false; } -void MFButton::attach(uint8_t pin, const char *name) +void MFButton::attach(uint8_t pin, uint8_t deviceID) { _pin = pin; - _name = name; + _deviceID = deviceID; pinMode(_pin, INPUT_PULLUP); // set pin to input _state = digitalRead(_pin); // initialize on actual status _initialized = true; @@ -47,7 +47,7 @@ void MFButton::triggerOnPress() if (!_initialized) return; if (_inputHandler && _state == LOW) { - (*_inputHandler)(btnOnPress, _name); + (*_inputHandler)(btnOnPress, _deviceID); } } @@ -56,7 +56,7 @@ void MFButton::triggerOnRelease() if (!_initialized) return; if (_inputHandler && _state == HIGH) { - (*_inputHandler)(btnOnRelease, _name); + (*_inputHandler)(btnOnRelease, _deviceID); } } diff --git a/src/MF_Button/MFButton.h b/src/MF_Button/MFButton.h index e7342718..16dd61e4 100644 --- a/src/MF_Button/MFButton.h +++ b/src/MF_Button/MFButton.h @@ -10,7 +10,7 @@ extern "C" { // callback functions always follow the signature: void cmd(void); -typedef void (*buttonEvent)(uint8_t, const char *); +typedef void (*buttonEvent)(uint8_t, uint8_t); }; enum { @@ -25,7 +25,7 @@ class MFButton public: MFButton(); static void attachHandler(buttonEvent newHandler); - void attach(uint8_t pin, const char *name); + void attach(uint8_t pin, uint8_t deviceID); void detach(); void update(); void trigger(uint8_t state); @@ -33,7 +33,7 @@ class MFButton void triggerOnRelease(); private: - const char *_name; + uint8_t _deviceID; uint8_t _pin; bool _initialized; bool _state; diff --git a/src/MF_DigInMux/DigInMux.cpp b/src/MF_DigInMux/DigInMux.cpp index 984bab0b..fdace5e3 100644 --- a/src/MF_DigInMux/DigInMux.cpp +++ b/src/MF_DigInMux/DigInMux.cpp @@ -16,12 +16,12 @@ namespace DigInMux uint8_t digInMuxRegistered = 0; uint8_t maxDigInMux = 0; - void handlerOnDigInMux(uint8_t eventId, uint8_t channel, const char *name) + void handlerOnDigInMux(uint8_t eventId, uint8_t channel, uint8_t deviceID) { if (!getBoardReady()) return; cmdMessenger.sendCmdStart(kDigInMuxChange); - cmdMessenger.sendCmdArg(name); + cmdMessenger.sendCmdArg(deviceID); cmdMessenger.sendCmdArg(channel); cmdMessenger.sendCmdArg(eventId); cmdMessenger.sendCmdEnd(); @@ -36,12 +36,12 @@ namespace DigInMux return true; } - void Add(uint8_t dataPin, uint8_t nRegs, char const *name) + void Add(uint8_t dataPin, uint8_t nRegs) { if (digInMuxRegistered == maxDigInMux) return; - digInMux[digInMuxRegistered] = MFDigInMux(&MUX, name); - digInMux[digInMuxRegistered].attach(dataPin, (nRegs == 1), name); + digInMux[digInMuxRegistered] = MFDigInMux(&MUX); + digInMux[digInMuxRegistered].attach(dataPin, (nRegs == 1), digInMuxRegistered); MFDigInMux::attachHandler(handlerOnDigInMux); digInMuxRegistered++; diff --git a/src/MF_DigInMux/DigInMux.h b/src/MF_DigInMux/DigInMux.h index 11409d22..7e307ee9 100644 --- a/src/MF_DigInMux/DigInMux.h +++ b/src/MF_DigInMux/DigInMux.h @@ -11,7 +11,7 @@ namespace DigInMux { bool setupArray(uint16_t count); - void Add(uint8_t dataPin, uint8_t nRegs, char const *name = "DigInMux"); + void Add(uint8_t dataPin, uint8_t nRegs); void Clear(); void read(); void OnTrigger(); diff --git a/src/MF_DigInMux/MFDigInMux.cpp b/src/MF_DigInMux/MFDigInMux.cpp index c82f0883..0d44d03f 100644 --- a/src/MF_DigInMux/MFDigInMux.cpp +++ b/src/MF_DigInMux/MFDigInMux.cpp @@ -15,13 +15,11 @@ MuxDigInEvent MFDigInMux::_inputHandler = NULL; MFDigInMux::MFDigInMux(void) { _MUX = NULL; - _name = "MUXDigIn"; _flags = 0x00; clear(); } -MFDigInMux::MFDigInMux(MFMuxDriver *MUX, const char *name) - : _name(name) +MFDigInMux::MFDigInMux(MFMuxDriver *MUX) { if (MUX) _MUX = MUX; _flags = 0x00; @@ -34,12 +32,12 @@ void MFDigInMux::setMux(MFMuxDriver *MUX) } // Registers a new MUX input block and configures the driver pins -void MFDigInMux::attach(uint8_t dataPin, bool halfSize, char const *name) +void MFDigInMux::attach(uint8_t dataPin, bool halfSize, uint8_t deviceID) { // if(!_MUX) return; // no need to check, the object can be set up in advance before the MUX is configured - _dataPin = dataPin; - _name = name; - _flags = 0x00; + _dataPin = dataPin; + _deviceID = deviceID; + _flags = 0x00; if (halfSize) bitSet(_flags, MUX_HALFSIZE); pinMode(_dataPin, INPUT_PULLUP); bitSet(_flags, MUX_INITED); @@ -140,7 +138,7 @@ void MFDigInMux::trigger(uint8_t channel, bool state) { if (!_MUX) return; if (!_inputHandler) return; - (*_inputHandler)((state ? MuxDigInOnRelease : MuxDigInOnPress), channel, _name); + (*_inputHandler)((state ? MuxDigInOnRelease : MuxDigInOnPress), channel, _deviceID); } // Attaches a new event handler for the specified event. diff --git a/src/MF_DigInMux/MFDigInMux.h b/src/MF_DigInMux/MFDigInMux.h index 19896674..168af3ed 100644 --- a/src/MF_DigInMux/MFDigInMux.h +++ b/src/MF_DigInMux/MFDigInMux.h @@ -10,7 +10,7 @@ #include "MFMuxDriver.h" extern "C" { -typedef void (*MuxDigInEvent)(byte, uint8_t, const char *); +typedef void (*MuxDigInEvent)(byte, uint8_t, uint8_t); }; enum { @@ -22,11 +22,11 @@ class MFDigInMux { public: MFDigInMux(void); - MFDigInMux(MFMuxDriver *MUX, const char *name); + MFDigInMux(MFMuxDriver *MUX); static void setMux(MFMuxDriver *MUX); static void attachHandler(MuxDigInEvent newHandler); - void attach(uint8_t dataPin, bool halfSize, char const *name); + void attach(uint8_t dataPin, bool halfSize, uint8_t deviceID); void detach(); void clear(); void retrigger(); @@ -44,10 +44,10 @@ class MFDigInMux static MFMuxDriver *_MUX; static MuxDigInEvent _inputHandler; - const char *_name; - uint8_t _dataPin; // Data pin - MUX common, input to AVR - uint8_t _flags; - uint16_t _lastState; + uint8_t _deviceID; + uint8_t _dataPin; // Data pin - MUX common, input to AVR + uint8_t _flags; + uint16_t _lastState; void poll(bool detect); void detectChanges(uint16_t lastState, uint16_t currentState); diff --git a/src/MF_Encoder/Encoder.cpp b/src/MF_Encoder/Encoder.cpp index 49ce2a82..bee4e996 100644 --- a/src/MF_Encoder/Encoder.cpp +++ b/src/MF_Encoder/Encoder.cpp @@ -14,12 +14,12 @@ namespace Encoder uint8_t encodersRegistered = 0; uint8_t maxEncoders = 0; - void handlerOnEncoder(uint8_t eventId, const char *name) + void handlerOnEncoder(uint8_t eventId, uint8_t deviceID) { if (!getBoardReady()) return; cmdMessenger.sendCmdStart(kEncoderChange); - cmdMessenger.sendCmdArg(name); + cmdMessenger.sendCmdArg(deviceID); cmdMessenger.sendCmdArg(eventId); cmdMessenger.sendCmdEnd(); }; @@ -33,12 +33,12 @@ namespace Encoder return true; } - void Add(uint8_t pin1, uint8_t pin2, uint8_t encoder_type, char const *name) + void Add(uint8_t pin1, uint8_t pin2, uint8_t encoder_type) { if (encodersRegistered == maxEncoders) return; encoders[encodersRegistered] = MFEncoder(); - encoders[encodersRegistered].attach(pin1, pin2, encoder_type, name); + encoders[encodersRegistered].attach(pin1, pin2, encoder_type, encodersRegistered); MFEncoder::attachHandler(handlerOnEncoder); encodersRegistered++; #ifdef DEBUG2CMDMESSENGER diff --git a/src/MF_Encoder/Encoder.h b/src/MF_Encoder/Encoder.h index 52b54894..88d082fa 100644 --- a/src/MF_Encoder/Encoder.h +++ b/src/MF_Encoder/Encoder.h @@ -10,7 +10,7 @@ namespace Encoder { bool setupArray(uint16_t count); - void Add(uint8_t pin1 = 1, uint8_t pin2 = 2, uint8_t encoder_type = 0, char const *name = "Encoder"); + void Add(uint8_t pin1 = 1, uint8_t pin2 = 2, uint8_t encoder_type = 0); void Clear(); void read(); } diff --git a/src/MF_Encoder/MFEncoder.cpp b/src/MF_Encoder/MFEncoder.cpp index 9c90a24e..62b9df93 100644 --- a/src/MF_Encoder/MFEncoder.cpp +++ b/src/MF_Encoder/MFEncoder.cpp @@ -60,10 +60,10 @@ MFEncoder::MFEncoder() _initialized = false; } -void MFEncoder::attach(uint8_t pin1, uint8_t pin2, uint8_t TypeEncoder, const char *name) +void MFEncoder::attach(uint8_t pin1, uint8_t pin2, uint8_t TypeEncoder, uint8_t deviceID) { _pos = 0; - _name = name; + _deviceID = deviceID; _pin1 = pin1; _pin2 = pin2; _encoderType = encoderTypes[TypeEncoder]; @@ -103,16 +103,16 @@ void MFEncoder::update() if (abs(delta) < (MF_ENC_FAST_LIMIT)) { // slow turn detected if (dir) { - (*_handler)(encLeft, _name); + (*_handler)(encLeft, _deviceID); } else { - (*_handler)(encRight, _name); + (*_handler)(encRight, _deviceID); } } else { // fast turn detected if (dir) { - (*_handler)(encLeftFast, _name); + (*_handler)(encLeftFast, _deviceID); } else { - (*_handler)(encRightFast, _name); + (*_handler)(encRightFast, _deviceID); } } } diff --git a/src/MF_Encoder/MFEncoder.h b/src/MF_Encoder/MFEncoder.h index 6ad8a80b..90991883 100644 --- a/src/MF_Encoder/MFEncoder.h +++ b/src/MF_Encoder/MFEncoder.h @@ -20,7 +20,7 @@ #include extern "C" { -typedef void (*encoderEvent)(uint8_t, const char *); +typedef void (*encoderEvent)(uint8_t, uint8_t); }; // this prevents the internal position overflow. @@ -38,7 +38,7 @@ enum { typedef struct { // Detent positions in the quadrature (by value, not position) - bool detents[4]; + bool detents[4]; // Bit shift to apply given the detent resolution of this encoder. // @@ -53,21 +53,21 @@ class MFEncoder public: MFEncoder(); static void attachHandler(encoderEvent newHandler); - void attach(uint8_t pin1, uint8_t pin2, uint8_t TypeEncoder, const char *name = "Encoder"); + void attach(uint8_t pin1, uint8_t pin2, uint8_t TypeEncoder, uint8_t deviceID); void update(); // call this function every some milliseconds or by using an interrupt for handling state changes of the rotary encoder. - void tick(void); + void tick(void); // retrieve the current position - int16_t getPosition(); + int16_t getPosition(); // adjust the current position - void setPosition(int16_t newPosition); + void setPosition(int16_t newPosition); private: static encoderEvent _handler; uint8_t _pin1; uint8_t _pin2; bool _initialized; - const char *_name; + uint8_t _deviceID; int16_t _pos; uint8_t _TypeEncoder; uint8_t _detentCounter; diff --git a/src/MF_InputShifter/InputShifter.cpp b/src/MF_InputShifter/InputShifter.cpp index 20a7b1fe..04c28027 100644 --- a/src/MF_InputShifter/InputShifter.cpp +++ b/src/MF_InputShifter/InputShifter.cpp @@ -14,12 +14,12 @@ namespace InputShifter uint8_t inputShifterRegistered = 0; uint8_t maxInputShifter = 0; - void handlerInputShifterOnChange(uint8_t eventId, uint8_t pin, const char *name) + void handlerInputShifterOnChange(uint8_t eventId, uint8_t pin, uint8_t deviceID) { if (!getBoardReady()) return; cmdMessenger.sendCmdStart(kInputShifterChange); - cmdMessenger.sendCmdArg(name); + cmdMessenger.sendCmdArg(deviceID); cmdMessenger.sendCmdArg(pin); cmdMessenger.sendCmdArg(eventId); cmdMessenger.sendCmdEnd(); @@ -34,12 +34,12 @@ namespace InputShifter return true; } - void Add(uint8_t latchPin, uint8_t clockPin, uint8_t dataPin, uint8_t modules, char const *name) + void Add(uint8_t latchPin, uint8_t clockPin, uint8_t dataPin, uint8_t modules) { if (inputShifterRegistered == maxInputShifter) return; inputShifter[inputShifterRegistered] = MFInputShifter(); - if (!inputShifter[inputShifterRegistered].attach(latchPin, clockPin, dataPin, modules, name)) { + if (!inputShifter[inputShifterRegistered].attach(latchPin, clockPin, dataPin, modules, inputShifterRegistered)) { cmdMessenger.sendCmd(kStatus, F("InputShifter array does not fit into Memory")); return; } diff --git a/src/MF_InputShifter/InputShifter.h b/src/MF_InputShifter/InputShifter.h index 0efb1c7c..201c2774 100644 --- a/src/MF_InputShifter/InputShifter.h +++ b/src/MF_InputShifter/InputShifter.h @@ -9,7 +9,7 @@ namespace InputShifter { bool setupArray(uint16_t count); - void Add(uint8_t latchPin, uint8_t clockPin, uint8_t dataPin, uint8_t modules, char const *name = "InputShifter"); + void Add(uint8_t latchPin, uint8_t clockPin, uint8_t dataPin, uint8_t modules); void Clear(); void read(); void OnTrigger(); diff --git a/src/MF_InputShifter/MFInputShifter.cpp b/src/MF_InputShifter/MFInputShifter.cpp index d8bdfb9c..b573f6c3 100644 --- a/src/MF_InputShifter/MFInputShifter.cpp +++ b/src/MF_InputShifter/MFInputShifter.cpp @@ -16,12 +16,12 @@ MFInputShifter::MFInputShifter() // Registers a new input shifter and configures the clock, data and latch pins as well // as the number of modules to read from. -bool MFInputShifter::attach(uint8_t latchPin, uint8_t clockPin, uint8_t dataPin, uint8_t moduleCount, const char *name) +bool MFInputShifter::attach(uint8_t latchPin, uint8_t clockPin, uint8_t dataPin, uint8_t moduleCount, uint8_t deviceID) { _latchPin = latchPin; _clockPin = clockPin; _dataPin = dataPin; - _name = name; + _deviceID = deviceID; _moduleCount = moduleCount; pinMode(_latchPin, OUTPUT); @@ -102,7 +102,7 @@ void MFInputShifter::detectChanges(uint8_t lastState, uint8_t currentState, uint // if a handler is registered. void MFInputShifter::trigger(uint8_t pin, bool state) { - (*_inputHandler)((state == LOW ? inputShifterOnPress : inputShifterOnRelease), pin, _name); + (*_inputHandler)((state == LOW ? inputShifterOnPress : inputShifterOnRelease), pin, _deviceID); } void MFInputShifter::triggerOnPress() diff --git a/src/MF_InputShifter/MFInputShifter.h b/src/MF_InputShifter/MFInputShifter.h index 287e109e..dce0f38d 100644 --- a/src/MF_InputShifter/MFInputShifter.h +++ b/src/MF_InputShifter/MFInputShifter.h @@ -9,7 +9,7 @@ #include extern "C" { -typedef void (*inputShifterEvent)(byte, uint8_t, const char *); +typedef void (*inputShifterEvent)(byte, uint8_t, uint8_t); }; enum { @@ -21,8 +21,8 @@ class MFInputShifter { public: MFInputShifter(); + bool attach(uint8_t latchPin, uint8_t clockPin, uint8_t dataPin, uint8_t moduleCount, uint8_t deviceID); static void attachHandler(inputShifterEvent newHandler); - bool attach(uint8_t latchPin, uint8_t clockPin, uint8_t dataPin, uint8_t moduleCount, const char *name); void detach(); void update(); void triggerOnPress(); @@ -32,13 +32,13 @@ class MFInputShifter enum { DONT_TRIGGER = 0, DO_TRIGGER = 1 }; - const char *_name; - uint8_t _latchPin; // SH/~LD (latch) pin - uint8_t _clockPin; // CLK (clock) pin - uint8_t _dataPin; // SDO (data) pin - uint8_t _moduleCount; // Number of 8 bit modules in series. - bool _initialized = false; - uint8_t *_lastState; + uint8_t _deviceID; + uint8_t _latchPin; // SH/~LD (latch) pin + uint8_t _clockPin; // CLK (clock) pin + uint8_t _dataPin; // SDO (data) pin + uint8_t _moduleCount; // Number of 8 bit modules in series. + bool _initialized = false; + uint8_t *_lastState; void poll(uint8_t doTrigger); void detectChanges(uint8_t lastState, uint8_t currentState, uint8_t module); diff --git a/src/MF_Modules/MFMuxDriver.h b/src/MF_Modules/MFMuxDriver.h index 4cd39971..cb3bee72 100644 --- a/src/MF_Modules/MFMuxDriver.h +++ b/src/MF_Modules/MFMuxDriver.h @@ -8,10 +8,6 @@ #include -extern "C" { -typedef void (*MuxDigInEvent)(byte, uint8_t, const char *); -}; - class MFMuxDriver { public: diff --git a/src/commandmessenger.h b/src/commandmessenger.h index 19580b38..f6ff03f3 100644 --- a/src/commandmessenger.h +++ b/src/commandmessenger.h @@ -12,41 +12,52 @@ // In order to receive, attach a callback function to these events enum { - kInitModule, // 0 - kSetModule, // 1 - kSetPin, // 2 - kSetStepper, // 3 - kSetServo, // 4 - kStatus, // 5, Command to report status - kEncoderChange, // 6 - kButtonChange, // 7 - kStepperChange, // 8 - kGetInfo, // 9 - kInfo, // 10 - kSetConfig, // 11 - kGetConfig, // 12 - kResetConfig, // 13 - kSaveConfig, // 14 - kConfigSaved, // 15 - kActivateConfig, // 16 - kConfigActivated, // 17 - kSetPowerSavingMode, // 18 - kSetName, // 19 - kGenNewSerial, // 20 - kResetStepper, // 21 - kSetZeroStepper, // 22 - kTrigger, // 23 - kResetBoard, // 24 - kSetLcdDisplayI2C, // 25 - kSetModuleBrightness, // 26 - kSetShiftRegisterPins, // 27 - kAnalogChange, // 28 - kInputShifterChange, // 29 - kDigInMuxChange, // 30 - kSetStepperSpeedAccel, // 31 - kSetCustomDevice, // 32 - kSetModuleSingleSegment, // 33 - kDebug = 0xFF // 255 + kInitModule, // 0 + kSetModule, // 1 + kSetPin, // 2 + kSetStepper, // 3 + kSetServo, // 4 + kStatus, // 5, Command to report status + kEncoderChangeDeprecated, // 6 + kButtonChangeDeprecated, // 7 + kStepperChange, // 8 + kGetInfo, // 9 + kInfo, // 10 + kSetConfig, // 11 + kGetConfig, // 12 + kResetConfig, // 13 + kSaveConfig, // 14 + kConfigSaved, // 15 + kActivateConfig, // 16 + kConfigActivated, // 17 + kSetPowerSavingMode, // 18 + kSetName, // 19 + kGenNewSerial, // 20 + kResetStepper, // 21 + kSetZeroStepper, // 22 + kTrigger, // 23 + kResetBoard, // 24 + kSetLcdDisplayI2C, // 25 + kSetModuleBrightness, // 26 + kSetShiftRegisterPins, // 27 + kAnalogChangeDeprecated, // 28 + kInputShifterChangeDeprecated, // 29 + kDigInMuxChangeDeprecated, // 30 + kSetStepperSpeedAccel, // 31 + kSetCustomDevice, // 32 + kSetModuleSingleSegment, // 33 + // functions which get be called from the UI via the command messenger + // must be added before. The command messenger has a fix buffer size + // for the functions which defined by MAXCALLBACKS=30. + // ------------------------------------------------------------------- + // new handler ID's for input devices must be added here + // This will save size of the Callback buffer + kButtonChange = 100, // 100 + kEncoderChange, // 101 + kAnalogChange, // 102 + kInputShifterChange, // 103 + kDigInMuxChange, // 104 + kDebug = 0xFF // 255 }; void attachCommandCallbacks();