xrp style wpilib comms
Loading...
Searching...
No Matches
xrp_servo.h
Go to the documentation of this file.
1#pragma once
2#define XRP_TAG_SERVO 0X13
3#include "message_type.h"
4
5typedef struct {
6 uint8_t id;
7 float value; // 0 to 1
9
10template <>
12 static constexpr uint8_t value = XRP_TAG_SERVO;
13 static constexpr bool hasId = true;
14};
15
16#include "byteutils.h"
17
18class XrpServo : public MessageType {
19public:
21 : data({ 0, 0.0f })
22 {
23 }
24 XrpServo(uint8_t id, float value)
25 : data({ id, value })
26 {
27 }
28
29 int getTag() override
30 {
31 return XRP_TAG_SERVO;
32 }
33 bool hasId() override
34 {
35 return true;
36 }
37 uint8_t getId() override
38 {
39 return data.id;
40 }
41 void setData(const void* dataPtr) override
42 {
43 if (dataPtr != nullptr) {
44 data = *static_cast<const xrp_servo_t*>(dataPtr);
45 }
46 }
47 void* getData() override
48 {
49 return &data;
50 }
51 int toNetworkBuffer(char* buffer, int pos, int end) override
52 {
53 return 0; // not implemented, it doesn't make much sense to send a servo command to the computer from the robot
54 }
55 int fromNetworkBuffer(char* buf, int pos, int end) override
56 {
57 if (end - pos < 6) {
58 return 0;
59 }
60 // buf[pos] is the tag, which should have already been confirmed to be XRP_TAG_MOTOR
61 int channelID = (uint8_t)buf[pos + 1];
62 float value = networkToFloat(buf, pos + 2);
63 data.id = channelID;
64 data.value = value;
65 return 6; // 1 byte for tag, 1 byte for id, 4 bytes for value
66 }
67
68 // the default destructor is fine
69
70protected:
72};
float networkToFloat(char *buf, int offset)
Definition byteutils.cpp:9
Definition message_type.h:3
Definition xrp_servo.h:18
XrpServo(uint8_t id, float value)
Definition xrp_servo.h:24
int fromNetworkBuffer(char *buf, int pos, int end) override
Definition xrp_servo.h:55
XrpServo()
Definition xrp_servo.h:20
void setData(const void *dataPtr) override
Definition xrp_servo.h:41
xrp_servo_t data
Definition xrp_servo.h:71
uint8_t getId() override
Definition xrp_servo.h:37
int toNetworkBuffer(char *buffer, int pos, int end) override
Definition xrp_servo.h:51
void * getData() override
Definition xrp_servo.h:47
bool hasId() override
Definition xrp_servo.h:33
int getTag() override
Definition xrp_servo.h:29
Definition message_type.h:18
static constexpr uint8_t value
Definition message_type.h:19
Definition xrp_servo.h:5
uint8_t id
Definition xrp_servo.h:6
float value
Definition xrp_servo.h:7