xrp style wpilib comms
Loading...
Searching...
No Matches
xrp_dio.h
Go to the documentation of this file.
1#pragma once
2#define XRP_TAG_DIO 0x14
3#include "message_type.h"
4
5typedef struct {
6 uint8_t id;
7 uint8_t value; // 0 = False, 1 = True
9
10template <>
12 static constexpr uint8_t value = XRP_TAG_DIO;
13 static constexpr bool hasId = true;
14};
15
16#include "byteutils.h"
17
18class XrpDio : public MessageType {
19public:
21 : data({ 0, 0 })
22 {
23 }
24
25 XrpDio(uint8_t id, uint8_t value)
26 : data({ id, value })
27 {
28 }
29
30 int getTag() override
31 {
32 return XRP_TAG_DIO;
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_dio_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 < 4) {
55 return 0;
56 }
57 buffer[pos] = 3; // size excluding size byte itself
58 buffer[pos + 1] = XRP_TAG_DIO;
59 buffer[pos + 2] = data.id;
60 buffer[pos + 3] = (data.value == 1);
61 return 4; // 1 for tag, 1 for id, 1 for value
62 }
63 int fromNetworkBuffer(char* buf, int pos, int end) override
64 {
65 if (end - pos < 3) {
66 return 0;
67 }
68 // buf[pos] is the tag, which should have already been confirmed to be XRP_TAG_DIO
69 data.id = (uint8_t)buf[pos + 1];
70 data.value = (uint8_t)buf[pos + 2];
71 return 3; // 1 byte for tag, 1 byte for id, 1 byte for value
72 }
73
74 // default destructor is fine
75
76protected:
78};
Definition message_type.h:3
Definition xrp_dio.h:18
bool hasId() override
Definition xrp_dio.h:34
xrp_dio_t data
Definition xrp_dio.h:77
XrpDio(uint8_t id, uint8_t value)
Definition xrp_dio.h:25
XrpDio()
Definition xrp_dio.h:20
void * getData() override
Definition xrp_dio.h:48
uint8_t getId() override
Definition xrp_dio.h:38
int getTag() override
Definition xrp_dio.h:30
int fromNetworkBuffer(char *buf, int pos, int end) override
Definition xrp_dio.h:63
int toNetworkBuffer(char *buffer, int pos, int end) override
Definition xrp_dio.h:52
void setData(const void *dataPtr) override
Definition xrp_dio.h:42
Definition message_type.h:18
static constexpr uint8_t value
Definition message_type.h:19
Definition xrp_dio.h:5
uint8_t value
Definition xrp_dio.h:7
uint8_t id
Definition xrp_dio.h:6