#define MRAA_SUB_PLATFORM_BIT_SHIFT 9
#define MRAA_SUB_PLATFORM_MASK (1<<MRAA_SUB_PLATFORM_BIT_SHIFT)
-#define MRAA_IS_ON_SUB_PLATFORM(pin_or_bus) (((pin_or_bus)|MRAA_SUB_PLATFORM_MASK) != 0)
-#define MRAA_USE_SUB_PLATFORM(pin_or_bus) ((pin_or_bus)|MRAA_SUB_PLATFORM_MASK)
-#define MRAA_GET_SUB_PLATFORM_INDEX(pin_or_bus) ((pin_or_bus)&(~MRAA_SUB_PLATFORM_MASK))
*/
int mraa_get_default_2c_bus();
+/**
+ * Check if pin or bus id includes sub platform mask.
+ *
+ * @param int pin or bus number
+ *
+ * @return mraa_boolean_t 1 if pin or bus is for sub platform, 0 otherwise
+ */
+mraa_boolean_t mraa_is_on_sub_platform(int pin_or_bus);
+
+/**
+ * Convert pin or bus id to corresponding sub platform id.
+ *
+ * @param int pin or bus number
+ *
+ * @return int sub platform pin or bus number
+ */
+int mraa_use_sub_platform(int pin_or_bus);
+
+/**
+ * Convert pin or bus sub platform id to base platform id.
+ *
+ * @param int sub platform pin or bus number
+ *
+ * @return int base platform pin or bus number
+ */
+int mraa_get_sub_platform_index(int pin_or_bus);
+
+
#ifdef __cplusplus
}
void
print_bus(mraa_board_t* board)
{
- int bus_index;
- int bus;
- for (bus = 0; bus < board->i2c_bus_count; ++bus) {
+ int i, bus;
+ for (i = 0; i < board->i2c_bus_count; ++i) {
char* busType;
switch (mraa_get_platform_type()) {
case MRAA_INTEL_GALILEO_GEN1:
case MRAA_RASPBERRY_PI:
case MRAA_BEAGLEBONE:
case MRAA_BANANA:
- bus_index = bus;
+ bus = i;
busType = "stdapi";
break;
case MRAA_FTDI_FT4222:
busType = "ft4222";
- bus_index = MRAA_USE_SUB_PLATFORM(bus);
+ bus = mraa_use_sub_platform(i);
break;
default:
busType = "unknown";
break;
}
- fprintf(stdout, "Bus %2d: id=%02d type=%s ", bus_index, plat->i2c_bus[bus].bus_id, busType);
- if (bus == plat->def_i2c_bus)
- fprintf(stdout, " default", bus);
- fprintf(stdout, "\n", bus);
+ fprintf(stdout, "Bus %2d: id=%02d type=%s ", bus, plat->i2c_bus[bus].bus_id, busType);
+ if (i == plat->def_i2c_bus)
+ fprintf(stdout, " default", i);
+ fprintf(stdout, "\n");
}
}
return NULL;
}
- if (MRAA_IS_ON_SUB_PLATFORM(bus)) {
+ if (mraa_is_on_sub_platform(bus)) {
syslog(LOG_NOTICE, "i2c: Using sub platform");
board = board->sub_platform;
if (board == NULL) {
syslog(LOG_ERR, "i2c: Sub platform Not Initialised");
return NULL;
}
- bus = MRAA_GET_SUB_PLATFORM_INDEX(bus);
+ bus = mraa_get_sub_platform_index(bus);
}
if (board->i2c_bus_count == 0) {
return ret;
}
+
+mraa_boolean_t
+mraa_is_on_sub_platform(int pin_or_bus)
+{
+ return (pin_or_bus | MRAA_SUB_PLATFORM_MASK) != 0;
+}
+
+int
+mraa_use_sub_platform(int pin_or_bus)
+{
+ return pin_or_bus | MRAA_SUB_PLATFORM_MASK;
+}
+
+int
+mraa_get_sub_platform_index(int pin_or_bus)
+{
+ return pin_or_bus & (~MRAA_SUB_PLATFORM_MASK);
+}