Files
MarklinController/turnout.cpp
2022-03-15 22:39:13 +01:00

40 lines
670 B
C++

#include "turnout.h"
Turnout::Turnout(uint8_t address, uint8_t subaddress): Item(address), _subaddress(subaddress)
{
}
void Turnout::setDirection(uint8_t direction)
{
_direction = direction;
if(!directSendBlock)
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(bool single)
{
sendRaw(getPacket(), single);
}