6 I2C_device( i2c_address ),
8 n_ports( (nbits + 7) / 8 ),
12 constexpr uint16_t i = 0x0001;
13 uint8_t* tp = (uint8_t*)(&i);
33 digitalWrite( ADDR_PIN , 0 );
35 digitalWrite( ADDR_PIN , 0 );
38 digitalWrite( RESET_PIN , 0 );
40 digitalWrite( RESET_PIN , 1 );
49 bit_op8( *(arp + OUT) + port, mask, value );
51 write_r8( *(arp + OUT) + port, value );
61 return read_r8( *(arp + IN) + port );
74 bit_op8( *(arp + CONFIG) + port, mask,
config );
76 write_r8( *(arp + CONFIG) + port,
config );
86 if ( auto_increment ) {
87 reg_w( auto_increment | *(arp + w), vp,
n_ports );
90 for (
int i = 0; i <
n_ports; i++ )
91 write_r8( *(arp + w) + i, *vp++ );
99 for (
int i = 0; i <
n_ports; i++ ) {
101 vp[ i ] = temp | vp[ i ] >> 8;
105 int n_bytes = (
n_bits * 2 + 7) / 8;
107 if ( auto_increment ) {
108 reg_w( auto_increment | *(arp + w), (uint8_t*)vp, n_bytes );
111 for (
int i = 0; i < n_bytes; i++ )
112 write_r8( *(arp + w) + i, *vp++ );
118 if ( auto_increment ) {
119 reg_r( auto_increment | *(arp + w), vp,
n_ports );
122 for (
int i = 0; i <
n_ports; i++ )
123 *(vp + i) = read_r8( *(arp + w) + i );
131 int n_bytes = (
n_bits * 2 + 7) / 8;
133 if ( auto_increment ) {
134 reg_r( auto_increment | *(arp + w), (uint8_t*)vp, n_bytes );
137 for (
int i = 0; i < n_bytes; i++ )
138 *(vp + i) = read_r8( *(arp + w) + i );
145 for (
int i = 0; i <
n_ports; i++ ) {
147 vp[ i ] = temp | vp[ i ] >> 8;
156 write_r8( *(arp + w) + port_num, value );
161 write_r16( *(arp + w) + port_num, value );
166 return read_r8( *(arp + w) + port_num );
171 return read_r16( *(arp + w) + port_num );
174void GPIO_base::print_bin( uint8_t v )
177 for (
int i = 7; 0 <= i; i-- )
178 Serial.print(((v >> i) & 0x1) ?
"1" :
"0");
184PCAL6xxx_base::PCAL6xxx_base( uint8_t i2c_address,
const int nbits,
const uint8_t arp[], uint8_t ai ) :
189PCAL6xxx_base::~PCAL6xxx_base()
196PCAL6408A::PCAL6408A( uint8_t i2c_address ) :
201PCAL6408A::~PCAL6408A()
205constexpr uint8_t PCAL6408A::access_ref[];
210PCAL6416A::PCAL6416A( uint8_t i2c_address ) :
215PCAL6416A::~PCAL6416A()
219constexpr uint8_t PCAL6416A::access_ref[];
224PCAL6524::PCAL6524( uint8_t i2c_address ) :
233constexpr uint8_t PCAL6524::access_ref[];
238PCAL6534::PCAL6534( uint8_t i2c_address ) :
247constexpr uint8_t PCAL6534::access_ref[];
GPIO_base(uint8_t i2c_address, const int nbits, const uint8_t *arp, uint8_t ai)
uint16_t * read_port16(access_word w, uint16_t *vp)
void config(int port, uint8_t config, uint8_t mask=0)
void write_port16(access_word w, uint16_t *vp)
void output(int port, uint8_t value, uint8_t mask=0)
void write_port(access_word w, uint8_t *vp)
void begin(board env=NONE)
uint8_t * read_port(access_word w, uint8_t *vp)