diff --git a/src/intel_edison_fab_c.c b/src/intel_edison_fab_c.c index 70ad5fd..7ca4d76 100644 --- a/src/intel_edison_fab_c.c +++ b/src/intel_edison_fab_c.c @@ -51,6 +51,7 @@ static mraa_gpio_context tristate; 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) @@ -110,8 +111,14 @@ mraa_intel_edison_gpio_init_post(mraa_gpio_context dev) 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; @@ -250,6 +257,9 @@ mraa_intel_edison_aio_init_post(mraa_aio_context dev) 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; @@ -374,6 +384,340 @@ mraa_intel_edison_gpio_mode_replace(mraa_gpio_context dev, gpio_mode_t mode) 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() @@ -382,6 +726,18 @@ 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;