summaryrefslogtreecommitdiff
path: root/.pio/libdeps/esp32-s3-n16r8/Adafruit BusIO/Adafruit_GenericDevice.cpp
blob: 37f9cfd7cbe664f9bb309f414f3315345a6d2b8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
   Written with help by Claude!
  https://claude.ai/chat/335f50b1-3dd8-435e-9139-57ec7ca26a3c (at this time
  chats are not shareable :(
*/

#include "Adafruit_GenericDevice.h"

/*!
 * @brief Create a Generic device with the provided read/write functions
 * @param obj Pointer to object instance
 * @param read_func Function pointer for reading raw data
 * @param write_func Function pointer for writing raw data
 * @param readreg_func Function pointer for reading registers (optional)
 * @param writereg_func Function pointer for writing registers (optional) */
Adafruit_GenericDevice::Adafruit_GenericDevice(
    void *obj, busio_genericdevice_read_t read_func,
    busio_genericdevice_write_t write_func,
    busio_genericdevice_readreg_t readreg_func,
    busio_genericdevice_writereg_t writereg_func) {
  _obj = obj;
  _read_func = read_func;
  _write_func = write_func;
  _readreg_func = readreg_func;
  _writereg_func = writereg_func;
  _begun = false;
}

/*! @brief Simple begin function (doesn't do much at this time)
    @return true always
*/
bool Adafruit_GenericDevice::begin(void) {
  _begun = true;
  return true;
}

/*!
@brief Marks the GenericDevice as no longer in use.
@note: Since this is a GenericDevice, if you are using this with a Serial
object, this does NOT disable serial communication or release the RX/TX pins.
That must be done manually by calling Serial.end().
*/
void Adafruit_GenericDevice::end(void) { _begun = false; }

/*! @brief Write a buffer of data
   @param buffer Pointer to buffer of data to write
   @param len Number of bytes to write
   @return true if write was successful, otherwise false */
bool Adafruit_GenericDevice::write(const uint8_t *buffer, size_t len) {
  if (!_begun)
    return false;
  return _write_func(_obj, buffer, len);
}

/*! @brief Read data into a buffer
   @param buffer Pointer to buffer to read data into
   @param len Number of bytes to read
   @return true if read was successful, otherwise false */
bool Adafruit_GenericDevice::read(uint8_t *buffer, size_t len) {
  if (!_begun)
    return false;
  return _read_func(_obj, buffer, len);
}

/*! @brief Read from a register location
   @param addr_buf Buffer containing register address
   @param addrsiz Size of register address in bytes
   @param buf Buffer to store read data
   @param bufsiz Size of data to read in bytes
   @return true if read was successful, otherwise false */
bool Adafruit_GenericDevice::readRegister(uint8_t *addr_buf, uint8_t addrsiz,
                                          uint8_t *buf, uint16_t bufsiz) {
  if (!_begun || !_readreg_func)
    return false;
  return _readreg_func(_obj, addr_buf, addrsiz, buf, bufsiz);
}

/*! @brief Write to a register location
   @param addr_buf Buffer containing register address
   @param addrsiz Size of register address in bytes
   @param buf Buffer containing data to write
   @param bufsiz Size of data to write in bytes
   @return true if write was successful, otherwise false */
bool Adafruit_GenericDevice::writeRegister(uint8_t *addr_buf, uint8_t addrsiz,
                                           const uint8_t *buf,
                                           uint16_t bufsiz) {
  if (!_begun || !_writereg_func)
    return false;
  return _writereg_func(_obj, addr_buf, addrsiz, buf, bufsiz);
}