Skip to content

Commit 055013b

Browse files
authored
Merge pull request #139 from adafruit/genericdevice2
refactor the whole thing to get rid of static-ness. also clang examples
2 parents cc66c42 + 186ea35 commit 055013b

File tree

15 files changed

+413
-304
lines changed

15 files changed

+413
-304
lines changed

Adafruit_GenericDevice.cpp

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,73 +6,77 @@
66

77
#include "Adafruit_GenericDevice.h"
88

9-
/*! @brief Create a Generic device with the provided read/write functions
10-
@param read_func Function pointer for reading raw data
11-
@param write_func Function pointer for writing raw data
12-
@param readreg_func Function pointer for reading registers (optional)
13-
@param writereg_func Function pointer for writing registers (optional) */
9+
/*!
10+
* @brief Create a Generic device with the provided read/write functions
11+
* @param obj Pointer to object instance
12+
* @param read_func Function pointer for reading raw data
13+
* @param write_func Function pointer for writing raw data
14+
* @param readreg_func Function pointer for reading registers (optional)
15+
* @param writereg_func Function pointer for writing registers (optional) */
1416
Adafruit_GenericDevice::Adafruit_GenericDevice(
15-
busio_genericdevice_read_t read_func,
17+
void *obj, busio_genericdevice_read_t read_func,
1618
busio_genericdevice_write_t write_func,
1719
busio_genericdevice_readreg_t readreg_func,
1820
busio_genericdevice_writereg_t writereg_func) {
21+
_obj = obj;
1922
_read_func = read_func;
2023
_write_func = write_func;
2124
_readreg_func = readreg_func;
2225
_writereg_func = writereg_func;
2326
_begun = false;
2427
}
2528

26-
/*! @brief Initializes the device
27-
@return true if initialization was successful, otherwise false */
29+
/*! @brief Simple begin function (doesn't do much at this time)
30+
@return true always
31+
*/
2832
bool Adafruit_GenericDevice::begin(void) {
2933
_begun = true;
3034
return true;
3135
}
3236

3337
/*! @brief Write a buffer of data
34-
@param buffer Pointer to buffer of data to write
35-
@param len Number of bytes to write
36-
@return true if write was successful, otherwise false */
38+
@param buffer Pointer to buffer of data to write
39+
@param len Number of bytes to write
40+
@return true if write was successful, otherwise false */
3741
bool Adafruit_GenericDevice::write(const uint8_t *buffer, size_t len) {
3842
if (!_begun)
3943
return false;
40-
return _write_func(buffer, len);
44+
return _write_func(_obj, buffer, len);
4145
}
4246

4347
/*! @brief Read data into a buffer
44-
@param buffer Pointer to buffer to read data into
45-
@param len Number of bytes to read
46-
@return true if read was successful, otherwise false */
48+
@param buffer Pointer to buffer to read data into
49+
@param len Number of bytes to read
50+
@return true if read was successful, otherwise false */
4751
bool Adafruit_GenericDevice::read(uint8_t *buffer, size_t len) {
4852
if (!_begun)
4953
return false;
50-
return _read_func(buffer, len);
54+
return _read_func(_obj, buffer, len);
5155
}
5256

5357
/*! @brief Read from a register location
54-
@param addr_buf Buffer containing register address
55-
@param addrsiz Size of register address in bytes
56-
@param buf Buffer to store read data
57-
@param bufsiz Size of data to read in bytes
58-
@return true if read was successful, otherwise false */
58+
@param addr_buf Buffer containing register address
59+
@param addrsiz Size of register address in bytes
60+
@param buf Buffer to store read data
61+
@param bufsiz Size of data to read in bytes
62+
@return true if read was successful, otherwise false */
5963
bool Adafruit_GenericDevice::readRegister(uint8_t *addr_buf, uint8_t addrsiz,
6064
uint8_t *buf, uint16_t bufsiz) {
6165
if (!_begun || !_readreg_func)
6266
return false;
63-
return _readreg_func(addr_buf, addrsiz, buf, bufsiz);
67+
return _readreg_func(_obj, addr_buf, addrsiz, buf, bufsiz);
6468
}
6569

