xrp style wpilib comms
Loading...
Searching...
No Matches
xrp_analog.h
Go to the documentation of this file.
1#pragma once
2#define XRP_TAG_ANALOG 0x15
3#include "message_type.h"
4
5typedef struct {
6 uint8_t id;
7 float value; // Analog value, like voltage
9
10template <>
12 static constexpr uint8_t value = XRP_TAG_ANALOG;
13 static constexpr bool hasId = true;
14};
15
16#include "byteutils.h"
17
18class XrpAnalog : public MessageType {
19public:
21 : data({ 0, 0.0f })
22 {
23 }
24
25 XrpAnalog(uint8_t id, float value)
26 : data({ id, value })
27 {
28 }
29
30 int getTag() override
31 {
32 return XRP_TAG_ANALOG;
33 }
34 bool hasId() override
35 {
36 return true;
37 }
38 uint8_t getId() override
39 {
40 return data.id;
41 }
42 void setData(const void* dataPtr) override
43 {
44 if (dataPtr != nullptr) {
45 data = *static_cast<const xrp_analog_t*>(dataPtr);
46 }
47 }
48 void* getData() override
49 {
50 return &data;
51 }
52 int toNetworkBuffer(char* buffer, int pos, int end) override
53 {
54 if (end - pos < 7) {
55 return 0;
56 }
57 buffer[pos] = 6; // size excluding size byte itself
58 buffer[pos + 1] = XRP_TAG_ANALOG;
59 buffer[pos + 2] = data.id;
60 floatToNetwork(data.value, buffer, pos + 3);
61 return 7; // 1 for size, 1 for tag, 1 for id, 4 for value
62 }
63 int fromNetworkBuffer(char* buf, int pos, int end) override
64 {
65 if (end - pos < 6) {
66 return 0;
67 }
68 // buf[pos] is the tag, which should have already been confirmed to be XRP_TAG_ANALOG
69 data.id = (uint8_t)buf[pos + 1];
70 data.value = networkToFloat(buf, pos + 2);
71 return 6; // 1 byte for tag, 1 for id, 4 for value
72 }
73
74 // default destructor is fine
75
76protected:
78};
float networkToFloat(char *buf, int offset)
Definition byteutils.cpp:9
void floatToNetwork(float num, char *buf, int offset)
Definition byteutils.cpp:44
Definition message_type.h:3
Definition xrp_analog.h:18
int toNetworkBuffer(char *buffer, int pos, int end) override
Definition xrp_analog.h:52
xrp_analog_t data
Definition xrp_analog.h:77
int getTag() override
Definition xrp_analog.h:30
uint8_t getId() override
Definition xrp_analog.h:38
int fromNetworkBuffer(char *buf, int pos, int end) override
Definition xrp_analog.h:63
bool hasId() override
Definition xrp_analog.h:34
XrpAnalog()
Definition xrp_analog.h:20
XrpAnalog(uint8_t id, float value)
Definition xrp_analog.h:25
void setData(const void *dataPtr) override
Definition xrp_analog.h:42
void * getData() override
Definition xrp_analog.h:48
Definition message_type.h:18
static constexpr uint8_t value
Definition message_type.h:19
Definition xrp_analog.h:5
float value
Definition xrp_analog.h:7
uint8_t id
Definition xrp_analog.h:6