void mcp23s17_write_bit(uint8_t data, uint8_t bit_num, uint8_t reg, uint8_t hw_addr, int fd) { uint8_t reg_data = mcp23s17_read_reg(reg, hw_addr, fd); if (data) { reg_data |= 1 << bit_num; // set } else { reg_data &= 0xff ^ (1 << bit_num); // clear } return mcp23s17_write_reg(reg_data, reg, hw_addr, fd); }
void pifacedigital_close(uint8_t hw_addr) { if (pfd_count <= 0) return; pfd_count--; // disable interrupts if enabled const uint8_t intenb = mcp23s17_read_reg(GPINTENB, hw_addr, mcp23s17_fd); if (intenb) { mcp23s17_write_reg(0, GPINTENB, hw_addr, mcp23s17_fd); // now do some other interrupt stuff... // TODO } // if no more PiFace Digital's, close the fd if (pfd_count <= 0) { pfd_count = 0; close(mcp23s17_fd); } }
uint8_t pifacedigital_read_reg(uint8_t reg, uint8_t hw_addr) { return mcp23s17_read_reg(reg, hw_addr, mcp23s17_fd); }