SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
SensorCommEnhanced.hpp
Go to the documentation of this file.
1
30#pragma once
31
32#include "SensorCommBase.hpp"
33#include <vector>
34
36{
37private:
38 template<typename T>
39 std::vector<uint8_t> splitRegister(T reg)
40 {
41 std::vector<uint8_t> result;
42 const size_t size = sizeof(T);
43 for (size_t i = 0; i < size; ++i) {
44 result.push_back(static_cast<uint8_t>(reg >> (8 * (size - 1 - i))));
45 }
46 return result;
47 }
48
49 template<typename T>
50 int readRegisterImpl(T reg, uint8_t *buf, size_t len)
51 {
52 std::vector<uint8_t> splitReg = splitRegister(reg);
53 return readRegister(splitReg[0], buf, len);
54 }
55
56
57 template<typename T>
58 int writeRegisterImpl(T reg, uint8_t val)
59 {
60 std::vector<uint8_t> splitReg = splitRegister(reg);
61 return writeRegister(splitReg[0], val);
62 }
63
64
65 template<typename T>
66 int writeRegisterImpl(T reg, uint8_t *buf, size_t len)
67 {
68 std::vector<uint8_t> splitReg = splitRegister(reg);
69 return writeRegister(splitReg[0], buf, len);
70 }
71
72
73 template<typename T>
74 int writeRegisterImpl(T reg, uint8_t norVal, uint8_t orVal)
75 {
76 std::vector<uint8_t> splitReg = splitRegister(reg);
77 return writeRegister(splitReg[0], norVal, orVal);
78 }
79
80
81public:
82 template<typename T>
83 int readRegister(T reg)
84 {
85 std::vector<uint8_t> splitReg = splitRegister(reg);
86 return readRegister(splitReg[0]);
87 }
88
89
90 template<typename T>
91 int readRegister(T reg, uint8_t *buf, size_t len)
92 {
93 return readRegisterImpl(reg, buf, len);
94 }
95
96
97 template<typename T>
98 int writeRegister(T reg, uint8_t val)
99 {
100 return writeRegisterImpl(reg, val);
101 }
102
103
104 template<typename T>
105 int writeRegister(T reg, uint8_t *buf, size_t len)
106 {
107 return writeRegisterImpl(reg, buf, len);
108 }
109
110
111 template<typename T>
112 int writeRegister(T reg, uint8_t norVal, uint8_t orVal)
113 {
114 return writeRegisterImpl(reg, norVal, orVal);
115 }
116};
117
@license MIT License
int writeRegister(T reg, uint8_t val)
int writeRegister(T reg, uint8_t norVal, uint8_t orVal)
int writeRegister(T reg, uint8_t *buf, size_t len)
int readRegister(T reg, uint8_t *buf, size_t len)
Abstract base class for low‑level sensor communication.
uint8_t i
char buf[64]