| 1 | #ifndef Adafruit_I2CDevice_h |
| 2 | #define Adafruit_I2CDevice_h |
| 3 | |
| 4 | #include <Arduino.h> |
| 5 | #include <Wire.h> |
| 6 | |
| 7 | ///< The class which defines how we will talk to this device over I2C |
| 8 | class Adafruit_I2CDevice { |
| 9 | public: |
| 10 | Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire = &Wire); |
| 11 | uint8_t address(void); |
| 12 | bool begin(bool addr_detect = true); |
| 13 | void end(void); |
| 14 | bool detected(void); |
| 15 | |
| 16 | bool read(uint8_t *buffer, size_t len, bool stop = true); |
| 17 | bool write(const uint8_t *buffer, size_t len, bool stop = true, |
| 18 | const uint8_t *prefix_buffer = nullptr, size_t prefix_len = 0); |
| 19 | bool write_then_read(const uint8_t *write_buffer, size_t write_len, |
| 20 | uint8_t *read_buffer, size_t read_len, |
| 21 | bool stop = false); |
| 22 | bool setSpeed(uint32_t desiredclk); |
| 23 | |
| 24 | /*! @brief How many bytes we can read in a transaction |
| 25 | * @return The size of the Wire receive/transmit buffer */ |
| 26 | size_t maxBufferSize() { return _maxBufferSize; } |
| 27 | |
| 28 | private: |
| 29 | uint8_t _addr; |
| 30 | TwoWire *_wire; |
| 31 | bool _begun; |
| 32 | size_t _maxBufferSize; |
| 33 | bool _read(uint8_t *buffer, size_t len, bool stop); |
| 34 | }; |
| 35 | |
| 36 | #endif // Adafruit_I2CDevice_h |