mirror of
https://github.com/lowobservable/coax.git
synced 2026-02-27 01:19:52 +00:00
45 lines
970 B
C++
45 lines
970 B
C++
#pragma once
|
|
|
|
#define ERROR_RX_RECEIVER_ACTIVE -5
|
|
#define ERROR_RX_TIMEOUT -2
|
|
#define ERROR_RX_OVERFLOW -3
|
|
|
|
class NewCoaxDataBus;
|
|
|
|
enum NewCoaxReceiverState { Disabled, Idle, Receiving, Received };
|
|
|
|
class NewCoaxReceiver
|
|
{
|
|
public:
|
|
NewCoaxReceiver(NewCoaxDataBus &dataBus) : _dataBus(dataBus) { };
|
|
|
|
void begin();
|
|
void enable();
|
|
void disable();
|
|
int receive(uint16_t *buffer, size_t bufferSize, uint16_t timeout);
|
|
void activeInterrupt();
|
|
void dataAvailableInterrupt();
|
|
void errorInterrupt();
|
|
|
|
private:
|
|
NewCoaxDataBus &_dataBus;
|
|
volatile NewCoaxReceiverState _state = Disabled;
|
|
volatile uint16_t _error;
|
|
volatile uint16_t *_buffer;
|
|
volatile size_t _bufferSize;
|
|
volatile int _bufferCount;
|
|
|
|
void reset();
|
|
uint16_t read();
|
|
};
|
|
|
|
class NewCoaxDataBus
|
|
{
|
|
public:
|
|
void setMode(int mode);
|
|
uint16_t read();
|
|
void write(uint16_t word);
|
|
uint16_t encode(uint16_t word);
|
|
uint16_t decode(uint16_t word);
|
|
};
|