add support for turnouts
This commit is contained in:
parent
0b528fbf1e
commit
8a849fd732
6 changed files with 238 additions and 29 deletions
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());
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue