WIP: Making RFPowerView class

This commit is contained in:
2023-12-22 12:05:24 +11:00
parent c84c2dfbdc
commit 9d507fdb0b
7 changed files with 173 additions and 63 deletions

View File

@@ -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);
};

View File

@@ -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
View 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
View 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