clang
This commit is contained in:
parent
c43db9d7c2
commit
66448b37ec
|
|
@ -89,28 +89,25 @@ Adafruit_BusIO_Register::Adafruit_BusIO_Register(
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Create a register we access over a GenericDevice
|
* @brief Create a register we access over a GenericDevice
|
||||||
* @param genericdevice Generic device to use
|
* @param genericdevice Generic device to use
|
||||||
* @param reg_addr Register address we will read/write
|
* @param reg_addr Register address we will read/write
|
||||||
* @param width Width of the register in bytes (1-4)
|
* @param width Width of the register in bytes (1-4)
|
||||||
* @param byteorder Byte order of register data (LSBFIRST or MSBFIRST)
|
* @param byteorder Byte order of register data (LSBFIRST or MSBFIRST)
|
||||||
* @param address_width Width of the register address in bytes (1 or 2)
|
* @param address_width Width of the register address in bytes (1 or 2)
|
||||||
*/
|
*/
|
||||||
Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_GenericDevice *genericdevice,
|
Adafruit_BusIO_Register::Adafruit_BusIO_Register(
|
||||||
uint16_t reg_addr,
|
Adafruit_GenericDevice *genericdevice, uint16_t reg_addr, uint8_t width,
|
||||||
uint8_t width,
|
uint8_t byteorder, uint8_t address_width) {
|
||||||
uint8_t byteorder,
|
_i2cdevice = nullptr;
|
||||||
uint8_t address_width) {
|
_spidevice = nullptr;
|
||||||
_i2cdevice = nullptr;
|
_genericdevice = genericdevice;
|
||||||
_spidevice = nullptr;
|
_addrwidth = address_width;
|
||||||
_genericdevice = genericdevice;
|
_address = reg_addr;
|
||||||
_addrwidth = address_width;
|
_byteorder = byteorder;
|
||||||
_address = reg_addr;
|
_width = width;
|
||||||
_byteorder = byteorder;
|
|
||||||
_width = width;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Write a buffer of data to the register location
|
* @brief Write a buffer of data to the register location
|
||||||
* @param buffer Pointer to data to write
|
* @param buffer Pointer to data to write
|
||||||
|
|
@ -214,42 +211,41 @@ uint32_t Adafruit_BusIO_Register::read(void) {
|
||||||
uint32_t Adafruit_BusIO_Register::readCached(void) { return _cached; }
|
uint32_t Adafruit_BusIO_Register::readCached(void) { return _cached; }
|
||||||
|
|
||||||
bool Adafruit_BusIO_Register::read(uint8_t *buffer, uint8_t len) {
|
bool Adafruit_BusIO_Register::read(uint8_t *buffer, uint8_t len) {
|
||||||
uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF),
|
uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF),
|
||||||
(uint8_t)(_address >> 8)};
|
(uint8_t)(_address >> 8)};
|
||||||
if (_i2cdevice) {
|
if (_i2cdevice) {
|
||||||
return _i2cdevice->write_then_read(addrbuffer, _addrwidth, buffer, len);
|
return _i2cdevice->write_then_read(addrbuffer, _addrwidth, buffer, len);
|
||||||
}
|
}
|
||||||
if (_spidevice) {
|
if (_spidevice) {
|
||||||
if (_spiregtype == ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE) {
|
if (_spiregtype == ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE) {
|
||||||
// very special case!
|
// very special case!
|
||||||
// pass the special opcode address which we set as the high byte of the
|
// pass the special opcode address which we set as the high byte of the
|
||||||
// regaddr
|
// regaddr
|
||||||
addrbuffer[0] =
|
addrbuffer[0] =
|
||||||
(uint8_t)(_address >> 8) | 0x01; // set bottom bit high to read
|
(uint8_t)(_address >> 8) | 0x01; // set bottom bit high to read
|
||||||
// the 'actual' reg addr is the second byte then
|
// the 'actual' reg addr is the second byte then
|
||||||
addrbuffer[1] = (uint8_t)(_address & 0xFF);
|
addrbuffer[1] = (uint8_t)(_address & 0xFF);
|
||||||
// the address appears to be a byte longer
|
// the address appears to be a byte longer
|
||||||
return _spidevice->write_then_read(addrbuffer, _addrwidth + 1, buffer,
|
return _spidevice->write_then_read(addrbuffer, _addrwidth + 1, buffer,
|
||||||
len);
|
len);
|
||||||
}
|
}
|
||||||
if (_spiregtype == ADDRBIT8_HIGH_TOREAD) {
|
if (_spiregtype == ADDRBIT8_HIGH_TOREAD) {
|
||||||
addrbuffer[0] |= 0x80;
|
addrbuffer[0] |= 0x80;
|
||||||
}
|
}
|
||||||
if (_spiregtype == ADDRBIT8_HIGH_TOWRITE) {
|
if (_spiregtype == ADDRBIT8_HIGH_TOWRITE) {
|
||||||
addrbuffer[0] &= ~0x80;
|
addrbuffer[0] &= ~0x80;
|
||||||
}
|
}
|
||||||
if (_spiregtype == AD8_HIGH_TOREAD_AD7_HIGH_TOINC) {
|
if (_spiregtype == AD8_HIGH_TOREAD_AD7_HIGH_TOINC) {
|
||||||
addrbuffer[0] |= 0x80 | 0x40;
|
addrbuffer[0] |= 0x80 | 0x40;
|
||||||
}
|
}
|
||||||
return _spidevice->write_then_read(addrbuffer, _addrwidth, buffer, len);
|
return _spidevice->write_then_read(addrbuffer, _addrwidth, buffer, len);
|
||||||
}
|
}
|
||||||
if (_genericdevice) {
|
if (_genericdevice) {
|
||||||
return _genericdevice->readRegister(addrbuffer, _addrwidth, buffer, len);
|
return _genericdevice->readRegister(addrbuffer, _addrwidth, buffer, len);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Read 2 bytes of data from the register location
|
* @brief Read 2 bytes of data from the register location
|
||||||
* @param value Pointer to uint16_t variable to read into
|
* @param value Pointer to uint16_t variable to read into
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@
|
||||||
#if !defined(SPI_INTERFACES_COUNT) || \
|
#if !defined(SPI_INTERFACES_COUNT) || \
|
||||||
(defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0))
|
(defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0))
|
||||||
|
|
||||||
|
#include <Adafruit_GenericDevice.h>
|
||||||
#include <Adafruit_I2CDevice.h>
|
#include <Adafruit_I2CDevice.h>
|
||||||
#include <Adafruit_SPIDevice.h>
|
#include <Adafruit_SPIDevice.h>
|
||||||
#include <Adafruit_GenericDevice.h>
|
|
||||||
|
|
||||||
typedef enum _Adafruit_BusIO_SPIRegType {
|
typedef enum _Adafruit_BusIO_SPIRegType {
|
||||||
ADDRBIT8_HIGH_TOREAD = 0,
|
ADDRBIT8_HIGH_TOREAD = 0,
|
||||||
|
|
@ -58,8 +58,9 @@ public:
|
||||||
uint8_t width = 1, uint8_t byteorder = LSBFIRST,
|
uint8_t width = 1, uint8_t byteorder = LSBFIRST,
|
||||||
uint8_t address_width = 1);
|
uint8_t address_width = 1);
|
||||||
|
|
||||||
Adafruit_BusIO_Register(Adafruit_GenericDevice *genericdevice, uint16_t reg_addr,
|
Adafruit_BusIO_Register(Adafruit_GenericDevice *genericdevice,
|
||||||
uint8_t width = 1, uint8_t byteorder = LSBFIRST,
|
uint16_t reg_addr, uint8_t width = 1,
|
||||||
|
uint8_t byteorder = LSBFIRST,
|
||||||
uint8_t address_width = 1);
|
uint8_t address_width = 1);
|
||||||
|
|
||||||
bool read(uint8_t *buffer, uint8_t len);
|
bool read(uint8_t *buffer, uint8_t len);
|
||||||
|
|
|
||||||
|
|
@ -1,43 +1,47 @@
|
||||||
#include "Adafruit_GenericDevice.h"
|
#include "Adafruit_GenericDevice.h"
|
||||||
|
|
||||||
Adafruit_GenericDevice::Adafruit_GenericDevice(busio_genericdevice_read_t read_func,
|
Adafruit_GenericDevice::Adafruit_GenericDevice(
|
||||||
busio_genericdevice_write_t write_func,
|
busio_genericdevice_read_t read_func,
|
||||||
busio_genericdevice_readreg_t readreg_func,
|
busio_genericdevice_write_t write_func,
|
||||||
busio_genericdevice_writereg_t writereg_func) {
|
busio_genericdevice_readreg_t readreg_func,
|
||||||
_read_func = read_func;
|
busio_genericdevice_writereg_t writereg_func) {
|
||||||
_write_func = write_func;
|
_read_func = read_func;
|
||||||
_readreg_func = readreg_func;
|
_write_func = write_func;
|
||||||
_writereg_func = writereg_func;
|
_readreg_func = readreg_func;
|
||||||
_begun = false;
|
_writereg_func = writereg_func;
|
||||||
|
_begun = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Adafruit_GenericDevice::begin(void) {
|
bool Adafruit_GenericDevice::begin(void) {
|
||||||
_begun = true;
|
_begun = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Adafruit_GenericDevice::write(const uint8_t *buffer, size_t len) {
|
bool Adafruit_GenericDevice::write(const uint8_t *buffer, size_t len) {
|
||||||
if (!_begun)
|
if (!_begun)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return _write_func(buffer, len);
|
return _write_func(buffer, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Adafruit_GenericDevice::read(uint8_t *buffer, size_t len) {
|
bool Adafruit_GenericDevice::read(uint8_t *buffer, size_t len) {
|
||||||
if (!_begun)
|
if (!_begun)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return _read_func(buffer, len);
|
return _read_func(buffer, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Adafruit_GenericDevice::readRegister(uint8_t *addr_buf, uint8_t addrsiz, uint8_t *buf, uint16_t bufsiz) {
|
bool Adafruit_GenericDevice::readRegister(uint8_t *addr_buf, uint8_t addrsiz,
|
||||||
|
uint8_t *buf, uint16_t bufsiz) {
|
||||||
if (!_begun || !_readreg_func)
|
if (!_begun || !_readreg_func)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return _readreg_func(addr_buf, addrsiz, buf, bufsiz);
|
return _readreg_func(addr_buf, addrsiz, buf, bufsiz);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Adafruit_GenericDevice::writeRegister(uint8_t *addr_buf, uint8_t addrsiz, const uint8_t *buf, uint16_t bufsiz) {
|
bool Adafruit_GenericDevice::writeRegister(uint8_t *addr_buf, uint8_t addrsiz,
|
||||||
|
const uint8_t *buf,
|
||||||
|
uint16_t bufsiz) {
|
||||||
if (!_begun || !_writereg_func)
|
if (!_begun || !_writereg_func)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,25 +5,33 @@
|
||||||
|
|
||||||
typedef bool (*busio_genericdevice_read_t)(uint8_t *buffer, size_t len);
|
typedef bool (*busio_genericdevice_read_t)(uint8_t *buffer, size_t len);
|
||||||
typedef bool (*busio_genericdevice_write_t)(const uint8_t *buffer, size_t len);
|
typedef bool (*busio_genericdevice_write_t)(const uint8_t *buffer, size_t len);
|
||||||
typedef bool (*busio_genericdevice_readreg_t)(uint8_t *addr_buf, uint8_t addrsiz, uint8_t *buf, uint16_t bufsiz);
|
typedef bool (*busio_genericdevice_readreg_t)(uint8_t *addr_buf,
|
||||||
typedef bool (*busio_genericdevice_writereg_t)(uint8_t *addr_buf, uint8_t addrsiz, const uint8_t *buf, uint16_t bufsiz);
|
uint8_t addrsiz, uint8_t *buf,
|
||||||
|
uint16_t bufsiz);
|
||||||
|
typedef bool (*busio_genericdevice_writereg_t)(uint8_t *addr_buf,
|
||||||
|
uint8_t addrsiz,
|
||||||
|
const uint8_t *buf,
|
||||||
|
uint16_t bufsiz);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Class for communicating with a device via generic read/write functions
|
* @brief Class for communicating with a device via generic read/write functions
|
||||||
*/
|
*/
|
||||||
class Adafruit_GenericDevice {
|
class Adafruit_GenericDevice {
|
||||||
public:
|
public:
|
||||||
Adafruit_GenericDevice(busio_genericdevice_read_t read_func,
|
Adafruit_GenericDevice(
|
||||||
busio_genericdevice_write_t write_func,
|
busio_genericdevice_read_t read_func,
|
||||||
busio_genericdevice_readreg_t readreg_func = nullptr,
|
busio_genericdevice_write_t write_func,
|
||||||
busio_genericdevice_writereg_t writereg_func = nullptr);
|
busio_genericdevice_readreg_t readreg_func = nullptr,
|
||||||
|
busio_genericdevice_writereg_t writereg_func = nullptr);
|
||||||
|
|
||||||
bool begin(void);
|
bool begin(void);
|
||||||
|
|
||||||
bool read(uint8_t *buffer, size_t len);
|
bool read(uint8_t *buffer, size_t len);
|
||||||
bool write(const uint8_t *buffer, size_t len);
|
bool write(const uint8_t *buffer, size_t len);
|
||||||
bool readRegister(uint8_t *addr_buf, uint8_t addrsiz, uint8_t *buf, uint16_t bufsiz);
|
bool readRegister(uint8_t *addr_buf, uint8_t addrsiz, uint8_t *buf,
|
||||||
bool writeRegister(uint8_t *addr_buf, uint8_t addrsiz, const uint8_t *buf, uint16_t bufsiz);
|
uint16_t bufsiz);
|
||||||
|
bool writeRegister(uint8_t *addr_buf, uint8_t addrsiz, const uint8_t *buf,
|
||||||
|
uint16_t bufsiz);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
busio_genericdevice_read_t _read_func;
|
busio_genericdevice_read_t _read_func;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue