96 lines
1.7 KiB
C++
96 lines
1.7 KiB
C++
#include "item.h"
|
|
#include <stdlib.h>
|
|
|
|
static volatile unsigned char *_port = &PORTD;
|
|
|
|
Item::Item(const uint8_t address): _address(address)
|
|
{
|
|
}
|
|
|
|
void Item::setAddress(const uint8_t address)
|
|
{
|
|
_address = address;
|
|
}
|
|
|
|
uint8_t Item::getAddress()
|
|
{
|
|
return _address;
|
|
}
|
|
|
|
void Item::off()
|
|
{
|
|
writePin(_port, _pinHighA, false);
|
|
writePin(_port, _pinHighB, false);
|
|
writePin(_port, _pinLowA, true);
|
|
writePin(_port, _pinLowB, true);
|
|
}
|
|
|
|
void Item::setOutput(const uint8_t state)
|
|
{
|
|
if(state == HIGH)
|
|
{
|
|
off();
|
|
_delay_us(3);
|
|
writePin(_port, _pinHighA, true);
|
|
writePin(_port, _pinLowB, false);
|
|
}
|
|
else if (state == LOW)
|
|
{
|
|
off();
|
|
_delay_us(3);
|
|
writePin(_port, _pinHighB, true);
|
|
writePin(_port, _pinLowA, false);
|
|
}
|
|
else
|
|
{
|
|
off();
|
|
}
|
|
}
|
|
|
|
void Item::sendBit(const bool bit)
|
|
{
|
|
if(bit)
|
|
{
|
|
setOutput(HIGH);
|
|
_delay_us(170);
|
|
setOutput(LOW);
|
|
_delay_us(25);
|
|
}
|
|
else
|
|
{
|
|
setOutput(HIGH);
|
|
_delay_us(20);
|
|
setOutput(LOW);
|
|
_delay_us(175);
|
|
}
|
|
}
|
|
|
|
void Item::sendAddress(uint8_t address)
|
|
{
|
|
for(uint8_t i = 0; i < 8; i++)
|
|
{
|
|
sendBit(address & (1 << i));
|
|
}
|
|
}
|
|
|
|
|
|
void Item::sendRawAddr(const uint8_t address, const uint16_t data, bool single)
|
|
{
|
|
for(uint8_t j = 0; j < SEND_COUNT; j++)
|
|
{
|
|
sendAddress(address);
|
|
for(uint8_t i = 0; i < 10; i++)
|
|
{
|
|
sendBit(data & (1 << i));
|
|
}
|
|
if(single || SEND_COUNT == 1)
|
|
return;
|
|
_delay_ms(1);
|
|
}
|
|
}
|
|
|
|
void Item::sendRaw(const uint16_t data, bool single)
|
|
{
|
|
sendRawAddr(_address, data, single);
|
|
}
|