SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
SensorWireHelper.cpp
Go to the documentation of this file.
1
30#include "SensorBuildOpt.h"
31#if !SENSORLIB_EXCLUDE_WIRE_HELPER
32
33#include "SensorWireHelper.h"
34
35#if defined(ARDUINO)
36
37
38// regdump does not call Wire.begin, you need to call it before using regdump
39int SensorWireHelper::regdump(TwoWire &w, Stream &serial, uint8_t devAddr, uint8_t start, uint8_t length)
40{
41 uint8_t *buffer = (uint8_t *)malloc(length);
42 if (!buffer) return -1;
43 w.beginTransmission(devAddr);
44 w.write(start);
45 if (w.endTransmission() != 0) {
46 free(buffer);
47 return -1;
48 }
49 size_t len = w.requestFrom(devAddr, length);
50 if (length != len) {
51 free(buffer);
52 return -1;
53 }
54 w.readBytes(buffer, length);
55 hexdump(buffer, length, serial);
56 free(buffer);
57 return 0;
58}
59
60
61
62void SensorWireHelper::dumpDevices(TwoWire &w, Stream &serial, int first, int last)
63{
64 int i, j;
65 int ret;
66 serial.println(" 0 1 2 3 4 5 6 7 8 9 a b c d e f");
67 for (i = 0; i < 128; i += 16) {
68 if (i < 16) {
69 serial.print("0");
70 }
71 serial.print(i, HEX);
72 serial.print(": ");
73 for (j = 0; j < 16; j++) {
74 /* Skip unwanted addresses */
75 if (i + j < first || i + j > last) {
76 serial.print(" ");
77 continue;
78 }
79
80 w.beginTransmission(i + j);
81 ret = w.endTransmission();
82
83 if (ret != 0) {
84 serial.print("-- ");
85 } else {
86 if (i < 16) {
87 serial.print("0");
88 }
89 serial.print(i + j, HEX);
90 serial.print(" ");
91 }
92 }
93 serial.println();
94 }
95}
96
97
98void SensorWireHelper::hexdump(uint8_t *data, size_t len, Stream &serial)
99{
100 size_t rem_len = len;
101 for (size_t i = 0; i < len; i += 16) {
102 char str[80];
103 snprintf(str, 80, "%07x ", i);
104 size_t line_len = 16;
105 if (rem_len < line_len) {
106 line_len = rem_len;
107 }
108 for (size_t j = 0; j < line_len; j++) {
109 snprintf(&str[8 + j * 3], 80, "%02x ", data[i + j]);
110 }
111 for (size_t j = line_len; j < 16; j++) {
112 snprintf(&str[8 + j * 3], 80, " ");
113 }
114 str[56] = '|';
115 str[57] = ' ';
116 for (size_t j = 0; j < line_len; j++) {
117 char c = data[i + j];
118 if ((c < ' ') || (c > '~')) {
119 c = '.';
120 }
121 snprintf(&str[58 + j], 80, "%c", c);
122 }
123 for (size_t j = line_len; j < 16; j++) {
124 snprintf(&str[58 + j], 80, " ");
125 }
126 serial.println(str);
127 rem_len -= 16;
128 }
129}
130
131
132
133#endif //ARDUINO
134
135#endif
@license MIT License
uint8_t i