knx/src/knx_facade.cpp

229 lines
3.9 KiB
C++
Raw Normal View History

2018-03-20 23:56:42 +01:00
#include "knx_facade.h"
2019-05-27 21:41:04 +02:00
#include "knx/bits.h"
2018-11-07 00:32:36 +01:00
#ifdef ARDUINO_ARCH_SAMD
SamdPlatform platform;
Bau07B0 bau(platform);
2019-05-27 21:41:04 +02:00
#elif ARDUINO_ARCH_ESP8266
2018-11-07 00:32:36 +01:00
EspPlatform platform;
Bau57B0 bau(platform);
2019-05-27 21:41:04 +02:00
#elif __linux__ //linux
// noops on linux
#define digitalWrite(a, b)
#define pinMode(a, b)
#define attachInterrupt(a, b, c)
2018-11-07 00:32:36 +01:00
#endif
2018-03-20 23:56:42 +01:00
2019-05-27 21:41:04 +02:00
#ifndef __linux__
KnxFacade knx(bau);
2019-07-08 20:00:36 +02:00
bool _toogleProgMode = false;
ICACHE_RAM_ATTR void buttonUp()
{
2019-07-08 20:00:36 +02:00
_toogleProgMode = true;
}
2019-05-27 21:41:04 +02:00
#endif
2019-05-27 21:41:04 +02:00
KnxFacade::KnxFacade(BauSystemB &bau) : _bau(bau)
2018-03-20 23:56:42 +01:00
{
2018-03-29 23:44:53 +02:00
manufacturerId(0xfa);
_bau.addSaveRestore(this);
2018-03-20 23:56:42 +01:00
}
bool KnxFacade::enabled()
{
return _bau.enabled();
}
void KnxFacade::enabled(bool value)
{
_bau.enabled(true);
}
bool KnxFacade::progMode()
{
return _bau.deviceObject().progMode();
}
void KnxFacade::progMode(bool value)
{
2019-05-27 21:41:04 +02:00
if (value)
{
println("progmode on");
digitalWrite(knx.ledPin(), _ledPinActiveOn);
}
else
{
println("progmode off");
digitalWrite(knx.ledPin(), HIGH - _ledPinActiveOn);
}
2018-03-20 23:56:42 +01:00
_bau.deviceObject().progMode(value);
}
bool KnxFacade::configured()
{
return _bau.configured();
}
2019-05-27 21:41:04 +02:00
uint32_t KnxFacade::ledPinActiveOn()
{
return _ledPinActiveOn;
}
2019-05-27 21:41:04 +02:00
void KnxFacade::ledPinActiveOn(uint32_t value)
{
_ledPinActiveOn = value;
}
2018-04-09 23:58:35 +02:00
uint32_t KnxFacade::ledPin()
{
return _ledPin;
}
void KnxFacade::ledPin(uint32_t value)
{
_ledPin = value;
}
uint32_t KnxFacade::buttonPin()
{
return _buttonPin;
}
void KnxFacade::buttonPin(uint32_t value)
{
_buttonPin = value;
}
2018-03-20 23:56:42 +01:00
void KnxFacade::readMemory()
{
_bau.readMemory();
}
void KnxFacade::writeMemory()
{
_bau.writeMemory();
}
2018-03-20 23:56:42 +01:00
void KnxFacade::loop()
{
2019-07-08 20:00:36 +02:00
if(_toogleProgMode)
{
knx.progMode(!knx.progMode());
_toogleProgMode = false;
}
2018-03-20 23:56:42 +01:00
_bau.loop();
}
void KnxFacade::manufacturerId(uint16_t value)
{
_bau.deviceObject().manufacturerId(value);
}
void KnxFacade::bauNumber(uint32_t value)
{
_bau.deviceObject().bauNumber(value);
}
2019-05-27 21:41:04 +02:00
uint16_t KnxFacade::induvidualAddress()
{
return _bau.deviceObject().induvidualAddress();
}
void KnxFacade::orderNumber(const char *value)
2018-03-20 23:56:42 +01:00
{
_bau.deviceObject().orderNumber(value);
}
2019-05-27 21:41:04 +02:00
void KnxFacade::hardwareType(uint8_t *value)
2018-03-20 23:56:42 +01:00
{
_bau.deviceObject().hardwareType(value);
}
void KnxFacade::version(uint16_t value)
{
_bau.deviceObject().version(value);
}
2018-04-09 23:58:35 +02:00
void KnxFacade::start()
{
pinMode(_ledPin, OUTPUT);
2019-05-27 21:41:04 +02:00
digitalWrite(_ledPin, HIGH - _ledPinActiveOn);
pinMode(_buttonPin, INPUT_PULLUP);
2019-05-27 21:41:04 +02:00
attachInterrupt(_buttonPin, buttonUp, RISING);
enabled(true);
2018-04-09 23:58:35 +02:00
}
2019-05-27 21:41:04 +02:00
uint8_t *KnxFacade::paramData(uint32_t addr)
2018-03-20 23:56:42 +01:00
{
if (!_bau.configured())
return nullptr;
2019-05-27 21:41:04 +02:00
2018-03-20 23:56:42 +01:00
return _bau.parameters().data(addr);
}
uint8_t KnxFacade::paramByte(uint32_t addr)
{
if (!_bau.configured())
return 0;
return _bau.parameters().getByte(addr);
}
uint16_t KnxFacade::paramWord(uint32_t addr)
{
if (!_bau.configured())
return 0;
return _bau.parameters().getWord(addr);
}
uint32_t KnxFacade::paramInt(uint32_t addr)
{
if (!_bau.configured())
return 0;
return _bau.parameters().getInt(addr);
}
2018-09-04 21:12:50 +02:00
void KnxFacade::setSaveCallback(saveRestoreCallback func)
{
_saveCallback = func;
}
void KnxFacade::setRestoreCallback(saveRestoreCallback func)
{
_restoreCallback = func;
}
2019-05-27 21:41:04 +02:00
uint8_t *KnxFacade::save(uint8_t *buffer)
2018-09-04 21:12:50 +02:00
{
if (_saveCallback != 0)
return _saveCallback(buffer);
2019-05-27 21:41:04 +02:00
2018-09-04 21:12:50 +02:00
return buffer;
}
2019-05-27 21:41:04 +02:00
uint8_t *KnxFacade::restore(uint8_t *buffer)
2018-09-04 21:12:50 +02:00
{
if (_restoreCallback != 0)
return _restoreCallback(buffer);
2019-05-27 21:41:04 +02:00
2018-09-04 21:12:50 +02:00
return buffer;
}
2019-05-27 21:41:04 +02:00
GroupObject &KnxFacade::getGroupObject(uint16_t goNr)
{
return _bau.groupObjectTable().get(goNr);
}
2019-06-24 22:22:56 +02:00
void KnxFacade::restart(uint16_t individualAddress)
{
_bau.restartRequest(individualAddress);
}