2 #include "HardwareI2C.h"
10 PicoHardwareI2C(i2c_inst_t *i2c,
int maxBufferSize=100,
int rxPin,
int txPin){
12 this->maxBufferSize = maxBufferSize;
13 gpio_set_function(rxPin, GPIO_FUNC_I2C);
14 gpio_set_function(txPin, GPIO_FUNC_I2C);
23 virtual void begin() {
24 i2c_init(i2c, 100000);
25 i2c_set_slave_mode(i2c,
false, 0);
26 is_slave_mode =
false;
29 virtual void begin(uint8_t address) {
30 i2c_set_slave_mode(i2c,
true, address);
38 virtual void setClock(uint32_t baudrate) {
39 i2c_set_baudrate(i2c, baudrate);
42 virtual void beginTransmission(uint8_t address) {
43 transmission_address=address;
46 virtual uint8_t endTransmission(
bool stopBit) {
48 transmission_address = -1;
51 virtual uint8_t endTransmission(
void) {
53 transmission_address = -1;
56 virtual size_t write(uint8_t c) {
58 if (pos>=maxBufferSize){
66 size_t write(
const char *buffer,
size_t size) {
68 return i2c_write_blocking(i2c, transmission_address, write_buffer, size,
true);
71 virtual size_t requestFrom(uint8_t address,
size_t len,
bool stopBit) {
72 read_address = address;
74 read_stop_bit = stopBit;
77 virtual size_t requestFrom(uint8_t address,
size_t len) {
78 requestFrom(address, len,
true);
83 return (read_pos<read_len) ? buffer[read_pos++] : -1;
88 return (read_pos<read_len) ? buffer[read_pos] : -1;
91 virtual int available() {
93 int buffer_available = read_len - read_pos;
94 return buffer_available;
97 virtual void onReceive(
void(*recieveHandler)(
int)) {
98 this->recieveHandler = recieveHandler;
99 Logger.error(
"onReceive not implemented yet");
102 virtual void onRequest(
void(*requestHandler)(
void)) {
103 this->requestHandler = requestHandler;
104 Logger.error(
"onRequest not implemented yet");
111 uint8_t transmission_address;
113 uint8_t *write_buffer;
119 uint8_t read_address;
120 uint8_t *read_buffer;
123 void(*recieveHandler)(int);
124 void(*requestHandler)(void)
127 bool flush(
bool end) {
128 int len = i2c_write_blocking(i2c, transmission_address, write_buffer, pos, !end);
132 void setupWriteBuffer(){
134 if (write_buffer==
nullptr){
135 write_buffer =
new uint8_t(maxBufferSize);
141 if (read_buffer==
nullptr)
142 read_buffer =
new uint8_t(maxBufferSize);
144 if (read_pos==read_len){
146 int len = min(i2c_get_read_available(i2c), maxBufferSize);
147 read_len = i2c_read_blocking(i2c, read_address, read_buffer, len, read_stop_bit);
Arduino I2C implementation using the Pico functionality.
Definition: PicoHardwareI2C.h:8
Definition: HardwareI2C.h:27