add support for turnouts
This commit is contained in:
38
turnout.cpp
Normal file
38
turnout.cpp
Normal 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());
|
||||
}
|
Reference in New Issue
Block a user