#pragma once // https://github.com/raspberrypi/pico-examples/tree/master/i2c // https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html #include #include #include #define SDA_PIN 16 #define SCL_PIN 17 #define I2C_PORT i2c0 #define MAX_SLAVES 10 #define MAX_TIMEOUT_TIME 50 //ms /** * \brief initialize all required gpio for i2c usage on the pico * * This functions only initializes the standard gpio required to start i2c * communications. * * \note Tasks shouldn't depend on any other module in the main controller */ void init_i2c(); /** * \brief read data from addr with length len from i2c bus. * * This functions reads data from a specific address on the i2c bus, * the output var will hold the data which was read from said address with * length len. */ int read_i2c(uint8_t addr, uint8_t *output, size_t len); /** * \brief write data to addr with length len from i2c bus. * \param addr * \param input * \param len * This functions writes data to a specific address on the i2c bus, * the input var holds the data which will be written to the given * address with length len. */ int write_i2c(uint8_t addr, uint8_t *input, size_t len); /** * \brief */ int write_read_i2c(uint8_t addr, uint8_t *input, size_t input_len, uint8_t *output, size_t output_len); /** \brief looking for slave addresses and requesting updates */ void bus_task();