static mraa_intel_edison_pinmodes_t pinmodes[MRAA_INTEL_EDISON_PINCOUNT];
static unsigned int outputen[] = {248,249,250,251,252,253,254,255,256,257,258,259,260,261,232,233,234,235,236,237};
static unsigned int pullup_map[] = {216,217,218,219,220,221,222,223,224,225,226,227,228,229,208,209,210,211,212,213};
+static int miniboard = 0;
static mraa_result_t
mraa_intel_edison_pinmode_change(int sysfs, int mode)
if (dev == NULL)
return MRAA_ERROR_INVALID_RESOURCE;
- int sysfs = pinmodes[dev->phy_pin].gpio.sysfs;
- int mode = pinmodes[dev->phy_pin].gpio.mode;
+ int sysfs, mode;
+ if (miniboard == 1) {
+ sysfs = dev->pin;
+ mode = 0;
+ } else {
+ sysfs = pinmodes[dev->phy_pin].gpio.sysfs;
+ mode = pinmodes[dev->phy_pin].gpio.mode;
+ }
mraa_result_t ret = mraa_intel_edison_pinmode_change(sysfs, mode);
return ret;
mraa_result_t
mraa_intel_edison_pwm_init_pre(int pin)
{
+ if (miniboard == 1) {
+ return mraa_intel_edison_pinmode_change(plat->pins[pin].gpio.pinmap, 1);
+ }
if (pin < 0 || pin > 19)
return MRAA_ERROR_INVALID_RESOURCE;
return MRAA_SUCCESS;
}
+// EDISON MINIBOARD CHECKLIST
+// GPIO -
+// INPUT - Expected to work
+// OUTPUT - Expected to work
+// PWM - SEG FAULT
+// I2C - Some Issues need to be solved
+// SPI - Some Issues need to be solved
+
+mraa_result_t
+mraa_intel_edsion_miniboard(mraa_board_t* b)
+{
+ miniboard = 1;
+ b->phy_pin_count = 56;
+ b->gpio_count = 56; // A bit of a hack I suppose
+ b->aio_count = 0;
+
+ b->pins = (mraa_pininfo_t*) malloc(sizeof(mraa_pininfo_t)*56);
+
+ advance_func->gpio_init_post = &mraa_intel_edison_gpio_init_post;
+
+ ////FIXME i2c
+ ////pwm_init_pre
+ ////spi maybe
+ // // gpio drie modes
+
+ int pos = 0;
+ strncpy(b->pins[pos].name, "J17-1", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,1,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 182;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].pwm.pinmap = 2;
+ b->pins[pos].pwm.parent_id = 0;
+ b->pins[pos].pwm.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-2", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+ strncpy(b->pins[pos].name, "J17-3", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+ strncpy(b->pins[pos].name, "J17-4", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-5", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 135;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-6", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-7", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,1,0,0};
+ b->pins[pos].gpio.pinmap = 27;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].i2c.pinmap = 1;
+ b->pins[pos].i2c.mux_total = 0;
+ //FIXME
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-8", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,1,0,0};
+ b->pins[pos].gpio.pinmap = 20;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].i2c.pinmap = 1;
+ b->pins[pos].i2c.mux_total = 0;
+ //FIXME
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-9", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,1,0,0};
+ b->pins[pos].gpio.pinmap = 28;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].i2c.pinmap = 1;
+ b->pins[pos].i2c.mux_total = 0;
+ //FIXME
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-10", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,1,0,0,0};
+ b->pins[pos].gpio.pinmap = 111;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].spi.pinmap = 5;
+ b->pins[pos].spi.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-11", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,1,0,0,0};
+ b->pins[pos].gpio.pinmap = 109;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].spi.pinmap = 5;
+ b->pins[pos].spi.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-12", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,1,0,0,0};
+ b->pins[pos].gpio.pinmap = 115;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].spi.pinmap = 5;
+ b->pins[pos].spi.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J17-13", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+
+ strncpy(b->pins[pos].name, "J17-14", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 128;
+ b->pins[pos].gpio.parent_id = 0;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J18-1", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,1,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 13;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].pwm.pinmap = 1;
+ b->pins[pos].pwm.parent_id = 0;
+ b->pins[pos].pwm.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J18-2", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 165;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J18-3", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+ strncpy(b->pins[pos].name, "J18-4", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+ strncpy(b->pins[pos].name, "J18-5", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+
+ strncpy(b->pins[pos].name, "J18-6", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,1,0,0};
+ b->pins[pos].gpio.pinmap = 19;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].i2c.pinmap = 1;
+ b->pins[pos].i2c.mux_total = 0;
+ //FIXME
+ pos++;
+
+ strncpy(b->pins[pos].name, "J18-7", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,1,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 12;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].pwm.pinmap = 0;
+ b->pins[pos].pwm.parent_id = 0;
+ b->pins[pos].pwm.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J18-8", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,1,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 182;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].pwm.pinmap = 3;
+ b->pins[pos].pwm.parent_id = 0;
+ b->pins[pos].pwm.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J18-9", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+
+ strncpy(b->pins[pos].name, "J18-10", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,1,0,0,0};
+ b->pins[pos].gpio.pinmap = 110;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].spi.pinmap = 5;
+ b->pins[pos].spi.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J18-11", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,1,0,0,0};
+ b->pins[pos].gpio.pinmap = 114;
+ b->pins[pos].gpio.mux_total = 0;
+ b->pins[pos].spi.pinmap = 5;
+ b->pins[pos].spi.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J18-12", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 129;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J18-13", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 130;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J18-14", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+
+ strncpy(b->pins[pos].name, "J19-1", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+ strncpy(b->pins[pos].name, "J19-2", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+ strncpy(b->pins[pos].name, "J19-3", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+
+ strncpy(b->pins[pos].name, "J19-4", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 44;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J19-5", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 46;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J19-6", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 48;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J19-7", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+
+ strncpy(b->pins[pos].name, "J19-8", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 131;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J19-9", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 14;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J19-10", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 40;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J19-11", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 43;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J19-12", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 77;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J19-13", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 82;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J19-14", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 83;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+
+ strncpy(b->pins[pos].name, "J20-1", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+ strncpy(b->pins[pos].name, "J20-2", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+ strncpy(b->pins[pos].name, "J20-3", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
+ pos++;
+ strncpy(b->pins[pos].name, "J20-4", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 45;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-5", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 47;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-6", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 49;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-7", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 15;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-8", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 84;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-9", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 42;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-10", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 41;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-11", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 78;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-12", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 79;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-13", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 80;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+ strncpy(b->pins[pos].name, "J20-14", 8);
+ b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+ b->pins[pos].gpio.pinmap = 81;
+ b->pins[pos].gpio.mux_total = 0;
+ pos++;
+
+ return MRAA_SUCCESS;
+}
mraa_board_t*
mraa_intel_edison_fab_c()
if (b == NULL)
return NULL;
+ // This seciton will also check if the arduino board is there
+ tristate = mraa_gpio_init_raw(214);
+ if (tristate == NULL) {
+ syslog(LOG_INFO, "Intel Edison Failed to initialise Arduino board TriState,\
+ assuming Intel Edison Miniboard\n");
+ if (mraa_intel_edsion_miniboard(b) != MRAA_SUCCESS) {
+ free(b);
+ return NULL;
+ }
+ return b;
+ }
+ // Now Assuming the edison is attached to the Arduino board.
b->phy_pin_count = 20;
b->gpio_count = 14;
b->aio_count = 6;