Add print debugger, bits type
This commit is contained in:
parent
e3cf6e7183
commit
77964bccaf
|
|
@ -1,7 +1,7 @@
|
|||
#include <Adafruit_I2CDevice.h>
|
||||
#include <Arduino.h>
|
||||
|
||||
#define DEBUG_SERIAL Serial
|
||||
//#define DEBUG_SERIAL Serial
|
||||
|
||||
Adafruit_I2CDevice::Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire) {
|
||||
_addr = addr;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ uint32_t Adafruit_I2CRegister::read(void) {
|
|||
|
||||
for (int i=0; i < _width; i++) {
|
||||
value <<= 8;
|
||||
if (_bitorder == MSBFIRST) {
|
||||
if (_bitorder == LSBFIRST) {
|
||||
value |= _buffer[_width-i-1];
|
||||
} else {
|
||||
value |= _buffer[i];
|
||||
|
|
@ -90,3 +90,41 @@ bool Adafruit_I2CRegister::read(uint8_t *value) {
|
|||
*value = _buffer[0];
|
||||
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(uint32_t value, uint8_t numbytes=0);
|
||||
|
||||
uint8_t width(void) { return _width; }
|
||||
|
||||
void print(Stream *s=&Serial);
|
||||
void println(Stream *s=&Serial);
|
||||
|
||||
private:
|
||||
Adafruit_I2CDevice *_device;
|
||||
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
|
||||
};
|
||||
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue