3I2C_device::I2C_device(
const uint8_t i2c_address,
const bool repeated_start_enable ) : i2c( Wire ), i2c_addr( i2c_address ), rs_dis( !repeated_start_enable )
7I2C_device::I2C_device( TwoWire& wire,
const uint8_t i2c_address,
const bool repeated_start_enable ) : i2c( wire ), i2c_addr( i2c_address ), rs_dis( !repeated_start_enable )
23 return !
i2c.endTransmission();
30 for ( uint8_t i = 0; i < stop; i++ ) {
31 target_i2c.beginTransmission( i );
32 result[i] = !target_i2c.endTransmission();
35 for ( uint8_t i = stop; i < 128; i++ ) {
39 Serial.print(
"\nI2C scan result\n " );
40 for ( uint8_t x = 0; x < 16; x++ ) {
42 Serial.print( x, HEX );
45 for ( uint8_t i = 0; i < 128; i++ ) {
48 Serial.print( i / 16, HEX );
54 Serial.print( i, HEX );
57 Serial.print(
" --" );
63int I2C_device::tx(
const uint8_t *data,
const uint16_t size,
const bool stop )
68 r_size =
i2c.write( data, size );
69 uint8_t rtn =
i2c.endTransmission( stop );
79 uint16_t r_size =
i2c.requestFrom(
i2c_addr, size );
81 if ( size && !r_size )
84 for ( uint16_t i = 0; i < size; i++ ) {
85 while ( !
i2c.available() )
87 data[ i ] =
i2c.read();
94 uint8_t buffer[ size + 1 ];
96 buffer[ 0 ] = reg_adr;
97 for ( uint16_t i = 0; i < size; i++)
98 buffer[ i + 1 ] = data[ i ];
100 return tx( buffer,
sizeof( buffer ) );
107 buffer[ 0 ] = reg_adr;
110 return tx( buffer,
sizeof( buffer ) );
116 return rx( data, size );
137 buff[ 0 ] = val >> 8;
138 buff[ 1 ] = val & 0xFF;
140 reg_w( reg, buff,
sizeof( buff ) );
152 reg_r( reg, buff,
sizeof( buff ) );
154 return (buff[ 0 ] << 8) | buff[ 1 ];
void write_r16(const uint8_t reg, const uint16_t val)
uint8_t read_r8(const uint8_t reg)
uint16_t read_r16(const uint8_t reg)
int reg_w(const uint8_t reg_adr, const uint8_t *data, const uint16_t size)
I2C_device(const uint8_t i2c_address, const bool repeated_start_enable=true)
int rx(uint8_t *data, const uint16_t size)
void write_r8(const uint8_t reg, const uint8_t val)
int tx(const uint8_t *data, const uint16_t size, const bool stop=true)
void bit_op16(const uint8_t reg, const uint16_t mask, const uint16_t value)
static void scan(TwoWire &target_i2c=Wire, const uint8_t stop=128)
void bit_op8(const uint8_t reg, const uint8_t mask, const uint8_t value)
void repeated_start_enable(const bool en=true)
int reg_r(const uint8_t reg_adr, uint8_t *data, const uint16_t size)