xrp style wpilib comms
Loading...
Searching...
No Matches
xrp_encoder.h
Go to the documentation of this file.
1#pragma once
2#define XRP_TAG_ENCODER 0x18
3#include "message_type.h"
4
5typedef struct {
6 uint8_t id;
7 int32_t count;
8 int32_t period;
9 int32_t divisor;
11
12template <>
14 static constexpr uint8_t value = XRP_TAG_ENCODER;
15 static constexpr bool hasId = true;
16};
17
18#include "byteutils.h"
19
20class XRPEncoder : public MessageType {
21public:
23 : data({ 0, 0, 0, 1 }) // Initialize with default values
24 {
25 }
26
27 XRPEncoder(uint8_t id, int32_t count, int32_t period, int32_t divisor)
28 : data({ id, count, period, divisor })
29 {
30 }
31
32 int getTag() override
33 {
34 return XRP_TAG_ENCODER;
35 }
36
37 bool hasId() override
38 {
39 return true;
40 }
41
42 uint8_t getId() override
43 {
44 return data.id;
45 }
46
47 void setData(const void* dataPtr) override
48 {
49 if (dataPtr != nullptr) {
50 data = *static_cast<const xrp_encoder_t*>(dataPtr);
51 }
52 }
53
54 void* getData() override
55 {
56 return &data;
57 }
58
59 int toNetworkBuffer(char* buffer, int pos, int end) override
60 {
61 if (end - pos < 15) {
62 return 0;
63 }
64 buffer[pos] = 14; // size excluding size byte itself
65 buffer[pos + 1] = XRP_TAG_ENCODER;
66 buffer[pos + 2] = data.id;
67 int32ToNetwork(data.count, buffer, pos + 3);
68 int32ToNetwork(data.period, buffer, pos + 7);
69 int32ToNetwork(data.divisor, buffer, pos + 11);
70 return 15; // 1 for size, 1 for tag, 1 for id, 4 for count, 4 for period, 4 for divisor
71 }
72 int fromNetworkBuffer(char* buf, int pos, int end) override
73 {
74 // it doesn't make sense to receive an encoder reading from the computer
75 return 0;
76 // if (end - pos < 14) {
77 // return 0;
78 // }
79 // // buf[pos] is the tag, which should have already been confirmed to be XRP_TAG_ENCODER
80 // data.id = (uint8_t)buf[pos + 1];
81 // data.count = networkToInt32(buf, pos + 2);
82 // data.period = networkToInt32(buf, pos + 6);
83 // data.divisor = networkToInt32(buf, pos + 10);
84 // return 14; // size of the message
85 }
86
87 // default destructor is fine
88protected:
90};
void int32ToNetwork(int32_t num, char *buf, int offset)
Definition byteutils.cpp:70
Definition message_type.h:3
Definition xrp_encoder.h:20
bool hasId() override
Definition xrp_encoder.h:37
int toNetworkBuffer(char *buffer, int pos, int end) override
Definition xrp_encoder.h:59
void setData(const void *dataPtr) override
Definition xrp_encoder.h:47
void * getData() override
Definition xrp_encoder.h:54
int getTag() override
Definition xrp_encoder.h:32
xrp_encoder_t data
Definition xrp_encoder.h:89
int fromNetworkBuffer(char *buf, int pos, int end) override
Definition xrp_encoder.h:72
XRPEncoder()
Definition xrp_encoder.h:22
XRPEncoder(uint8_t id, int32_t count, int32_t period, int32_t divisor)
Definition xrp_encoder.h:27
uint8_t getId() override
Definition xrp_encoder.h:42
Definition message_type.h:18
static constexpr uint8_t value
Definition message_type.h:19
Definition xrp_encoder.h:5
int32_t count
Definition xrp_encoder.h:7
uint8_t id
Definition xrp_encoder.h:6
int32_t period
Definition xrp_encoder.h:8
int32_t divisor
Definition xrp_encoder.h:9