WIP: Making RFPowerView class
This commit is contained in:
@@ -2,53 +2,14 @@
|
||||
#define PACKET_PARSER_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <variant>
|
||||
|
||||
// Define packet types
|
||||
enum class PacketType {
|
||||
OPEN,
|
||||
CLOSE,
|
||||
STOP,
|
||||
FIELDS,
|
||||
FIELD_COMMAND,
|
||||
UNKNOWN
|
||||
};
|
||||
|
||||
enum class FieldType {
|
||||
VALUE,
|
||||
SET,
|
||||
FETCH,
|
||||
UNKNOWN
|
||||
};
|
||||
|
||||
struct Field {
|
||||
uint8_t identifier;
|
||||
FieldType type;
|
||||
bool hasValue;
|
||||
std::variant<std::monostate, uint8_t, uint16_t> value;
|
||||
};
|
||||
|
||||
struct FieldsParameters {
|
||||
std::vector<Field> fields;
|
||||
};
|
||||
|
||||
using PacketParameters = std::variant<std::monostate, FieldsParameters>;
|
||||
|
||||
|
||||
// Define Message structure
|
||||
struct Packet {
|
||||
uint16_t source;
|
||||
uint16_t destination;
|
||||
PacketType type;
|
||||
PacketParameters parameters;
|
||||
};
|
||||
#include "PacketTypes.h"
|
||||
|
||||
class PacketParser {
|
||||
public:
|
||||
PacketParser();
|
||||
~PacketParser();
|
||||
|
||||
bool parsePacket(const uint8_t *buffer, Packet& message);
|
||||
bool parsePacket(const uint8_t *buffer, Packet& packet);
|
||||
private:
|
||||
bool parseFields(const uint8_t *buffer, std::vector<Field>& fields);
|
||||
};
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#define CIRCULAR_BUFFER_INT_SAFE
|
||||
|
||||
#include <functional>
|
||||
#include <RF24.h>
|
||||
#include <CircularBuffer.h>
|
||||
#include "PacketCRC.h"
|
||||
@@ -22,8 +23,8 @@ public:
|
||||
void loop();
|
||||
void read();
|
||||
|
||||
void setPacketCallback(void (*callback)(const uint8_t *buffer));
|
||||
void setInvalidPacketCallback(void (*callback)(const uint8_t *buffer));
|
||||
void setPacketCallback(std::function<void(const uint8_t*)> callback);
|
||||
void setInvalidPacketCallback(std::function<void(const uint8_t*)> callback);
|
||||
|
||||
private:
|
||||
RF24 *radio;
|
||||
@@ -34,8 +35,8 @@ private:
|
||||
CircularBuffer<uint8_t*, EMPTY_BUFFER_COUNT> freeBuffers;
|
||||
CircularBuffer<uint8_t*, VALID_BUFFER_COUNT> receivedBuffers;
|
||||
|
||||
void (*packetCallback)(const uint8_t *buffer);
|
||||
void (*invalidPacketCallback)(const uint8_t *buffer);
|
||||
std::function<void(const uint8_t*)> packetCallback;
|
||||
std::function<void(const uint8_t*)> invalidPacketCallback;
|
||||
|
||||
bool isSanePacket(uint8_t *buffer);
|
||||
bool isValidPacket(uint8_t *buffer);
|
||||
|
||||
47
include/PacketTypes.h
Normal file
47
include/PacketTypes.h
Normal file
@@ -0,0 +1,47 @@
|
||||
#ifndef PACKET_TYPES_H
|
||||
#define PACKET_TYPES_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <variant>
|
||||
|
||||
// Define packet types
|
||||
enum class PacketType {
|
||||
OPEN,
|
||||
CLOSE,
|
||||
STOP,
|
||||
FIELDS,
|
||||
FIELD_COMMAND,
|
||||
UNKNOWN
|
||||
};
|
||||
|
||||
enum class FieldType {
|
||||
VALUE,
|
||||
SET,
|
||||
FETCH,
|
||||
UNKNOWN
|
||||
};
|
||||
|
||||
struct Field {
|
||||
uint8_t identifier;
|
||||
FieldType type;
|
||||
bool hasValue;
|
||||
std::variant<std::monostate, uint8_t, uint16_t> value;
|
||||
};
|
||||
|
||||
struct FieldsParameters {
|
||||
std::vector<Field> fields;
|
||||
};
|
||||
|
||||
using PacketParameters = std::variant<std::monostate, FieldsParameters>;
|
||||
|
||||
|
||||
// Define Message structure
|
||||
struct Packet {
|
||||
uint16_t source;
|
||||
uint16_t destination;
|
||||
PacketType type;
|
||||
PacketParameters parameters;
|
||||
};
|
||||
|
||||
|
||||
#endif // PACKET_TYPES_H
|
||||
38
include/RFPowerView.h
Normal file
38
include/RFPowerView.h
Normal file
@@ -0,0 +1,38 @@
|
||||
#ifndef RFPOWERVIEW_H
|
||||
#define RFPOWERVIEW_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <RF24.h>
|
||||
#include "PacketReceiver.h"
|
||||
#include "PacketParser.h"
|
||||
#include "PacketTypes.h"
|
||||
|
||||
#define DEFAULT_RF_CHANNEL (7) //this is the channel HD shades use
|
||||
#define DEFAULT_RF_DATARATE (RF24_1MBPS) //this is the speed HD shades use
|
||||
|
||||
class RFPowerView {
|
||||
public:
|
||||
RFPowerView(
|
||||
uint8_t cePin,
|
||||
uint8_t csPin,
|
||||
uint8_t irqPin,
|
||||
uint16_t rfID
|
||||
);
|
||||
|
||||
bool begin();
|
||||
void loop();
|
||||
void startListening();
|
||||
private:
|
||||
RF24 radio;
|
||||
PacketReceiver packetReceiver;
|
||||
PacketParser packetParser;
|
||||
uint8_t irqPin;
|
||||
uint8_t rfID[2];
|
||||
|
||||
void interruptHandler();
|
||||
|
||||
void processPacketBuffer(const uint8_t *buffer);
|
||||
void processInvalidPacketBuffer(const uint8_t *buffer);
|
||||
};
|
||||
|
||||
#endif // RFPOWERVIEW_H
|
||||
Reference in New Issue
Block a user