Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
GridConnect.hxx
Go to the documentation of this file.
1
35#ifndef _UTILS_GRIDCONNECT_HXX_
36#define _UTILS_GRIDCONNECT_HXX_
37
38#include <sys/types.h>
39#include <cstdint>
40
41#include "can_frame.h"
42#include "utils/macros.h"
43
48{
49protected:
53 {
54 }
55
59 {
60 }
61
68 static ssize_t write(int fd, const void *data, size_t len)
69 {
70 return write_generic(fd, data, len, false);
71 }
72
79 static ssize_t write_double(int fd, const void *data, size_t len)
80 {
81 return write_generic(fd, data, len, true);
82 }
83
90 static ssize_t read(int fd, void *data, size_t len)
91 {
92 return read_generic(fd, data, len, false);
93 }
94
101 static ssize_t read_double(int fd, void *data, size_t len)
102 {
103 return read_generic(fd, data, len, true);
104 }
105
106private:
114 static ssize_t write_generic(int fd, const void *data, size_t len, bool doub);
115
123 static ssize_t read_generic(int fd, void *data, size_t len, bool doub);
124
129 static ssize_t encode(struct can_frame *frame, unsigned char buf[]);
130
135 static char nibble_to_ascii(int nibble)
136 {
137 nibble &= 0xf;
138
139 if (nibble < 10)
140 {
141 return ('0' + nibble);
142 }
143
144 return ('A' + (nibble - 10));
145 }
146
152 static int ascii_pair_to_byte(const char *pair)
153 {
154 unsigned char* data = (unsigned char*)pair;
155 int result;
156
157 if (data[1] < 'A')
158 {
159 result = data[1] - '0';
160 }
161 else
162 {
163 result = data[1] - 'A' + 10;
164 }
165
166 if (data[0] < 'A')
167 {
168 result += (data[0] - '0') << 4;
169 }
170 else
171 {
172 result += (data[0] - 'A' + 10) << 4;
173 }
174
175 return result;
176 }
177
179};
180
181#endif /* _UTILS_GRIDCONNECT_HXX_ */
182
This class provides a means to write CAN data to an a file descriptor in Grid Connect format.
static int ascii_pair_to_byte(const char *pair)
Take a pair of ASCII characters and convert them to a byte value.
static ssize_t write_generic(int fd, const void *data, size_t len, bool doub)
Write a CAN packet to Grid Connect interface in single or double format.
GridConnect()
Constructor.
static char nibble_to_ascii(int nibble)
Builds an ASCII character representation of a nibble value.
static ssize_t write_double(int fd, const void *data, size_t len)
Write a CAN packet to Grid Connect interface in double format.
static ssize_t write(int fd, const void *data, size_t len)
Write a CAN packet to Grid Connect interface in single format.
static ssize_t read(int fd, void *data, size_t len)
Read a CAN packet to Grid Connect interface in single format.
static ssize_t encode(struct can_frame *frame, unsigned char buf[])
~GridConnect()
Destructor.
static ssize_t read_double(int fd, void *data, size_t len)
Read a CAN packet to Grid Connect interface in double format.
static ssize_t read_generic(int fd, void *data, size_t len, bool doub)
Read a CAN packet to Grid Connect interface in single or double format.
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Removes default copy-constructor and assignment added by C++.
Definition macros.h:171