6670
/*! @brief Write to a register location
67-
@param addr_buf Buffer containing register address
68-
@param addrsiz Size of register address in bytes
69-
@param buf Buffer containing data to write
70-
@param bufsiz Size of data to write in bytes
71-
@return true if write was successful, otherwise false */
71+
@param addr_buf Buffer containing register address
72+
@param addrsiz Size of register address in bytes
73+
@param buf Buffer containing data to write
74+
@param bufsiz Size of data to write in bytes
75+
@return true if write was successful, otherwise false */
7276
bool Adafruit_GenericDevice::writeRegister(uint8_t *addr_buf, uint8_t addrsiz,
7377
const uint8_t *buf,
7478
uint16_t bufsiz) {
7579
if (!_begun || !_writereg_func)
7680
return false;
77-
return _writereg_func(addr_buf, addrsiz, buf, bufsiz);
81+
return _writereg_func(_obj, addr_buf, addrsiz, buf, bufsiz);
7882
}

Adafruit_GenericDevice.h

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,25 @@
33

44
#include <Arduino.h>
55

6-
typedef bool (*busio_genericdevice_read_t)(uint8_t *buffer, size_t len);
7-
typedef bool (*busio_genericdevice_write_t)(const uint8_t *buffer, size_t len);
8-
typedef bool (*busio_genericdevice_readreg_t)(uint8_t *addr_buf,
9-
uint8_t addrsiz, uint8_t *buf,
10-
uint16_t bufsiz);
11-
typedef bool (*busio_genericdevice_writereg_t)(uint8_t *addr_buf,
6+
typedef bool (*busio_genericdevice_read_t)(void *obj, uint8_t *buffer,
7+
size_t len);
8+
typedef bool (*busio_genericdevice_write_t)(void *obj, const uint8_t *buffer,
9+
size_t len);
10+
typedef bool (*busio_genericdevice_readreg_t)(void *obj, uint8_t *addr_buf,
11+
uint8_t addrsiz, uint8_t *data,
12+
uint16_t datalen);
13+
typedef bool (*busio_genericdevice_writereg_t)(void *obj, uint8_t *addr_buf,
1214
uint8_t addrsiz,
13-
const uint8_t *buf,
14-
uint16_t bufsiz);
15+
const uint8_t *data,
16+
uint16_t datalen);
1517

1618
/*!
1719
* @brief Class for communicating with a device via generic read/write functions
1820
*/
1921
class Adafruit_GenericDevice {
2022
public:
2123
Adafruit_GenericDevice(
22-
busio_genericdevice_read_t read_func,
24+
void *obj, busio_genericdevice_read_t read_func,
2325
busio_genericdevice_write_t write_func,
2426
busio_genericdevice_readreg_t readreg_func = nullptr,
2527
busio_genericdevice_writereg_t writereg_func = nullptr);
@@ -45,6 +47,9 @@ class Adafruit_GenericDevice {
4547

4648
bool _begun; ///< whether we have initialized yet (in case the function needs
4749
///< to do something)
50+
51+
private:
52+
void *_obj; ///< Pointer to object instance
4853
};
4954

5055
#endif // ADAFRUIT_GENERICDEVICE_H

Adafruit_I2CDevice.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "Adafruit_I2CDevice.h"
22

3-
//#define DEBUG_SERIAL Serial
3+
// #define DEBUG_SERIAL Serial
44

55
/*!
66
* @brief Create an I2C device at a given address

Adafruit_SPIDevice.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "Adafruit_SPIDevice.h"
22

3-
//#define DEBUG_SERIAL Serial
3+
// #define DEBUG_SERIAL Serial
44

55
/*!
66
* @brief Create an SPI device with the given CS pin and settings

Adafruit_SPIDevice.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ typedef BitOrder BusIOBitOrder;
5656
// ports set and clear registers which are atomic.
5757
// typedef volatile uint32_t BusIO_PortReg;
5858
// typedef uint32_t BusIO_PortMask;
59-
//#define BUSIO_USE_FAST_PINIO
59+
// #define BUSIO_USE_FAST_PINIO
6060

6161
#elif defined(__MBED__) || defined(__ZEPHYR__)
6262
// Boards based on RTOS cores like mbed or Zephyr are not going to expose the

0 commit comments

Comments
 (0)