4 const uint8_t*
popByte(uint8_t& b,
const uint8_t* data)
12 void printHex(
const char* suffix,
const uint8_t* data,
size_t length,
bool newline)
16 for (
size_t i = 0; i < length; i++)
34 const uint8_t*
popWord(uint16_t& w,
const uint8_t* data)
41 const uint8_t*
popInt(uint32_t& i,
const uint8_t* data)
48 const uint8_t*
popByteArray(uint8_t* dst, uint32_t size,
const uint8_t* data)
50 for (uint32_t i = 0; i < size; i++)
66 data[0] = ((w >> 8) & 0xff);
72 uint8_t*
pushInt(uint32_t i, uint8_t* data)
74 data[0] = ((i >> 24) & 0xff);
75 data[1] = ((i >> 16) & 0xff);
76 data[2] = ((i >> 8) & 0xff);
82 uint8_t*
pushByteArray(
const uint8_t* src, uint32_t size, uint8_t* data)
84 for (uint32_t i = 0; i < size; i++)
93 return (data[0] << 8) + data[1];
98 return (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3];
103 toByteArray[0] = ((num >> 40) & 0xff);
104 toByteArray[1] = ((num >> 32) & 0xff);
105 toByteArray[2] = ((num >> 24) & 0xff);
106 toByteArray[3] = ((num >> 16) & 0xff);
107 toByteArray[4] = ((num >> 8) & 0xff);
108 toByteArray[5] = (num & 0xff);
115 for (uint8_t i = 0; i < 6; i++)
117 l = (l << 8) + data[i];
135 uint32_t polynom = 0x1021;
137 uint32_t result = 0xffff;
139 for (uint32_t i = 0; i < 8 * ((uint32_t)length + 2); i++)
143 nextBit = ((i / 8) < length) ? ((input[i / 8] >> (7 - (i % 8))) & 0x1) : 0;
146 if ((result & 0x10000) != 0)
150 return result & 0xffff;
157 uint32_t pn = 0x13d65;
162 for (uint32_t i = 0; i < length; i++)
164 uint8_t bite = input[i] & 0xff;
166 for (uint8_t b = 8; b -- > 0;)
168 bool bit = ((bite >> b) & 1) == 1;
169 bool one = (crc >> 15 & 1) == 1;
177 return (~crc) & 0xffff;
184 static void print_binary(
unsigned long long n)
193 char binary_string[65];
197 binary_string[i++] = (n % 2) +
'0';
200 binary_string[i] =
'\0';
203 for (
int j = 0; j < i / 2; ++j)
205 char temp = binary_string[j];
206 binary_string[j] = binary_string[i - j - 1];
207 binary_string[i - j - 1] = temp;
209 printf(
"%s", binary_string);
222 void print(
unsigned char b,
int base) {
225 }
else if (base == DEC) {
226 printf(
"%u", (
unsigned int)b);
227 }
else if (base == HEX) {
228 printf(
"%x", (
unsigned int)b);
229 }
else if (base == OCT) {
230 printf(
"%o", (
unsigned int)b);
237 }
else if (base == DEC) {
239 }
else if (base == HEX) {
241 }
else if (base == OCT) {
246 void print(
unsigned int n,
int base) {
249 }
else if (base == DEC) {
251 }
else if (base == HEX) {
253 }
else if (base == OCT) {
261 }
else if (base == DEC) {
263 }
else if (base == HEX) {
265 }
else if (base == OCT) {
270 void print(
unsigned long n,
int base) {
273 }
else if (base == DEC) {
275 }
else if (base == HEX) {
277 }
else if (base == OCT) {
285 }
else if (base == DEC) {
287 }
else if (base == HEX) {
289 }
else if (base == OCT) {
294 void print(
unsigned long long n,
int base) {
297 }
else if (base == DEC) {
299 }
else if (base == HEX) {
301 }
else if (base == OCT) {
354 void println(
unsigned long long num,
int base) {
uint16_t crc16Dnp(uint8_t *input, uint16_t length)
const uint8_t * popByte(uint8_t &b, const uint8_t *data)
uint8_t * pushInt(uint32_t i, uint8_t *data)
void printHex(const char *suffix, const uint8_t *data, size_t length, bool newline)
uint8_t * pushByteArray(const uint8_t *src, uint32_t size, uint8_t *data)
const uint8_t * popByteArray(uint8_t *dst, uint32_t size, const uint8_t *data)
void sixBytesFromUInt64(uint64_t num, uint8_t *toByteArray)
uint8_t * pushWord(uint16_t w, uint8_t *data)
uint16_t getWord(const uint8_t *data)
void print(const char str[])
uint8_t * pushByte(uint8_t b, uint8_t *data)
const uint8_t * popInt(uint32_t &i, const uint8_t *data)
uint16_t crc16Ccitt(uint8_t *input, uint16_t length)
uint64_t sixBytesToUInt64(uint8_t *data)
uint32_t getInt(const uint8_t *data)
const uint8_t * popWord(uint16_t &w, const uint8_t *data)