Again: Prog-LED switchable from bus/ETS

This commit is contained in:
Waldemar Porscha 2019-08-17 11:13:51 +02:00
parent 813150e5d9
commit 9b709a9b0d

View File

@ -1,234 +1,234 @@
#include "knx_facade.h" #include "knx_facade.h"
#include "knx/bits.h" #include "knx/bits.h"
#ifdef ARDUINO_ARCH_SAMD #ifdef ARDUINO_ARCH_SAMD
SamdPlatform platform; SamdPlatform platform;
Bau07B0 bau(platform); Bau07B0 bau(platform);
#define ICACHE_RAM_ATTR #define ICACHE_RAM_ATTR
#elif ARDUINO_ARCH_ESP8266 #elif ARDUINO_ARCH_ESP8266
EspPlatform platform; EspPlatform platform;
Bau57B0 bau(platform); Bau57B0 bau(platform);
#elif __linux__ //linux #elif __linux__ //linux
// noops on linux // noops on linux
#define digitalWrite(a, b) #define digitalWrite(a, b)
#define pinMode(a, b) #define pinMode(a, b)
#define attachInterrupt(a, b, c) #define attachInterrupt(a, b, c)
#endif #endif
bool _toogleProgMode = false; bool _toogleProgMode = false;
bool _progLedState = false; bool _progLedState = false;
#ifndef __linux__ #ifndef __linux__
KnxFacade knx(bau); KnxFacade knx(bau);
ICACHE_RAM_ATTR void buttonUp() ICACHE_RAM_ATTR void buttonUp()
{ {
_toogleProgMode = true; _toogleProgMode = true;
} }
#endif #endif
KnxFacade::KnxFacade(BauSystemB &bau) : _bau(bau) KnxFacade::KnxFacade(BauSystemB &bau) : _bau(bau)
{ {
manufacturerId(0xfa); manufacturerId(0xfa);
_bau.addSaveRestore(this); _bau.addSaveRestore(this);
} }
bool KnxFacade::enabled() bool KnxFacade::enabled()
{ {
return _bau.enabled(); return _bau.enabled();
} }
void KnxFacade::enabled(bool value) void KnxFacade::enabled(bool value)
{ {
_bau.enabled(true); _bau.enabled(true);
} }
bool KnxFacade::progMode() bool KnxFacade::progMode()
{ {
return _bau.deviceObject().progMode(); return _bau.deviceObject().progMode();
} }
void KnxFacade::progMode(bool value) void KnxFacade::progMode(bool value)
{ {
_bau.deviceObject().progMode(value); _bau.deviceObject().progMode(value);
} }
bool KnxFacade::configured() bool KnxFacade::configured()
{ {
return _bau.configured(); return _bau.configured();
} }
uint32_t KnxFacade::ledPinActiveOn() uint32_t KnxFacade::ledPinActiveOn()
{ {
return _ledPinActiveOn; return _ledPinActiveOn;
} }
void KnxFacade::ledPinActiveOn(uint32_t value) void KnxFacade::ledPinActiveOn(uint32_t value)
{ {
_ledPinActiveOn = value; _ledPinActiveOn = value;
} }
uint32_t KnxFacade::ledPin() uint32_t KnxFacade::ledPin()
{ {
return _ledPin; return _ledPin;
} }
void KnxFacade::ledPin(uint32_t value) void KnxFacade::ledPin(uint32_t value)
{ {
_ledPin = value; _ledPin = value;
} }
uint32_t KnxFacade::buttonPin() uint32_t KnxFacade::buttonPin()
{ {
return _buttonPin; return _buttonPin;
} }
void KnxFacade::buttonPin(uint32_t value) void KnxFacade::buttonPin(uint32_t value)
{ {
_buttonPin = value; _buttonPin = value;
} }
void KnxFacade::readMemory() void KnxFacade::readMemory()
{ {
_bau.readMemory(); _bau.readMemory();
} }
void KnxFacade::writeMemory() void KnxFacade::writeMemory()
{ {
_bau.writeMemory(); _bau.writeMemory();
} }
void KnxFacade::loop() void KnxFacade::loop()
{ {
if (progMode() != _progLedState) if (progMode() != _progLedState)
{ {
_progLedState = progMode(); _progLedState = progMode();
if (_progLedState) if (_progLedState)
{ {
println("progmode on"); println("progmode on");
digitalWrite(knx.ledPin(), _ledPinActiveOn); digitalWrite(knx.ledPin(), _ledPinActiveOn);
} }
else else
{ {
println("progmode off"); println("progmode off");
digitalWrite(knx.ledPin(), HIGH - _ledPinActiveOn); digitalWrite(knx.ledPin(), HIGH - _ledPinActiveOn);
} }
} }
if (_toogleProgMode) if (_toogleProgMode)
{ {
progMode(!progMode()); progMode(!progMode());
_toogleProgMode = false; _toogleProgMode = false;
} }
_bau.loop(); _bau.loop();
} }
void KnxFacade::manufacturerId(uint16_t value) void KnxFacade::manufacturerId(uint16_t value)
{ {
_bau.deviceObject().manufacturerId(value); _bau.deviceObject().manufacturerId(value);
} }
void KnxFacade::bauNumber(uint32_t value) void KnxFacade::bauNumber(uint32_t value)
{ {
_bau.deviceObject().bauNumber(value); _bau.deviceObject().bauNumber(value);
} }
uint16_t KnxFacade::induvidualAddress() uint16_t KnxFacade::induvidualAddress()
{ {
return _bau.deviceObject().induvidualAddress(); return _bau.deviceObject().induvidualAddress();
} }
void KnxFacade::orderNumber(const char *value) void KnxFacade::orderNumber(const char *value)
{ {
_bau.deviceObject().orderNumber(value); _bau.deviceObject().orderNumber(value);
} }
void KnxFacade::hardwareType(uint8_t *value) void KnxFacade::hardwareType(uint8_t *value)
{ {
_bau.deviceObject().hardwareType(value); _bau.deviceObject().hardwareType(value);
} }
void KnxFacade::version(uint16_t value) void KnxFacade::version(uint16_t value)
{ {
_bau.deviceObject().version(value); _bau.deviceObject().version(value);
} }
void KnxFacade::start() void KnxFacade::start()
{ {
pinMode(_ledPin, OUTPUT); pinMode(_ledPin, OUTPUT);
digitalWrite(_ledPin, HIGH - _ledPinActiveOn); digitalWrite(_ledPin, HIGH - _ledPinActiveOn);
pinMode(_buttonPin, INPUT_PULLUP); pinMode(_buttonPin, INPUT_PULLUP);
attachInterrupt(_buttonPin, buttonUp, RISING); attachInterrupt(_buttonPin, buttonUp, RISING);
enabled(true); enabled(true);
} }
uint8_t *KnxFacade::paramData(uint32_t addr) uint8_t *KnxFacade::paramData(uint32_t addr)
{ {
if (!_bau.configured()) if (!_bau.configured())
return nullptr; return nullptr;
return _bau.parameters().data(addr); return _bau.parameters().data(addr);
} }
uint8_t KnxFacade::paramByte(uint32_t addr) uint8_t KnxFacade::paramByte(uint32_t addr)
{ {
if (!_bau.configured()) if (!_bau.configured())
return 0; return 0;
return _bau.parameters().getByte(addr); return _bau.parameters().getByte(addr);
} }
uint16_t KnxFacade::paramWord(uint32_t addr) uint16_t KnxFacade::paramWord(uint32_t addr)
{ {
if (!_bau.configured()) if (!_bau.configured())
return 0; return 0;
return _bau.parameters().getWord(addr); return _bau.parameters().getWord(addr);
} }
uint32_t KnxFacade::paramInt(uint32_t addr) uint32_t KnxFacade::paramInt(uint32_t addr)
{ {
if (!_bau.configured()) if (!_bau.configured())
return 0; return 0;
return _bau.parameters().getInt(addr); return _bau.parameters().getInt(addr);
} }
void KnxFacade::setSaveCallback(saveRestoreCallback func) void KnxFacade::setSaveCallback(saveRestoreCallback func)
{ {
_saveCallback = func; _saveCallback = func;
} }
void KnxFacade::setRestoreCallback(saveRestoreCallback func) void KnxFacade::setRestoreCallback(saveRestoreCallback func)
{ {
_restoreCallback = func; _restoreCallback = func;
} }
uint8_t *KnxFacade::save(uint8_t *buffer) uint8_t *KnxFacade::save(uint8_t *buffer)
{ {
if (_saveCallback != 0) if (_saveCallback != 0)
return _saveCallback(buffer); return _saveCallback(buffer);
return buffer; return buffer;
} }
uint8_t *KnxFacade::restore(uint8_t *buffer) uint8_t *KnxFacade::restore(uint8_t *buffer)
{ {
if (_restoreCallback != 0) if (_restoreCallback != 0)
return _restoreCallback(buffer); return _restoreCallback(buffer);
return buffer; return buffer;
} }
GroupObject &KnxFacade::getGroupObject(uint16_t goNr) GroupObject &KnxFacade::getGroupObject(uint16_t goNr)
{ {
return _bau.groupObjectTable().get(goNr); return _bau.groupObjectTable().get(goNr);
} }
void KnxFacade::restart(uint16_t individualAddress) void KnxFacade::restart(uint16_t individualAddress)
{ {
_bau.restartRequest(individualAddress); _bau.restartRequest(individualAddress);
} }