diff --git a/api/mraa/common.h b/api/mraa/common.h index 54f3fbf..22ad47d 100644 --- a/api/mraa/common.h +++ b/api/mraa/common.h @@ -152,11 +152,26 @@ mraa_platform_t mraa_get_platform_type(); */ unsigned int mraa_get_pin_count(); +/** + * Get platform usable I2C bus count, board must be initialised. + * + * @return number f usable I2C bus count on the current platform. Function will + * return -1 on failure + */ +int mraa_get_i2c_bus_count(); + +/** + * Get I2C adapter number in sysfs. + * + * @param i2c_bus the logical I2C bus number + * @return I2C adapter number in sysfs. Function will return -1 on failure + */ +int mraa_get_i2c_bus_id(unsigned int i2c_bus); + /** * Get name of pin, board must be initialised. * * @param pin number -* * @return char* of pin name */ char* mraa_get_pin_name(int pin); diff --git a/examples/hellomraa.c b/examples/hellomraa.c index ae3e831..64c8bb2 100644 --- a/examples/hellomraa.c +++ b/examples/hellomraa.c @@ -32,9 +32,17 @@ int main(int argc, char** argv) { char* board_name = mraa_get_platform_name(); + int i2c_bus, i, i2c_adapter; fprintf(stdout, "hello mraa\n Version: %s\n Running on %s\n", mraa_get_version(), board_name); + i2c_bus = mraa_get_i2c_bus_count(); + + for (i = 0; i < i2c_bus; i++) { + i2c_adapter = mraa_get_i2c_bus_id(i); + fprintf(stdout, "I2C[%d] adapter=%d\n", i, i2c_adapter); + } + mraa_deinit(); return MRAA_SUCCESS; diff --git a/src/mraa.c b/src/mraa.c index 4580829..137ab91 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -312,6 +312,29 @@ mraa_get_platform_name() return (char*) plat->platform_name; } +int +mraa_get_i2c_bus_count() +{ + if (plat == NULL) { + return -1; + } + return plat->i2c_bus_count; +} + +int +mraa_get_i2c_bus_id(unsigned i2c_bus) +{ + if (plat == NULL) { + return -1; + } + + if (i2c_bus >= plat->i2c_bus_count) { + return -1; + } + + return plat->i2c_bus[i2c_bus].bus_id; +} + unsigned int mraa_get_pin_count() {