SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
SensorCommCustom.hpp
Go to the documentation of this file.
1
30#pragma once
31
32#include "SensorCommBase.hpp"
33
35{
36public:
37 using CustomCallback = bool(*)(uint8_t addr, uint8_t reg, uint8_t *buf, size_t len, bool writeReg, bool isWrite);
38
39 SensorCommCustom(CustomCallback callback, uint8_t addr) : customCallback(callback), addr(addr) {}
40
41 bool init() override
42 {
43 return true;
44 }
45
46 void deinit() override {}
47
48 int writeRegister(const uint8_t reg, uint8_t *buf, size_t len) override
49 {
50 if (customCallback(addr, reg, buf, len, true, true)) {
51 return 0;
52 } else {
53 return -1;
54 }
55 }
56
57 int writeBuffer(uint8_t *buffer, size_t len)
58 {
59 if (customCallback(addr, 0x00, buffer, len, false, true)) {
60 return 0;
61 } else {
62 return -1;
63 }
64 }
65
66 int readBuffer(uint8_t *buf, size_t len) override
67 {
68 if (customCallback(addr, 0x00, buf, len, false, false)) {
69 return 0;
70 } else {
71 return -1;
72 }
73 }
74
75 int readRegister(const uint8_t reg, uint8_t *buf, size_t len) override
76 {
77 if (customCallback(addr, reg, buf, len, true, false)) {
78 return 0;
79 } else {
80 return -1;
81 }
82 }
83
84 int writeThenRead(const uint8_t *write_buffer, size_t write_len, uint8_t *read_buffer, size_t read_len) override
85 {
86 writeBuffer((uint8_t *)write_buffer, write_len);
87 if (customCallback(addr, 0x00, read_buffer, read_len, false, false)) {
88 return 0;
89 } else {
90 return -1;
91 }
92 }
93
94 void setParams(const CommParamsBase &params) override
95 {
96#if defined(__cpp_rtti)
97 const auto pdat = dynamic_cast<const I2CParam *>(&params);
98#else
99 const auto pdat = static_cast<const I2CParam *>(&params);
100#endif
101 uint8_t type = pdat->getType();
102 switch (type) {
104 addr = pdat->getParams();
105 break;
107 // TODO:
108 // sendStopFlag = pdat->getParams();
109 break;
110 default:
111 break;
112 }
113 }
114private:
115 CustomCallback customCallback;
116 uint8_t addr;
117};
@license MIT License
Abstract base for all communication parameter objects.
I2C communication parameters.
uint8_t getType() const
Retrieve the parameter type.
@ I2C_SET_ADDR
Set device address.
@ I2C_SET_FLAG
Set a generic flag (interpretation depends on driver)
Abstract base class for low‑level sensor communication.
int writeRegister(const uint8_t reg, uint8_t *buf, size_t len) override
Write multiple bytes to a register.
SensorCommCustom(CustomCallback callback, uint8_t addr)
bool(*)(uint8_t addr, uint8_t reg, uint8_t *buf, size_t len, bool writeReg, bool isWrite) CustomCallback
bool init() override
Initialise the communication interface (open device, etc.).
int readBuffer(uint8_t *buf, size_t len) override
Read bytes directly from the device (no register address sent).
void deinit() override
Deinitialise the communication interface (close device, etc.).
void setParams(const CommParamsBase &params) override
Apply communication parameters (e.g., I2C address, SPI settings).
int writeBuffer(uint8_t *buffer, size_t len)
Write a buffer directly to the device (no register address).
int writeThenRead(const uint8_t *write_buffer, size_t write_len, uint8_t *read_buffer, size_t read_len) override
Perform a write followed by a read (e.g., for register‑based sensors).
int readRegister(const uint8_t reg, uint8_t *buf, size_t len) override
Read multiple bytes from a register into a buffer.
char buf[64]