Add print debugger, bits type
This commit is contained in:
parent
e3cf6e7183
commit
77964bccaf
|
|
@ -1,7 +1,7 @@
|
||||||
#include <Adafruit_I2CDevice.h>
|
#include <Adafruit_I2CDevice.h>
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
#define DEBUG_SERIAL Serial
|
//#define DEBUG_SERIAL Serial
|
||||||
|
|
||||||
Adafruit_I2CDevice::Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire) {
|
Adafruit_I2CDevice::Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire) {
|
||||||
_addr = addr;
|
_addr = addr;
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ uint32_t Adafruit_I2CRegister::read(void) {
|
||||||
|
|
||||||
for (int i=0; i < _width; i++) {
|
for (int i=0; i < _width; i++) {
|
||||||
value <<= 8;
|
value <<= 8;
|
||||||
if (_bitorder == MSBFIRST) {
|
if (_bitorder == LSBFIRST) {
|
||||||
value |= _buffer[_width-i-1];
|
value |= _buffer[_width-i-1];
|
||||||
} else {
|
} else {
|
||||||
value |= _buffer[i];
|
value |= _buffer[i];
|
||||||
|
|
@ -90,3 +90,41 @@ bool Adafruit_I2CRegister::read(uint8_t *value) {
|
||||||
*value = _buffer[0];
|
*value = _buffer[0];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Adafruit_I2CRegister::print(Stream *s) {
|
||||||
|
uint32_t val = read();
|
||||||
|
s->print("0x"); s->print(val, HEX);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Adafruit_I2CRegister::println(Stream *s) {
|
||||||
|
print(s);
|
||||||
|
s->println();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Adafruit_I2CRegisterBits::Adafruit_I2CRegisterBits(Adafruit_I2CRegister *reg, uint8_t bits, uint8_t shift) {
|
||||||
|
_register = reg;
|
||||||
|
_bits = bits;
|
||||||
|
_shift = shift;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t Adafruit_I2CRegisterBits::read(void) {
|
||||||
|
uint32_t val = _register->read();
|
||||||
|
val >>= _shift;
|
||||||
|
return val & ((1 << (_bits+1)) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Adafruit_I2CRegisterBits::write(uint32_t data) {
|
||||||
|
uint32_t val = _register->read();
|
||||||
|
|
||||||
|
// mask off the data before writing
|
||||||
|
uint32_t mask = (1 << (_bits+1)) - 1;
|
||||||
|
data &= mask;
|
||||||
|
|
||||||
|
mask <<= _shift;
|
||||||
|
val &= ~mask; // remove the current data at that spot
|
||||||
|
val |= data << _shift; // and add in the new data
|
||||||
|
|
||||||
|
_register->write(val, _register->width());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,11 @@ class Adafruit_I2CRegister {
|
||||||
bool write(uint8_t *buffer, uint8_t len);
|
bool write(uint8_t *buffer, uint8_t len);
|
||||||
bool write(uint32_t value, uint8_t numbytes=0);
|
bool write(uint32_t value, uint8_t numbytes=0);
|
||||||
|
|
||||||
|
uint8_t width(void) { return _width; }
|
||||||
|
|
||||||
|
void print(Stream *s=&Serial);
|
||||||
|
void println(Stream *s=&Serial);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Adafruit_I2CDevice *_device;
|
Adafruit_I2CDevice *_device;
|
||||||
uint16_t _address;
|
uint16_t _address;
|
||||||
|
|
@ -27,5 +32,15 @@ class Adafruit_I2CRegister {
|
||||||
uint8_t _buffer[4]; // we wont support anything larger than uint32 for non-buffered read
|
uint8_t _buffer[4]; // we wont support anything larger than uint32 for non-buffered read
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Adafruit_I2CRegisterBits {
|
||||||
|
public:
|
||||||
|
Adafruit_I2CRegisterBits(Adafruit_I2CRegister *reg, uint8_t bits, uint8_t shift);
|
||||||
|
void write(uint32_t value);
|
||||||
|
uint32_t read(void);
|
||||||
|
private:
|
||||||
|
Adafruit_I2CRegister *_register;
|
||||||
|
uint8_t _bits, _shift;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif //I2CRegister_h
|
#endif //I2CRegister_h
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue