52 lines
785 B
C++
52 lines
785 B
C++
#include "signal.h"
|
|
|
|
Signal::Signal(uint8_t address, uint8_t subaddress, uint8_t type): Item(address), _subaddress(subaddress), _type(type)
|
|
{
|
|
}
|
|
|
|
void Signal::setState(uint8_t state)
|
|
{
|
|
_state = state;
|
|
if(!directSendBlock)
|
|
sendData();
|
|
}
|
|
|
|
uint8_t Signal::getState()
|
|
{
|
|
return _state;
|
|
}
|
|
|
|
uint8_t Signal::getSubaddress()
|
|
{
|
|
return _subaddress;
|
|
}
|
|
uint16_t Signal::getPacket()
|
|
{
|
|
uint16_t data;
|
|
if(!(_type & 1))
|
|
{
|
|
data = _state | _subaddress << 6;
|
|
}
|
|
else
|
|
{
|
|
data = 0;
|
|
data |= ((_state == GO) << 9) | ((_state == GO) << 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 Signal::sendData()
|
|
{
|
|
sendRaw(getPacket());
|
|
}
|
|
|
|
uint8_t Signal::getType()
|
|
{
|
|
return _type;
|
|
}
|