11 #ifndef USERDATA_SAVE_SIZE
12 #define USERDATA_SAVE_SIZE 0
15 #ifdef ARDUINO_ARCH_SAMD
17 #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
20 #elif defined(ARDUINO_ARCH_RP2040)
22 #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
25 #elif defined(ARDUINO_ARCH_ESP8266)
27 #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
30 #elif defined(ARDUINO_ARCH_ESP32)
32 #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
35 #elif defined(LIBRETINY)
37 #elif defined(ESP_PLATFORM)
39 #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
42 #elif defined(ARDUINO_ARCH_STM32)
44 #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
51 #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
59 #ifndef KNX_LED_ACTIVE_ON
60 #define KNX_LED_ACTIVE_ON 0
66 typedef const uint8_t* (*RestoreCallback)(
const uint8_t* buffer);
67 typedef uint8_t* (*SaveCallback)(uint8_t* buffer);
71 #ifdef KNX_ACTIVITYCALLBACK
78 KnxFacade() : _platformPtr(new P()), _bauPtr(new B(*_platformPtr)), _bau(*_bauPtr)
82 _bau.addSaveRestore(
this);
87 _platformPtr =
static_cast<P*
>(&
bau.platform());
90 _bau.addSaveRestore(
this);
97 _bau.addSaveRestore(
this);
112 return *_platformPtr;
122 return _bau.enabled();
132 return _bau.deviceObject().progMode();
137 _bau.deviceObject().progMode(value);
145 _toggleProgMode =
true;
150 return _bau.configured();
158 return _ledPinActiveOn;
168 _ledPinActiveOn = value;
183 _progLedOffCallback = progLedOffCallback;
188 _progLedOnCallback = progLedOnCallback;
213 return _bau.deviceObject().individualAddress();
237 _toggleProgMode =
false;
245 _bau.deviceObject().manufacturerId(value);
250 _bau.deviceObject().bauNumber(value);
255 _bau.deviceObject().orderNumber(value);
260 _bau.deviceObject().hardwareType(value);
265 _bau.deviceObject().version(value);
272 #if defined(ESP_PLATFORM)
273 gpio_reset_pin((gpio_num_t)
ledPin());
274 gpio_set_direction((gpio_num_t)
ledPin(), GPIO_MODE_OUTPUT);
284 #if defined(ESP_PLATFORM)
285 if (_progButtonISRFuncPtr)
290 pinMode(_buttonPin, INPUT_PULLUP);
292 if (_progButtonISRFuncPtr)
295 #if (ARDUINO_API_VERSION >= 10200)
309 _progButtonISRFuncPtr = progButtonISRFuncPtr;
314 _saveCallback = func;
319 _restoreCallback = func;
324 if (!_bau.configured())
327 return _bau.parameters().data(addr);
358 if (!_bau.configured())
361 return (
bool) ((_bau.parameters().getByte(addr) >> (7 - shift)) & 0x01);
366 if (!_bau.configured())
369 return _bau.parameters().getByte(addr);
379 if (!_bau.configured())
382 return (int8_t) _bau.parameters().getByte(addr);
387 if (!_bau.configured())
390 return _bau.parameters().getWord(addr);
395 if (!_bau.configured())
398 return _bau.parameters().getInt(addr);
403 if (!_bau.configured())
406 return _bau.parameters().getFloat(addr, enc);
409 #if (MASK_VERSION == 0x07B0) || (MASK_VERSION == 0x27B0) || (MASK_VERSION == 0x57B0)
412 return _bau.groupObjectTable().get(goNr);
424 _bau.beforeRestartCallback(func);
429 return _bau.beforeRestartCallback();
438 #ifdef KNX_ACTIVITYCALLBACK
441 uint32_t _ledPinActiveOn = KNX_LED_ACTIVE_ON;
442 int32_t _ledPin = KNX_LED;
443 int32_t _buttonPin = KNX_BUTTON;
446 volatile bool _toggleProgMode =
false;
447 bool _progLedState =
false;
448 uint16_t _saveSize = USERDATA_SAVE_SIZE;
451 uint8_t* save(uint8_t* buffer)
453 if (_saveCallback != 0)
454 return _saveCallback(buffer);
459 const uint8_t* restore(
const uint8_t* buffer)
461 if (_restoreCallback != 0)
462 return _restoreCallback(buffer);
472 void saveSize(uint16_t size)
481 #if defined(ESP_PLATFORM)
482 gpio_set_level((gpio_num_t)
ledPin(), _ledPinActiveOn);
488 if (_progLedOffCallback != 0)
489 _progLedOnCallback();
496 #if defined(ESP_PLATFORM)
497 gpio_set_level((gpio_num_t)
ledPin(), 1 - _ledPinActiveOn);
503 if (_progLedOffCallback != 0)
504 _progLedOffCallback();
508 #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
509 #ifdef ARDUINO_ARCH_SAMD
511 #if MASK_VERSION == 0x07B0
513 #elif MASK_VERSION == 0x27B0
515 #elif MASK_VERSION == 0x2920
518 #error "Mask version not supported on ARDUINO_ARCH_SAMD"
520 #elif defined(ARDUINO_ARCH_RP2040)
522 #if MASK_VERSION == 0x07B0
524 #elif MASK_VERSION == 0x27B0
526 #elif MASK_VERSION == 0x57B0
528 #elif MASK_VERSION == 0x2920
530 #elif MASK_VERSION == 0x091A
533 #error "Mask version not supported on ARDUINO_ARCH_RP2040"
535 #elif defined(ARDUINO_ARCH_ESP8266)
537 #if MASK_VERSION == 0x07B0
539 #elif MASK_VERSION == 0x57B0
541 #elif MASK_VERSION == 0x091A
544 #error "Mask version not supported on ARDUINO_ARCH_ESP8266"
546 #elif defined(ARDUINO_ARCH_ESP32)
548 #if MASK_VERSION == 0x07B0
550 #elif MASK_VERSION == 0x57B0
552 #elif MASK_VERSION == 0x091A
555 #error "Mask version not supported on ARDUINO_ARCH_ESP32"
557 #elif defined(LIBRETINY)
559 #if MASK_VERSION == 0x07B0
561 #elif MASK_VERSION == 0x57B0
563 #elif MASK_VERSION == 0x091A
566 #error "Mask version not supported on LIBRETINY"
568 #elif defined(ESP_PLATFORM)
570 #if MASK_VERSION == 0x07B0
572 #elif MASK_VERSION == 0x57B0
574 #elif MASK_VERSION == 0x091A
577 #error "Mask version not supported on ESP_PLATFORM"
579 #elif defined(ARDUINO_ARCH_STM32)
581 #if MASK_VERSION == 0x07B0
584 #error "Mask version not supported on ARDUINO_ARCH_STM32"
void(* BeforeRestartCallback)(void)
This class represents a single group object.
void setProgLedOnCallback(ProgLedOnCallback progLedOnCallback)
GroupObject & getGroupObject(uint16_t goNr)
void manufacturerId(uint16_t value)
uint32_t ledPinActiveOn()
returns HIGH if led is active on HIGH, LOW otherwise
bool paramBit(uint32_t addr, uint8_t shift)
void setProgLedOffCallback(ProgLedOffCallback progLedOffCallback)
uint16_t paramWord(uint32_t addr)
double paramFloat(uint32_t addr, ParameterFloatEncodings enc)
KnxFacade(IsrFunctionPtr buttonISRFunction)
void ledPin(int32_t value)
void restart(uint16_t individualAddress)
void progMode(bool value)
uint8_t paramByte(uint32_t addr)
uint16_t individualAddress()
void setSaveCallback(SaveCallback func)
int8_t paramSignedByte(uint32_t addr)
void setButtonISRFunction(IsrFunctionPtr progButtonISRFuncPtr)
void buttonPin(int32_t value)
uint32_t paramInt(uint32_t addr)
void setRestoreCallback(RestoreCallback func)
void beforeRestartCallback(BeforeRestartCallback func)
BeforeRestartCallback beforeRestartCallback()
void toggleProgMode()
To be called by ISR handling on button press.
void orderNumber(const uint8_t *value)
void version(uint16_t value)
void hardwareType(const uint8_t *value)
void bauNumber(uint32_t value)
uint8_t * paramData(uint32_t addr)
void ledPinActiveOn(uint32_t value)
Sets if the programming led is active on HIGH or LOW.
Interface for classes that can save and restore data from a buffer.
void(* ProgLedOnCallback)()
const uint8_t *(* RestoreCallback)(const uint8_t *buffer)
KnxFacade< SamdPlatform, Bau07B0 > knx
uint8_t *(* SaveCallback)(uint8_t *buffer)
void(* ActivityCallback)(uint8_t info)
void(* ProgLedOffCallback)()