# I2C BB I2C bitbang gpio driver using gpio_sys gpio driver ## Installation ```shell make install ``` Installs `libi2c_bb.a` and `libi2c_bb.so` in the directory `$(PREFIX)/lib/`. It also installs the include header file `i2c.h` in the directory `$(PREFIX)/include/i2c_bb/`. The default value for `PREFIX` is: `PREFIX=usr`. To use another location for installation changing the value of the `PREFIX` variable is needed. E.g.: ```shell PREFIX=/usr/local/ make install ``` ## Uninstallation ```shell make install ``` Removes the files installed with the `install` make target. > **NOTE:** If `PREFIX` variable was changed during installation process the same value needs to be set for uninstallation. E.g.: ```shell PREFIX=/usr/local/ make install ``` ## Example ```C #include #include #include #include #include #include #define I2C_SLAVE_ADDR 0x48 #define BUFFER_SIZE 3 static const struct gpio_sys gpio_sda = { .pin = 4, .direction = 0, // out }; static const struct gpio_sys gpio_scl = { .pin = 24, .direction = 0, // out }; const static struct i2c_bb i2c_dev = { .sda = &gpio_sda, .scl = &gpio_scl, }; int main(void) { int res; char buffer[BUFFER_SIZE] openlog("i2c_bb", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); res = i2c_open(&i2c_dev); if(res != EXIT_SUCCESS) { syslog(LOG_ERR, "Unable to open i2c device.\n"); return res; } buffer[0] = 0x01; buffer[1] = 0xc1; buffer[2] = 0x87; // Write to register address 0x01 value 0xc187: i2c_write(&i2c_dev, I2C_SLAVE_ADDR, buffer, BUFFER_SIZE); buffer[0] = 0x00; // Set register address 0x00: i2c_write(&i2c_dev, addr, buffer, 1); // Read from register 0x00 two bytes: i2c_read(&i2c_dev, I2C_SLAVE_ADDR, buffer, 2); i2c_close(&i2c_dev); return EXIT_SUCCESS; } ``` ## Additional make targets | Target | Meaning | | --------------- | ----------------------------------------------------------- | | all | Build the code, assemble the static and shared library. | | install | Install the libraries and necessary include header files. | | uninstall | Uninstall the libraries and necessary include header files. | | clean | Clean up build artifacts. | | distclean | Remove all folders created during any build step. | | build_unit_test | Build the unit tests. | | exec_unit_test | Execute the unit tests. | | coverage | Determine code coverage of the unit tests. | | check | Static code analysis (cppcheck). |