add support for turnouts

This commit is contained in:
2022-01-31 21:10:52 +01:00
parent 0b528fbf1e
commit 8a849fd732
6 changed files with 238 additions and 29 deletions

38
turnout.cpp Normal file
View File

@ -0,0 +1,38 @@
#include "turnout.h"
Turnout::Turnout(uint8_t address, uint8_t subaddress): Item(address), _subaddress(subaddress)
{
}
void Turnout::setDirection(uint8_t direction)
{
_direction = direction;
sendData();
}
uint8_t Turnout::getDirection()
{
return _direction;
}
uint8_t Turnout::getSubaddress()
{
return _subaddress;
}
uint16_t Turnout::getPacket()
{
uint16_t data = 0;
data |= (_direction << 9) | (_direction << 8);
for (uint8_t i = 0; i < 2; ++i)
{
uint8_t bit = (_subaddress & (1 << i)) >> i;
data |= (bit << (7-i*2)) | (bit << (6-i*2));
}
return data;
}
void Turnout::sendData()
{
sendRaw(getPacket());
}