mraa_result_t mraa_beaglebone_uart_init_pre(int index) { mraa_result_t ret = MRAA_ERROR_NO_RESOURCES; char devpath[MAX_SIZE]; char overlay[MAX_SIZE]; char* capepath = NULL; sprintf(devpath, "/dev/ttyO%u", index + 1); if (!mraa_file_exist(devpath)) { capepath = mraa_file_unglob(SYSFS_DEVICES_CAPEMGR_SLOTS); if (capepath == NULL) { syslog(LOG_ERR, "uart: Could not find CapeManager"); return ret; } FILE* fh; fh = fopen(capepath, "w"); if (fh == NULL) { free(capepath); syslog(LOG_ERR, "uart: Failed to open %s for writing, check access rights for user", capepath); return ret; } if (fprintf(fh, UART_OVERLAY, index + 1) < 0) { syslog(LOG_ERR, "uart: Failed to write to CapeManager"); } fclose(fh); free(capepath); } if (mraa_file_exist(devpath)) ret = MRAA_SUCCESS; else syslog(LOG_ERR, "uart: Device not initialized"); return ret; }
mraa_result_t mraa_raspberry_pi_i2c_init_pre(unsigned int bus) { char devpath[MAX_SIZE]; sprintf(devpath, "/dev/i2c-%u", bus); if (!mraa_file_exist(devpath)) { syslog(LOG_INFO, "spi: trying modprobe for i2c-bcm2708 & i2c-dev"); system("modprobe i2c-bcm2708 >/dev/null 2>&1"); system("modprobe i2c-dev >/dev/null 2>&1"); system("modprobe i2c_bcm2708 >/dev/null 2>&1"); system("modprobe i2c_dev >/dev/null 2>&1"); } if (!mraa_file_exist(devpath)) { syslog(LOG_ERR, "i2c: Device not initialized"); if (platform_detected == PLATFORM_RASPBERRY_PI_B_REV_1) { syslog(LOG_ERR, "i2c: If you run a kernel >=3.18 then you will have to add " "dtparam=i2c0=on to /boot/config.txt and reboot"); } else { syslog(LOG_ERR, "i2c: If you run a kernel >=3.18 then you will have to add " "dtparam=i2c1=on to /boot/config.txt and reboot"); } return MRAA_ERROR_NO_RESOURCES; } return MRAA_SUCCESS; }
mraa_result_t mraa_beaglebone_spi_init_pre(int index) { mraa_result_t ret = MRAA_ERROR_NO_RESOURCES; char devpath[MAX_SIZE]; char overlay[MAX_SIZE]; char* capepath = NULL; int deviceindex = 0; // The first initialized SPI devices always gets the bus id 1 // So we need to track down correct mapping and adjust the bus_id field if ((index == 0) && mraa_link_targets("/sys/class/spidev/spidev1.0", "48030000")) deviceindex = 1; if ((index == 0) && mraa_link_targets("/sys/class/spidev/spidev2.0", "48030000")) deviceindex = 2; if ((index == 1) && mraa_link_targets("/sys/class/spidev/spidev1.0", "481a0000")) deviceindex = 1; if ((index == 1) && mraa_link_targets("/sys/class/spidev/spidev2.0", "481a0000")) deviceindex = 2; if ((deviceindex == 0) && mraa_file_exist("/sys/class/spidev/spidev1.0")) deviceindex = 2; if (deviceindex == 0) deviceindex = 1; sprintf(devpath, "/dev/spidev%u.0", deviceindex); if (!mraa_file_exist(devpath)) { capepath = mraa_file_unglob(SYSFS_DEVICES_CAPEMGR_SLOTS); if (capepath == NULL) { syslog(LOG_ERR, "spi: Could not find CapeManager"); return ret; } FILE* fh; fh = fopen(capepath, "w"); if (fh == NULL) { free(capepath); syslog(LOG_ERR, "spi: Failed to open %s for writing, check access rights for user", capepath); return ret; } if (fprintf(fh, SPI_OVERLAY, index) < 0) { syslog(LOG_ERR, "spi: Failed to write to CapeManager, check that /lib/firmware/%s exists", SPI_OVERLAY, index); } fclose(fh); free(capepath); } if (mraa_file_exist(devpath)) { plat->spi_bus[index].bus_id = deviceindex; ret = MRAA_SUCCESS; } else { syslog(LOG_ERR, "spi: Device not initialized, check that /lib/firmware/%s exists", SPI_OVERLAY, index); syslog(LOG_ERR, "spi: Check http://elinux.org/BeagleBone_Black_Enable_SPIDEV for details"); } return ret; }
mraa_result_t mraa_banana_i2c_init_pre(unsigned int bus) { char devpath[MAX_SIZE]; sprintf(devpath, "/dev/i2c-%u", bus); if (!mraa_file_exist(devpath)) { syslog(LOG_INFO, "i2c: trying modprobe for i2c-dev"); system("modprobe i2c-dev >/dev/null 2>&1"); } if (!mraa_file_exist(devpath)) { syslog(LOG_ERR, "i2c: Device not initialized"); return MRAA_ERROR_NO_RESOURCES; } return MRAA_SUCCESS; }
mraa_result_t mraa_raspberry_pi_spi_init_pre(int index) { char devpath[MAX_SIZE]; sprintf(devpath, "/dev/spidev%u.0", plat->spi_bus[index].bus_id); if (!mraa_file_exist(devpath)) { syslog(LOG_ERR, "spi: Device not initialized"); syslog(LOG_ERR, "spi: If you run a kernel >=3.18 then you will have to add dtparam=spi=on " "to /boot/config.txt and reboot"); syslog(LOG_INFO, "spi: trying modprobe for spi-bcm2708"); system("modprobe spi-bcm2708 >/dev/null 2>&1"); system("modprobe spi_bcm2708 >/dev/null 2>&1"); if (!mraa_file_exist(devpath)) { return MRAA_ERROR_NO_RESOURCES; } } return MRAA_SUCCESS; }
mraa_result_t mraa_banana_spi_init_pre(int index) { char devpath[MAX_SIZE]; sprintf(devpath, "/dev/spidev%u.0", plat->spi_bus[index].bus_id); if (!mraa_file_exist(devpath)) { syslog(LOG_INFO, "spi: trying modprobe for spi-sun4i"); system("modprobe spi-sun4i >/dev/null 2>&1"); syslog(LOG_INFO, "spi: trying modprobe for spidev"); system("modprobe spidev >/dev/null 2>&1"); } if (!mraa_file_exist(devpath)) { syslog(LOG_ERR, "spi: Device not initialized"); syslog(LOG_ERR, "spi: If you run a kernel >=3.18 then most likely spi support does not yet " "fully work."); return MRAA_ERROR_NO_RESOURCES; } return MRAA_SUCCESS; }
mraa_result_t mraa_beaglebone_i2c_init_pre(unsigned int bus) { mraa_result_t ret = MRAA_ERROR_NO_RESOURCES; char devpath[MAX_SIZE]; char overlay[MAX_SIZE]; char* capepath = NULL; sprintf(devpath, "/dev/i2c-%u", plat->i2c_bus[bus].bus_id); if (!mraa_file_exist(devpath)) { capepath = mraa_file_unglob(SYSFS_DEVICES_CAPEMGR_SLOTS); if (capepath == NULL) { syslog(LOG_ERR, "i2c: Could not find CapeManager"); return ret; } FILE* fh; fh = fopen(capepath, "w"); if (fh == NULL) { free(capepath); syslog(LOG_ERR, "i2c: Failed to open %s for writing, check access rights for user", capepath); return ret; } if (fprintf(fh, "ADAFRUIT-I2C%d", bus) < 0) { syslog(LOG_ERR, "i2c: Failed to write to CapeManager, check that " "/lib/firmware/ADAFRUIT-I2C%d exists", index); } fclose(fh); } if (mraa_file_exist(devpath)) ret = MRAA_SUCCESS; else { syslog(LOG_ERR, "i2c: Device not initialized, check that /lib/firmware/ADAFRUIT-I2C%d exists", index); } return ret; }
int mraa_find_i2c_bus(const char* devname, int startfrom) { char path[64]; int fd; int i = startfrom; int ret = -1; // because feeding mraa_find_i2c_bus result back into the function is // useful treat -1 as 0 if (startfrom < 0) { startfrom = 0; } // find how many i2c buses we have if we haven't already if (num_i2c_devices == 0) { if (nftw("/sys/class/i2c-dev/", &mraa_count_i2c_files, 20, FTW_PHYS) == -1) { return -1; } } // i2c devices are numbered numerically so 0 must exist otherwise there is // no i2c-dev loaded if (mraa_file_exist("/sys/class/i2c-dev/i2c-0")) { for (i; i < num_i2c_devices; i++) { off_t size, err; snprintf(path, 64, "/sys/class/i2c-dev/i2c-%u/name", i); fd = open(path, O_RDONLY); if (fd < 0) { break; } size = lseek(fd, 0, SEEK_END); if (size < 0) { syslog(LOG_WARNING, "mraa: failed to seek i2c filename file"); close(fd); break; } err = lseek(fd, 0, SEEK_SET); if (err < 0) { syslog(LOG_WARNING, "mraa: failed to seek i2c filename file"); close(fd); break; } char* value = malloc(size); if (value == NULL) { syslog(LOG_ERR, "mraa: failed to allocate memory for i2c file"); close(fd); break; } ssize_t r = read(fd, value, size); if (r > 0) { if (strcasestr(value, devname) != NULL) { free(value); close(fd); return i; } } else { syslog(LOG_ERR, "mraa: sysfs i2cdev failed"); } free(value); close(fd); } } else { syslog(LOG_WARNING, "mraa: no i2c-dev detected, load i2c-dev"); } return ret; }
mraa_board_t* mraa_banana() { mraa_board_t* b = (mraa_board_t*) calloc(1, sizeof(mraa_board_t)); if (b == NULL) { return NULL; } platform_detected = 0; int i2c2 = -1; int spi0 = -1; int uart2 = -1; int uart3 = -1; int uart4 = -1; int uart7 = -1; if (mraa_file_exist(DT_BASE "/model")) { // We are on a modern kernel, great!!!! if (mraa_file_contains(DT_BASE "/model", "Banana Pro")) { b->platform_name = PLATFORM_NAME_BANANA_PRO; platform_detected = PLATFORM_BANANA_PRO; b->phy_pin_count = MRAA_BANANA_PRO_PINCOUNT; } if (mraa_file_contains(DT_BASE "/model", "Banana Pi")) { b->platform_name = PLATFORM_NAME_BANANA_PI; platform_detected = PLATFORM_BANANA_PI; b->phy_pin_count = MRAA_BANANA_PI_PINCOUNT; } if (mraa_file_contains(DT_BASE "/soc@01c00000/i2c@01c2b400/status", "okay")) { i2c2 = 1; } if (mraa_file_contains(DT_BASE "/soc@01c00000/spi@01c05000/status", "okay")) { spi0 = 1; } } else { if (mraa_file_exist("/sys/class/leds/green:ph24:led1")) { if (mraa_file_exist("/sys/class/leds/blue:pg02:led2")) { b->platform_name = PLATFORM_NAME_BANANA_PRO; platform_detected = PLATFORM_BANANA_PRO; b->phy_pin_count = MRAA_BANANA_PRO_PINCOUNT; } else { b->platform_name = PLATFORM_NAME_BANANA_PI; platform_detected = PLATFORM_BANANA_PI; b->phy_pin_count = MRAA_BANANA_PI_PINCOUNT; } if (mraa_file_exist("/sys/class/i2c-dev/i2c-2")) { i2c2 = 1; } if (mraa_file_exist("/sys/class/spi_master/spi0")) { spi0 = 1; } } } if (platform_detected == 0) { free(b); syslog(LOG_ERR, "mraa: Could not detect Banana Pi or Banana Pro"); return NULL; } int devnum; for (devnum = 0; devnum < 8; devnum++) { if (mraa_link_targets(seriallink[devnum], "1c28800")) { uart2 = devnum; } if (mraa_link_targets(seriallink[devnum], "1c28c00")) { uart3 = devnum; } if (mraa_link_targets(seriallink[devnum], "1c29000")) { uart4 = devnum; } if (mraa_link_targets(seriallink[devnum], "1c29c00")) { uart7 = devnum; } } for (devnum = 0; devnum < 5; devnum++) { if (mraa_link_targets(i2clink[devnum], "1c2b400")) { i2c2 = devnum; } } for (devnum = 0; devnum < 4; devnum++) { if (mraa_link_targets(spilink[devnum], "1c05000")) { spi0 = devnum; } } b->adv_func = (mraa_adv_func_t*) calloc(1, sizeof(mraa_adv_func_t)); if (b->adv_func == NULL) { free(b); return NULL; } b->pins = (mraa_pininfo_t*) calloc(b->phy_pin_count, sizeof(mraa_pininfo_t)); if (b->pins == NULL) { free(b->adv_func); free(b); return NULL; } b->adv_func->spi_init_pre = &mraa_banana_spi_init_pre; b->adv_func->i2c_init_pre = &mraa_banana_i2c_init_pre; b->adv_func->gpio_mmap_setup = &mraa_banana_mmap_setup; strncpy(b->pins[0].name, "INVALID", MRAA_PIN_NAME_SIZE); b->pins[0].capabilities = (mraa_pincapabilities_t){ 0, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[1].name, "3V3", MRAA_PIN_NAME_SIZE); b->pins[1].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[2].name, "5V", MRAA_PIN_NAME_SIZE); b->pins[2].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; if (i2c2 == 1) { strncpy(b->pins[3].name, "TWI2-SDA", MRAA_PIN_NAME_SIZE); // PB21 Pin53 TWI2-SDA b->pins[3].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 }; } else { strncpy(b->pins[3].name, "PB21", MRAA_PIN_NAME_SIZE); // PB21 Pin53 TWI2-SDA b->pins[3].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[3].gpio.pinmap = 53; strncpy(b->pins[4].name, "5V", MRAA_PIN_NAME_SIZE); b->pins[4].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; if (i2c2 == 1) { strncpy(b->pins[5].name, "TWI2-SCK", MRAA_PIN_NAME_SIZE); // PB20 Pin52 TWI2-SCK b->pins[5].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 }; } else { strncpy(b->pins[5].name, "PB20", MRAA_PIN_NAME_SIZE); // PB20 Pin52 TWI2-SCK b->pins[5].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[5].gpio.pinmap = 52; strncpy(b->pins[6].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[6].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; if (platform_detected == PLATFORM_BANANA_PRO) { strncpy(b->pins[7].name, "PH02", MRAA_PIN_NAME_SIZE); // PH2 Pin226 b->pins[7].gpio.pinmap = 226; } else { strncpy(b->pins[7].name, "PI03", MRAA_PIN_NAME_SIZE); // PI3 Pin259 PWM b->pins[7].gpio.pinmap = 259; } b->pins[7].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; if (platform_detected == PLATFORM_BANANA_PRO) { strncpy(b->pins[8].name, "UART4_TX", MRAA_PIN_NAME_SIZE); // PH4 Pin228 UART4_TX b->pins[8].gpio.pinmap = 228; } else { strncpy(b->pins[8].name, "UART3_TX", MRAA_PIN_NAME_SIZE); // PH0 Pin224 UART3_TX b->pins[8].gpio.pinmap = 224; } b->pins[8].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; strncpy(b->pins[9].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[9].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; if (platform_detected == PLATFORM_BANANA_PRO) { strncpy(b->pins[10].name, "UART4_RX", MRAA_PIN_NAME_SIZE); // PH5 Pin229 UART4_RX b->pins[10].gpio.pinmap = 229; } else { strncpy(b->pins[10].name, "UART3_RX", MRAA_PIN_NAME_SIZE); // PH1 Pin225 UART3_RX b->pins[10].gpio.pinmap = 225; } b->pins[10].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; strncpy(b->pins[11].name, "PI19", MRAA_PIN_NAME_SIZE); // PI19 Pin275 IO+UART2_RX b->pins[11].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[11].gpio.pinmap = 275; if (platform_detected == PLATFORM_BANANA_PRO) { strncpy(b->pins[12].name, "PI03", MRAA_PIN_NAME_SIZE); // PI3 Pin259 PWM b->pins[12].gpio.pinmap = 259; } else { strncpy(b->pins[12].name, "PH02", MRAA_PIN_NAME_SIZE); // PH2 Pin226 b->pins[12].gpio.pinmap = 226; } b->pins[12].capabilities = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; strncpy(b->pins[13].name, "PI18", MRAA_PIN_NAME_SIZE); // PI18 Pin274 UART2_TX b->pins[13].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[13].gpio.pinmap = 274; strncpy(b->pins[14].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[14].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[15].name, "PI17", MRAA_PIN_NAME_SIZE); // PI17 Pin273 UART2_CTS b->pins[15].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[15].gpio.pinmap = 273; strncpy(b->pins[16].name, "PH20", MRAA_PIN_NAME_SIZE); // PH20 Pin 244 CAN_TX b->pins[16].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[16].gpio.pinmap = 244; strncpy(b->pins[17].name, "3V3", MRAA_PIN_NAME_SIZE); b->pins[17].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[18].name, "PH21", MRAA_PIN_NAME_SIZE); // PH21 Pin245 CAN_RX b->pins[18].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[18].gpio.pinmap = 245; strncpy(b->pins[19].name, "SPI0MOSI", MRAA_PIN_NAME_SIZE); // PI12 SPI0 b->pins[19].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[19].gpio.pinmap = 268; strncpy(b->pins[20].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[20].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[21].name, "SPI0MISO", MRAA_PIN_NAME_SIZE); // PI13 SPI0 b->pins[21].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[21].gpio.pinmap = 269; strncpy(b->pins[22].name, "PI16", MRAA_PIN_NAME_SIZE); // PI16 UART2_RTS b->pins[22].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[22].gpio.pinmap = 272; strncpy(b->pins[23].name, "SPI0CLK", MRAA_PIN_NAME_SIZE); // PI11 SPI0 b->pins[23].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[23].gpio.pinmap = 267; strncpy(b->pins[24].name, "SPI0CS0", MRAA_PIN_NAME_SIZE); // PI10 SPI0 b->pins[24].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[24].gpio.pinmap = 266; strncpy(b->pins[25].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[25].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[26].name, "SPI0CS1", MRAA_PIN_NAME_SIZE); // PI14 SPI0 b->pins[26].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[26].gpio.pinmap = 270; if (platform_detected == PLATFORM_BANANA_PI) { strncpy(b->pins[27].name, "5V", MRAA_PIN_NAME_SIZE); b->pins[27].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[28].name, "3V3", MRAA_PIN_NAME_SIZE); b->pins[28].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[29].name, "PH05", MRAA_PIN_NAME_SIZE); // PH5 b->pins[29].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[29].gpio.pinmap = 229; strncpy(b->pins[30].name, "PI21", MRAA_PIN_NAME_SIZE); // PI21 UART7_RX b->pins[30].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[30].gpio.pinmap = 277; strncpy(b->pins[31].name, "PH03", MRAA_PIN_NAME_SIZE); // PH3 b->pins[31].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[31].gpio.pinmap = 227; strncpy(b->pins[32].name, "PI20", MRAA_PIN_NAME_SIZE); // PI20 UART7_TX b->pins[32].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[32].gpio.pinmap = 276; strncpy(b->pins[33].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[33].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[34].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[34].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } if (platform_detected == PLATFORM_BANANA_PRO) { strncpy(b->pins[27].name, "HAT_SDA", MRAA_PIN_NAME_SIZE); // PI1 TWI3-SDA i2c3 b->pins[27].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; b->pins[27].gpio.pinmap = 257; strncpy(b->pins[28].name, "HAT_SCK", MRAA_PIN_NAME_SIZE); // PI0 TWI3-SCK i2c3 b->pins[28].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; b->pins[28].gpio.pinmap = 256; strncpy(b->pins[29].name, "PB03", MRAA_PIN_NAME_SIZE); // PB3 IR0_TX/SPDIF_MCLK b->pins[29].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[29].gpio.pinmap = 35; strncpy(b->pins[30].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[30].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[31].name, "PI21", MRAA_PIN_NAME_SIZE); // PI21 UART7_RX b->pins[31].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[31].gpio.pinmap = 277; strncpy(b->pins[32].name, "PI20", MRAA_PIN_NAME_SIZE); // PI20 UART7_TX b->pins[32].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[32].gpio.pinmap = 276; strncpy(b->pins[33].name, "PB13", MRAA_PIN_NAME_SIZE); // PB13 SPDIF_D0 b->pins[33].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[33].gpio.pinmap = 45; strncpy(b->pins[34].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[34].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[35].name, "PB07", MRAA_PIN_NAME_SIZE); // PB07 I2S0_LRCK b->pins[35].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[35].gpio.pinmap = 39; strncpy(b->pins[36].name, "PB06", MRAA_PIN_NAME_SIZE); // PB06 I2S0BCLK b->pins[36].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[36].gpio.pinmap = 38; strncpy(b->pins[37].name, "PB05", MRAA_PIN_NAME_SIZE); // PB05 I2S0MCK b->pins[37].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[37].gpio.pinmap = 37; strncpy(b->pins[38].name, "PB12", MRAA_PIN_NAME_SIZE); // PB12 I2S0_DI b->pins[38].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[38].gpio.pinmap = 44; strncpy(b->pins[39].name, "GND", MRAA_PIN_NAME_SIZE); b->pins[39].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[40].name, "PB08", MRAA_PIN_NAME_SIZE); // PB08 I2S0_DO0 b->pins[40].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[40].gpio.pinmap = 40; } b->aio_count = 0; b->adc_raw = 0; b->adc_supported = 0; b->pwm_default_period = 500; b->pwm_max_period = 2147483; b->pwm_min_period = 1; b->gpio_count = 0; int i; for (i = 0; i < b->phy_pin_count; i++) { if (b->pins[i].capabilities.gpio) { b->gpio_count++; } } // BUS DEFINITIONS b->i2c_bus_count = 0; b->def_i2c_bus = 0; if (i2c2 >= 0) { b->i2c_bus[b->i2c_bus_count].bus_id = i2c2; b->i2c_bus[b->i2c_bus_count].sda = 3; b->i2c_bus[b->i2c_bus_count].scl = 5; b->i2c_bus_count++; } b->spi_bus_count = 0; b->def_spi_bus = 0; if (spi0 >= 0) { b->spi_bus[b->spi_bus_count].bus_id = spi0; b->spi_bus[b->spi_bus_count].slave_s = 0; b->spi_bus[b->spi_bus_count].cs = 24; b->spi_bus[b->spi_bus_count].mosi = 19; b->spi_bus[b->spi_bus_count].miso = 21; b->spi_bus[b->spi_bus_count].sclk = 23; b->spi_bus_count++; } b->uart_dev_count = 0; b->def_uart_dev = 0; if ((uart3 >= 0) && (platform_detected == PLATFORM_BANANA_PI)) { b->def_uart_dev = b->uart_dev_count; b->uart_dev[b->uart_dev_count].device_path = serialdev[uart3]; b->uart_dev[b->uart_dev_count].rx = 11; b->uart_dev[b->uart_dev_count].tx = 13; b->uart_dev_count++; } if ((uart4 >= 0) && (platform_detected == PLATFORM_BANANA_PRO)) { b->def_uart_dev = b->uart_dev_count; b->uart_dev[b->uart_dev_count].device_path = serialdev[uart4]; b->uart_dev[b->uart_dev_count].rx = 10; b->uart_dev[b->uart_dev_count].tx = 8; b->uart_dev_count++; } if (uart7 >= 0) { b->uart_dev[b->uart_dev_count].device_path = serialdev[uart7]; if (platform_detected == PLATFORM_BANANA_PRO) { b->uart_dev[b->uart_dev_count].rx = 31; b->uart_dev[b->uart_dev_count].tx = 32; } else { b->uart_dev[b->uart_dev_count].rx = 30; b->uart_dev[b->uart_dev_count].tx = 32; } b->uart_dev_count++; } if (uart2 >= 0) { b->uart_dev[b->uart_dev_count].device_path = serialdev[uart2]; b->uart_dev[b->uart_dev_count].rx = 11; b->uart_dev[b->uart_dev_count].tx = 13; b->uart_dev_count++; } return b; }
mraa_board_t* mraa_96boards() { int i, pin; int *ls_gpio_pins = NULL; char ch; mraa_board_t* b = (mraa_board_t*) calloc(1, sizeof(mraa_board_t)); if (b == NULL) { return NULL; } // pin mux for buses are setup by default by kernel so tell mraa to ignore them b->no_bus_mux = 1; b->phy_pin_count = MRAA_96BOARDS_LS_PIN_COUNT + 1; if (mraa_file_exist(DT_BASE "/model")) { // We are on a modern kernel, great!!!! if (mraa_file_contains(DT_BASE "/model", "Qualcomm Technologies, Inc. APQ 8016 SBC")) { b->platform_name = PLATFORM_NAME_DB410C; ls_gpio_pins = db410c_ls_gpio_pins; b->uart_dev[0].device_path = db410c_serialdev[0]; b->uart_dev[1].device_path = db410c_serialdev[1]; } else if (mraa_file_contains(DT_BASE "/model", "HiKey Development Board")) { b->platform_name = PLATFORM_NAME_HIKEY; ls_gpio_pins = hikey_ls_gpio_pins; b->uart_dev[0].device_path = hikey_serialdev[0]; b->uart_dev[1].device_path = hikey_serialdev[1]; } } //UART b->uart_dev_count = MRAA_96BOARDS_LS_UART_COUNT; b->def_uart_dev = 0; //I2C b->i2c_bus_count = MRAA_96BOARDS_LS_I2C_COUNT; b->def_i2c_bus = 0; b->i2c_bus[0].bus_id = 0; b->i2c_bus[1].bus_id= 1; //SPI b->spi_bus_count = MRAA_96BOARDS_LS_SPI_COUNT; b->spi_bus[0].bus_id = 0; b->def_spi_bus = 0; b->adv_func = (mraa_adv_func_t*) calloc(1, sizeof(mraa_adv_func_t)); if (b->adv_func == NULL) { free(b); return NULL; } b->pins = (mraa_pininfo_t*) malloc(sizeof(mraa_pininfo_t) * b->phy_pin_count); if (b->pins == NULL) { free(b->adv_func); free(b); return NULL; } mraa_96boards_pininfo(b, 0, -1, "INVALID"); mraa_96boards_pininfo(b, 1, -1, "GND"); mraa_96boards_pininfo(b, 2, -1, "GND"); mraa_96boards_pininfo(b, 3, -1, "UART0_CTS"); mraa_96boards_pininfo(b, 4, -1, "PWR_BTN_N"); mraa_96boards_pininfo(b, 5, -1, "UART0_TXD"); mraa_96boards_pininfo(b, 6, -1, "RST_BTN_N"); mraa_96boards_pininfo(b, 7, -1, "UART0_RXD"); mraa_96boards_pininfo(b, 8, -1, "SPI0_SCLK"); mraa_96boards_pininfo(b, 9, -1, "UART0_RTS"); mraa_96boards_pininfo(b, 10, -1, "SPI0_DIN"); mraa_96boards_pininfo(b, 11, -1, "UART1_TXD"); mraa_96boards_pininfo(b, 12, -1, "SPI0_CS"); mraa_96boards_pininfo(b, 13, -1, "UART1_RXD"); mraa_96boards_pininfo(b, 14, -1, "SPI0_DOUT"); mraa_96boards_pininfo(b, 15, -1, "I2C0_SCL"); mraa_96boards_pininfo(b, 16, -1, "PCM_FS"); mraa_96boards_pininfo(b, 17, -1, "I2C0_SDA"); mraa_96boards_pininfo(b, 18, -1, "PCM_CLK"); mraa_96boards_pininfo(b, 19, -1, "I2C1_SCL"); mraa_96boards_pininfo(b, 20, -1, "PCM_DO"); mraa_96boards_pininfo(b, 21, -1, "I2C1_SDA"); mraa_96boards_pininfo(b, 22, -1, "PCM_DI"); // GPIOs are labelled "GPIO-A" through "GPIO-L" for (i = 0; i < MRAA_96BOARDS_LS_GPIO_COUNT; i++) { mraa_96boards_pininfo(b, 23 + i, ls_gpio_pins ? ls_gpio_pins[i] : -1, "GPIO-%c", 'A'+i); } mraa_96boards_pininfo(b, 35, -1, "1.8v"); mraa_96boards_pininfo(b, 36, -1, "SYS_DCIN"); mraa_96boards_pininfo(b, 37, -1, "5v"); mraa_96boards_pininfo(b, 38, -1, "SYS_DCIN"); mraa_96boards_pininfo(b, 39, -1, "GND"); mraa_96boards_pininfo(b, 40, -1, "GND"); b->gpio_count = MRAA_96BOARDS_LS_GPIO_COUNT; b->aio_count = 0; b->adc_raw = 0; b->adc_supported = 0; return b; }
mraa_platform_t mraa_arm_platform() { mraa_platform_t platform_type = MRAA_UNKNOWN_PLATFORM; size_t len = 100; char* line = malloc(len); FILE* fh = fopen("/proc/cpuinfo", "r"); if (fh != NULL) { while (getline(&line, &len, fh) != -1) { if (strncmp(line, "Hardware", 8) == 0) { if (strstr(line, "BCM2708")) { platform_type = MRAA_RASPBERRY_PI; } else if (strstr(line, "BCM2709")) { platform_type = MRAA_RASPBERRY_PI; } else if (strstr(line, "BCM2835")) { platform_type = MRAA_RASPBERRY_PI; } else if (strstr(line, "Generic AM33XX")) { if(mraa_file_contains("/proc/device-tree/model", "phyBOARD-WEGA")) { platform_type = MRAA_PHYBOARD_WEGA; } else { platform_type = MRAA_BEAGLEBONE; } } else if (strstr(line, "HiKey Development Board")) { platform_type = MRAA_96BOARDS; } else if (strstr(line, "s900")) { platform_type = MRAA_96BOARDS; } else if (strstr(line, "sun7i")) { if (mraa_file_contains("/proc/device-tree/model", "Banana Pro")) { platform_type = MRAA_BANANA; } else if (mraa_file_contains("/proc/device-tree/model", "Banana Pi")) { platform_type = MRAA_BANANA; } // For old kernels else if (mraa_file_exist("/sys/class/leds/green:ph24:led1")) { platform_type = MRAA_BANANA; } } else if (strstr(line, "DE0/DE10-Nano-SoC")) { platform_type = MRAA_DE_NANO_SOC; // For different kernel version(s) of DE10-Nano } else if (strstr(line, "Altera SOCFPGA")) { platform_type = MRAA_DE_NANO_SOC; } } } fclose(fh); } free(line); /* Get compatible string from Device tree for boards that dont have enough info in /proc/cpuinfo */ if (platform_type == MRAA_UNKNOWN_PLATFORM) { if (mraa_file_contains("/proc/device-tree/model", "s900")) platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/compatible", "qcom,apq8016-sbc")) platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/compatible", "arrow,apq8096-db820c")) platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/model", "HiKey Development Board")) platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/model", "HiKey960")) platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/model", "ROCK960")) platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/model", "ZynqMP ZCU100 RevC")) platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/model", "Avnet Ultra96 Rev1")) platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/model", "ROCK PI 4")) platform_type = MRAA_ROCKPI4; else if (mraa_file_contains("/proc/device-tree/compatible", "raspberrypi,")) platform_type = MRAA_RASPBERRY_PI; } switch (platform_type) { case MRAA_RASPBERRY_PI: plat = mraa_raspberry_pi(); break; case MRAA_BEAGLEBONE: plat = mraa_beaglebone(); break; case MRAA_PHYBOARD_WEGA: plat = mraa_phyboard(); break; case MRAA_BANANA: plat = mraa_banana(); break; case MRAA_96BOARDS: plat = mraa_96boards(); break; case MRAA_ROCKPI4: plat = mraa_rockpi4(); break; case MRAA_DE_NANO_SOC: plat = mraa_de_nano_soc(); break; default: plat = NULL; syslog(LOG_ERR, "Unknown Platform, currently not supported by MRAA"); } return platform_type; }
mraa_board_t* mraa_beaglebone() { unsigned int emmc_enabled = 1; unsigned int hdmi_enabled = 1; unsigned int i2c0_enabled = 1; unsigned int i2c1_enabled = 1; unsigned int spi0_enabled = 0; unsigned int spi1_enabled = 0; unsigned int uart1_enabled = 0; unsigned int uart2_enabled = 0; unsigned int uart3_enabled = 0; unsigned int uart4_enabled = 0; unsigned int uart5_enabled = 0; unsigned int is_rev_c = 0; size_t len = 0; char* line = NULL; FILE* fh; fh = fopen(SYSFS_CLASS_MMC "mmc1/mmc1:0001/name", "r"); if (fh != NULL) { emmc_enabled = 1; if (getline(&line, &len, fh) != -1) { if (strstr(line, "MMC04G")) { is_rev_c = 1; } } fclose(fh); free(line); } else emmc_enabled = 0; if (mraa_file_exist("/sys/devices/ocp.*/hdmi.*")) hdmi_enabled = 1; else hdmi_enabled = 0; if (mraa_file_exist("/sys/class/i2c-dev/i2c-0")) i2c0_enabled = 1; else i2c0_enabled = 0; if (mraa_file_exist("/sys/class/i2c-dev/i2c-1")) i2c1_enabled = 1; else i2c1_enabled = 0; if (mraa_file_exist("/sys/class/spidev/spidev1.0")) spi0_enabled = 1; else spi0_enabled = 0; if (mraa_file_exist("/sys/class/spidev/spidev2.0")) spi1_enabled = 1; else spi1_enabled = 0; if (mraa_file_exist("/sys/class/tty/ttyO1")) uart1_enabled = 1; else uart1_enabled = 0; if (mraa_file_exist("/sys/class/tty/ttyO2")) uart2_enabled = 1; else uart2_enabled = 0; if (mraa_file_exist("/sys/class/tty/ttyO3")) uart3_enabled = 1; else uart3_enabled = 0; if (mraa_file_exist("/sys/class/tty/ttyO4")) uart4_enabled = 1; else uart4_enabled = 0; if (mraa_file_exist("/sys/class/tty/ttyO5")) uart5_enabled = 1; else uart5_enabled = 0; mraa_board_t* b = (mraa_board_t*) malloc(sizeof(mraa_board_t)); if (b == NULL) return NULL; // TODO: Detect Beaglebone Black Revisions, for now always TYPE B if (is_rev_c == 0) { b->platform_name = PLATFORM_NAME_BEAGLEBONE_BLACK_REV_B; b->phy_pin_count = MRAA_BEAGLEBONE_BLACK_PINCOUNT; } if (is_rev_c == 1) { b->platform_name = PLATFORM_NAME_BEAGLEBONE_BLACK_REV_C; b->phy_pin_count = MRAA_BEAGLEBONE_BLACK_PINCOUNT; } if (b->platform_name == NULL) { goto error; } b->aio_count = 7; b->adc_raw = 12; b->adc_supported = 12; b->pwm_default_period = 500; b->pwm_max_period = 2147483; b->pwm_min_period = 1; b->pins = (mraa_pininfo_t*) malloc(sizeof(mraa_pininfo_t) * b->phy_pin_count); advance_func->uart_init_pre = &mraa_beaglebone_uart_init_pre; advance_func->spi_init_pre = &mraa_beaglebone_spi_init_pre; advance_func->i2c_init_pre = &mraa_beaglebone_i2c_init_pre; advance_func->pwm_init_replace = &mraa_beaglebone_pwm_init_replace; strncpy(b->pins[0].name, "INVALID", 8); b->pins[0].capabilites = (mraa_pincapabilities_t){ 0, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[1].name, "GND", 8); b->pins[1].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[2].name, "GND", 8); b->pins[2].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; if (emmc_enabled == 1) { strncpy(b->pins[3].name, "MMC1_D6", 8); b->pins[3].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[3].name, "GPIO38", 8); b->pins[3].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[3].gpio.pinmap = 38; b->pins[3].gpio.parent_id = 0; b->pins[3].gpio.mux_total = 0; if (emmc_enabled == 1) { strncpy(b->pins[4].name, "MMC1_D7", 8); b->pins[4].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[4].name, "GPIO39", 8); b->pins[4].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[4].gpio.pinmap = 39; b->pins[4].gpio.parent_id = 0; b->pins[4].gpio.mux_total = 0; if (emmc_enabled == 1) { strncpy(b->pins[5].name, "MMC1_D2", 8); b->pins[5].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[5].name, "GPIO34", 8); b->pins[5].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[5].gpio.pinmap = 34; b->pins[5].gpio.parent_id = 0; b->pins[5].gpio.mux_total = 0; if (emmc_enabled == 1) { strncpy(b->pins[6].name, "MMC1_D3", 8); b->pins[6].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[6].name, "GPIO35", 8); b->pins[6].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[6].gpio.pinmap = 35; b->pins[6].gpio.parent_id = 0; b->pins[6].gpio.mux_total = 0; // TODO TIMER4 strncpy(b->pins[7].name, "GPIO66", 8); b->pins[7].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[7].gpio.pinmap = 66; b->pins[7].gpio.parent_id = 0; b->pins[7].gpio.mux_total = 0; // TODO TIMER7 strncpy(b->pins[8].name, "GPIO67", 8); b->pins[8].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[8].gpio.pinmap = 67; b->pins[8].gpio.parent_id = 0; b->pins[8].gpio.mux_total = 0; // TODO TIMER5 strncpy(b->pins[9].name, "GPIO69", 8); b->pins[9].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[9].gpio.pinmap = 69; b->pins[9].gpio.parent_id = 0; b->pins[9].gpio.mux_total = 0; // TODO TIMER6 strncpy(b->pins[10].name, "GPIO68", 8); b->pins[10].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[10].gpio.pinmap = 68; b->pins[10].gpio.parent_id = 0; b->pins[10].gpio.mux_total = 0; strncpy(b->pins[11].name, "GPIO45", 8); b->pins[11].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[11].gpio.pinmap = 45; b->pins[11].gpio.parent_id = 0; b->pins[11].gpio.mux_total = 0; strncpy(b->pins[12].name, "GPIO44", 8); b->pins[12].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[12].gpio.pinmap = 44; b->pins[12].gpio.parent_id = 0; b->pins[12].gpio.mux_total = 0; strncpy(b->pins[13].name, "GPIO23", 8); b->pins[13].capabilites = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; b->pins[13].gpio.pinmap = 23; b->pins[13].gpio.parent_id = 0; b->pins[13].gpio.mux_total = 0; strncpy(b->pins[14].name, "GPIO26", 8); b->pins[14].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[14].gpio.pinmap = 26; b->pins[14].gpio.parent_id = 0; b->pins[14].gpio.mux_total = 0; strncpy(b->pins[15].name, "GPIO47", 8); b->pins[15].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[15].gpio.pinmap = 47; b->pins[15].gpio.parent_id = 0; b->pins[15].gpio.mux_total = 0; strncpy(b->pins[16].name, "GPIO46", 8); b->pins[16].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[16].gpio.pinmap = 46; b->pins[16].gpio.parent_id = 0; b->pins[16].gpio.mux_total = 0; // TODO PWM0_SYNCO strncpy(b->pins[17].name, "GPIO27", 8); b->pins[17].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[17].gpio.pinmap = 27; b->pins[17].gpio.parent_id = 0; b->pins[17].gpio.mux_total = 0; strncpy(b->pins[18].name, "GPIO65", 8); b->pins[18].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[18].gpio.pinmap = 65; b->pins[18].gpio.parent_id = 0; b->pins[18].gpio.mux_total = 0; // TODO PWM_2A strncpy(b->pins[19].name, "GPIO22", 8); b->pins[19].capabilites = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; b->pins[19].gpio.pinmap = 22; b->pins[19].gpio.parent_id = 0; b->pins[19].gpio.mux_total = 0; if (emmc_enabled == 1) { strncpy(b->pins[20].name, "MMC1_CMD", 8); b->pins[20].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[20].name, "GPIO63", 8); b->pins[20].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[20].gpio.pinmap = 63; b->pins[20].gpio.parent_id = 0; b->pins[20].gpio.mux_total = 0; if (emmc_enabled == 1) { strncpy(b->pins[21].name, "MMC1_CLK", 8); b->pins[21].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[21].name, "GPIO62", 8); b->pins[21].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[21].gpio.pinmap = 62; b->pins[21].gpio.parent_id = 0; b->pins[21].gpio.mux_total = 0; if (emmc_enabled == 1) { strncpy(b->pins[22].name, "MMC1_D5", 8); b->pins[22].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[22].name, "GPIO37", 8); b->pins[22].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[22].gpio.pinmap = 37; b->pins[22].gpio.parent_id = 0; b->pins[22].gpio.mux_total = 0; if (emmc_enabled == 1) { strncpy(b->pins[23].name, "MMC_D4", 8); b->pins[23].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[23].name, "GPIO36", 8); b->pins[23].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[23].gpio.pinmap = 36; b->pins[23].gpio.parent_id = 0; b->pins[23].gpio.mux_total = 0; if (emmc_enabled == 1) { strncpy(b->pins[24].name, "MMC_D1", 8); b->pins[24].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[24].name, "GPIO33", 8); b->pins[24].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[24].gpio.pinmap = 33; b->pins[24].gpio.parent_id = 0; b->pins[24].gpio.mux_total = 0; if (emmc_enabled == 1) { strncpy(b->pins[25].name, "MMC1_D0", 8); b->pins[25].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[25].name, "GPIO32", 8); b->pins[25].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[25].gpio.pinmap = 32; b->pins[25].gpio.parent_id = 0; b->pins[25].gpio.mux_total = 0; strncpy(b->pins[26].name, "GPIO61", 8); b->pins[26].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[26].gpio.pinmap = 61; b->pins[26].gpio.parent_id = 0; b->pins[26].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[27].name, "LCD_VSYNC", 8); b->pins[27].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[27].name, "GPIO86", 8); b->pins[27].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[27].gpio.pinmap = 86; b->pins[27].gpio.parent_id = 0; b->pins[27].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[28].name, "LCD_PCLK", 8); b->pins[28].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[28].name, "GPIO88", 8); b->pins[28].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[28].gpio.pinmap = 88; b->pins[28].gpio.parent_id = 0; b->pins[28].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[29].name, "LCD_HSYNC", 8); b->pins[29].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[29].name, "GPIO87", 8); b->pins[29].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[29].gpio.pinmap = 87; b->pins[29].gpio.parent_id = 0; b->pins[29].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[30].name, "LCD_AC_BIAS", 8); b->pins[30].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[30].name, "GPIO89", 8); b->pins[30].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[30].gpio.pinmap = 89; b->pins[30].gpio.parent_id = 0; b->pins[30].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[31].name, "LCD_D14", 8); b->pins[31].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { // TODO UART5_CTS this is ignored when using ADAFRUIT strncpy(b->pins[31].name, "GPIO10", 8); b->pins[31].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[31].gpio.pinmap = 10; b->pins[31].gpio.parent_id = 0; b->pins[31].gpio.mux_total = 0; b->pins[31].uart.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[32].name, "LCD_D15", 8); b->pins[32].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { // TODO UART5_RTS this is ignored when using ADAFRUIT strncpy(b->pins[32].name, "GPIO11", 8); b->pins[32].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[32].gpio.pinmap = 11; b->pins[32].gpio.parent_id = 0; b->pins[32].gpio.mux_total = 0; b->pins[32].uart.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[33].name, "LCD_D13", 8); b->pins[33].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { // TODO UART4_RTS this is ignored when using ADAFRUIT strncpy(b->pins[33].name, "GPIO9", 8); b->pins[33].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[33].gpio.pinmap = 9; b->pins[33].gpio.parent_id = 0; b->pins[33].gpio.mux_total = 0; b->pins[33].uart.mux_total = 0; // TODO PWM_1B if (hdmi_enabled == 1) { strncpy(b->pins[34].name, "LCD_D11", 8); b->pins[34].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[34].name, "GPIO81", 8); b->pins[34].capabilites = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; } b->pins[34].gpio.pinmap = 81; b->pins[34].gpio.parent_id = 0; b->pins[34].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[35].name, "LCD_D12", 8); b->pins[35].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { // TODO UART4_CTS this is ignored when using ADAFRUIT strncpy(b->pins[35].name, "GPIO8", 8); b->pins[35].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[35].gpio.pinmap = 8; b->pins[35].gpio.parent_id = 0; b->pins[35].gpio.mux_total = 0; b->pins[35].uart.mux_total = 0; // TODO PWM_1A if (hdmi_enabled == 1) { strncpy(b->pins[36].name, "LCD_D10", 8); b->pins[36].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[36].name, "GPIO80", 8); b->pins[36].capabilites = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; } b->pins[36].gpio.pinmap = 80; b->pins[36].gpio.parent_id = 0; b->pins[36].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[37].name, "LCD_D8", 8); b->pins[37].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { if (uart5_enabled == 1) { strncpy(b->pins[37].name, "UART5TX", 8); b->pins[37].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } else { strncpy(b->pins[37].name, "GPIO78", 8); b->pins[37].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } } b->pins[37].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[37].gpio.pinmap = 78; b->pins[37].gpio.parent_id = 0; b->pins[37].gpio.mux_total = 0; b->pins[37].uart.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[38].name, "LCD_D9", 8); b->pins[38].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { // TODO UART5_RX if (uart5_enabled == 1) { strncpy(b->pins[38].name, "UART5RX", 8); b->pins[38].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } else { strncpy(b->pins[38].name, "GPIO79", 8); b->pins[38].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } } b->pins[38].gpio.pinmap = 79; b->pins[38].gpio.parent_id = 0; b->pins[38].gpio.mux_total = 0; b->pins[38].uart.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[39].name, "LCD_D6", 8); b->pins[39].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[39].name, "GPIO76", 8); b->pins[39].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[39].gpio.pinmap = 76; b->pins[39].gpio.parent_id = 0; b->pins[39].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[40].name, "LCD_D7", 8); b->pins[40].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[40].name, "GPIO77", 8); b->pins[40].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[40].gpio.pinmap = 77; b->pins[40].gpio.parent_id = 0; b->pins[40].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[41].name, "LCD_D4", 8); b->pins[41].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[41].name, "GPIO74", 8); b->pins[41].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[41].gpio.pinmap = 74; b->pins[41].gpio.parent_id = 0; b->pins[41].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[42].name, "LCD_D5", 8); b->pins[42].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[42].name, "GPIO75", 8); b->pins[42].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[42].gpio.pinmap = 75; b->pins[42].gpio.parent_id = 0; b->pins[42].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[43].name, "LCD_D2", 8); b->pins[43].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[43].name, "GPIO72", 8); b->pins[43].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[43].gpio.pinmap = 72; b->pins[43].gpio.parent_id = 0; b->pins[43].gpio.mux_total = 0; if (hdmi_enabled == 1) { strncpy(b->pins[44].name, "LCD_D3", 8); b->pins[44].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[44].name, "GPIO73", 8); b->pins[44].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; } b->pins[44].gpio.pinmap = 73; b->pins[44].gpio.parent_id = 0; b->pins[44].gpio.mux_total = 0; // TODO PWM_2A if (hdmi_enabled == 1) { strncpy(b->pins[45].name, "LCD_D0", 8); b->pins[45].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[45].name, "GPIO70", 8); b->pins[45].capabilites = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; } b->pins[45].gpio.pinmap = 70; b->pins[45].gpio.parent_id = 0; b->pins[45].gpio.mux_total = 0; // TODO PWM_2B if (hdmi_enabled == 1) { strncpy(b->pins[46].name, "LCD_D1", 8); b->pins[46].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } else { strncpy(b->pins[46].name, "GPIO71", 8); b->pins[46].capabilites = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; } b->pins[46].gpio.pinmap = 71; b->pins[46].gpio.parent_id = 0; b->pins[46].gpio.mux_total = 0; strncpy(b->pins[47].name, "GND", 8); b->pins[47].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[48].name, "GND", 8); b->pins[48].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[49].name, "3.3V", 8); b->pins[49].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[50].name, "3.3V", 8); b->pins[50].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[51].name, "5V", 8); b->pins[51].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[52].name, "5V", 8); b->pins[52].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[53].name, "5V", 8); b->pins[53].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[54].name, "5V", 8); b->pins[54].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[55].name, "PWR", 8); b->pins[55].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; strncpy(b->pins[56].name, "RESET", 8); b->pins[56].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; if (uart4_enabled == 1) { strncpy(b->pins[57].name, "UART4_RX", 8); b->pins[57].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } else { strncpy(b->pins[57].name, "GPIO30", 8); b->pins[57].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } b->pins[57].gpio.pinmap = 30; b->pins[57].gpio.parent_id = 0; b->pins[57].gpio.mux_total = 0; b->pins[57].uart.mux_total = 0; strncpy(b->pins[58].name, "GPIO60", 8); b->pins[58].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[58].gpio.pinmap = 60; b->pins[58].gpio.parent_id = 0; b->pins[58].gpio.mux_total = 0; if (uart4_enabled == 1) { strncpy(b->pins[59].name, "UART4_TX", 8); b->pins[59].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } else { strncpy(b->pins[59].name, "GPIO31", 8); b->pins[59].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } b->pins[59].gpio.pinmap = 31; b->pins[59].gpio.parent_id = 0; b->pins[59].gpio.mux_total = 0; b->pins[59].uart.mux_total = 0; // TODO PWM_1A strncpy(b->pins[60].name, "GPIO40", 8); b->pins[60].capabilites = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; b->pins[60].gpio.pinmap = 50; b->pins[60].gpio.parent_id = 0; b->pins[60].gpio.mux_total = 0; // TODO PWM_TRIP2_IN is this PWM????? strncpy(b->pins[61].name, "GPIO48", 8); b->pins[61].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[61].gpio.pinmap = 48; b->pins[61].gpio.parent_id = 0; b->pins[61].gpio.mux_total = 0; // TODO PWM_1B strncpy(b->pins[62].name, "GPIO51", 8); b->pins[62].capabilites = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; b->pins[62].gpio.pinmap = 51; b->pins[62].gpio.parent_id = 0; b->pins[62].gpio.mux_total = 0; if ((i2c0_enabled == 1) || (spi0_enabled == 1)) { if (i2c0_enabled == 1) { strncpy(b->pins[63].name, "I2C1SCL", 8); b->pins[63].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 1, 0, 0 }; } if (spi0_enabled == 1) { strncpy(b->pins[63].name, "SPI0CS0", 8); b->pins[63].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 }; } } else { strncpy(b->pins[63].name, "GPIO4", 8); b->pins[63].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 1, 0, 0 }; } b->pins[63].gpio.pinmap = 4; b->pins[63].gpio.parent_id = 0; b->pins[63].gpio.mux_total = 0; b->pins[63].i2c.mux_total = 0; b->pins[63].spi.mux_total = 0; if ((i2c0_enabled == 1) || (spi0_enabled == 1)) { if (i2c0_enabled == 1) { strncpy(b->pins[64].name, "I2C1SDA", 8); b->pins[64].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 1, 0, 0 }; } if (spi0_enabled == 1) { strncpy(b->pins[64].name, "SPI0D1", 8); b->pins[64].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 }; } } else { strncpy(b->pins[64].name, "GPIO5", 8); b->pins[64].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 1, 0, 0 }; } b->pins[64].gpio.pinmap = 5; b->pins[64].gpio.parent_id = 0; b->pins[64].gpio.mux_total = 0; b->pins[64].i2c.mux_total = 0; b->pins[64].spi.mux_total = 0; if (i2c0_enabled == 1) { strncpy(b->pins[65].name, "I2C2SCL", 8); b->pins[65].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 }; b->pins[65].i2c.mux_total = 0; } else { strncpy(b->pins[65].name, "GPIO13", 8); b->pins[65].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 }; } b->pins[65].gpio.pinmap = 13; b->pins[65].gpio.parent_id = 0; b->pins[65].gpio.mux_total = 0; b->pins[65].i2c.mux_total = 0; if (i2c0_enabled == 1) { strncpy(b->pins[66].name, "I2C2SDA", 8); b->pins[66].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 }; b->pins[66].i2c.mux_total = 0; } else { strncpy(b->pins[66].name, "GPIO12", 8); b->pins[66].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 }; } b->pins[66].gpio.pinmap = 12; b->pins[66].gpio.parent_id = 0; b->pins[66].gpio.mux_total = 0; b->pins[66].i2c.mux_total = 0; if ((spi0_enabled == 1) || uart2_enabled == 1) { if (uart2_enabled == 1) { strncpy(b->pins[67].name, "UART2_TX", 8); b->pins[67].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 1 }; } if (spi0_enabled == 1) { strncpy(b->pins[67].name, "SPI0D0", 8); b->pins[67].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 }; } } else { strncpy(b->pins[67].name, "GPIO3", 8); b->pins[67].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 1 }; } b->pins[67].gpio.pinmap = 3; b->pins[67].gpio.parent_id = 0; b->pins[67].gpio.mux_total = 0; b->pins[67].spi.mux_total = 0; b->pins[67].uart.mux_total = 0; if ((spi0_enabled == 1) || uart2_enabled == 1) { if (uart2_enabled == 1) { strncpy(b->pins[68].name, "UART2_RX", 8); b->pins[68].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 1 }; } if (spi0_enabled == 1) { strncpy(b->pins[68].name, "SPI0CLK", 8); b->pins[68].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 }; } } else { strncpy(b->pins[68].name, "GPIO2", 8); b->pins[68].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 1 }; } b->pins[68].gpio.pinmap = 2; b->pins[68].gpio.parent_id = 0; b->pins[68].gpio.mux_total = 0; b->pins[68].spi.mux_total = 0; b->pins[68].uart.mux_total = 0; // TODO PWM0_SYNCO ?? PWM strncpy(b->pins[69].name, "GPIO49", 8); b->pins[69].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[69].gpio.pinmap = 49; b->pins[69].gpio.parent_id = 0; b->pins[69].gpio.mux_total = 0; if (uart1_enabled == 1) { strncpy(b->pins[70].name, "UART1_RX", 8); b->pins[70].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } else { strncpy(b->pins[70].name, "GPIO15", 8); b->pins[70].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } b->pins[70].gpio.pinmap = 15; b->pins[70].gpio.parent_id = 0; b->pins[70].gpio.mux_total = 0; b->pins[70].uart.mux_total = 0; strncpy(b->pins[71].name, "GPIO117", 8); b->pins[71].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[71].gpio.pinmap = 117; b->pins[71].gpio.parent_id = 0; b->pins[71].gpio.mux_total = 0; if (uart1_enabled == 1) { strncpy(b->pins[72].name, "UART1_RX", 8); b->pins[72].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } else { strncpy(b->pins[72].name, "GPIO14", 8); b->pins[72].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; } b->pins[72].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[72].gpio.pinmap = 14; b->pins[72].gpio.parent_id = 0; b->pins[72].gpio.mux_total = 0; b->pins[72].uart.mux_total = 0; strncpy(b->pins[73].name, "GPIO115", 8); b->pins[73].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[73].gpio.pinmap = 115; b->pins[73].gpio.parent_id = 0; b->pins[73].gpio.mux_total = 0; if (emmc_enabled != 1) { if (spi1_enabled == 1) { strncpy(b->pins[74].name, "SPI1CS0", 8); b->pins[74].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 }; } else { strncpy(b->pins[74].name, "GPIO113", 8); b->pins[74].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; } } else { strncpy(b->pins[74].name, "MCASP0XX", 8); b->pins[74].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 }; } b->pins[74].gpio.pinmap = 113; b->pins[74].gpio.parent_id = 0; b->pins[74].gpio.mux_total = 0; b->pins[74].spi.mux_total = 0; if (emmc_enabled != 1) { if (spi1_enabled == 1) { strncpy(b->pins[75].name, "SPI1D0", 8); b->pins[75].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 }; } else { strncpy(b->pins[75].name, "GPIO111", 8); b->pins[75].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; } } else { strncpy(b->pins[75].name, "MMC1_SD", 8); b->pins[75].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } b->pins[75].gpio.pinmap = 111; b->pins[75].gpio.parent_id = 0; b->pins[75].gpio.mux_total = 0; b->pins[75].spi.mux_total = 0; if (emmc_enabled != 1) { if (spi1_enabled == 1) { strncpy(b->pins[76].name, "SPI1D1", 8); b->pins[76].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 }; } else { strncpy(b->pins[76].name, "GPIO112", 8); b->pins[76].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; } } else { strncpy(b->pins[76].name, "MMC2_SD", 8); b->pins[76].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } b->pins[76].gpio.pinmap = 112; b->pins[76].gpio.parent_id = 0; b->pins[76].gpio.mux_total = 0; b->pins[76].spi.mux_total = 0; if (emmc_enabled != 1) { if (spi1_enabled == 1) { strncpy(b->pins[77].name, "SPI1CLK", 8); b->pins[77].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 }; } else { strncpy(b->pins[77].name, "GPIO110", 8); b->pins[77].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; } } else { strncpy(b->pins[77].name, "MMC0_SD", 8); b->pins[77].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; } b->pins[77].gpio.pinmap = 110; b->pins[77].gpio.parent_id = 0; b->pins[77].gpio.mux_total = 0; b->pins[77].spi.mux_total = 0; strncpy(b->pins[78].name, "VDD_ADC", 8); b->pins[78].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // TODO AIN4 strncpy(b->pins[79].name, "AIN4", 8); b->pins[79].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 1, 0 }; strncpy(b->pins[80].name, "GND_ADC", 8); b->pins[80].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // TODO AIN6 strncpy(b->pins[81].name, "AIN6", 8); b->pins[81].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 1, 0 }; // TODO AIN5 strncpy(b->pins[82].name, "AIN5", 8); b->pins[82].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 1, 0 }; // TODO AIN2 strncpy(b->pins[83].name, "AIN2", 8); b->pins[83].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 1, 0 }; // TODO AIN3 strncpy(b->pins[84].name, "AIN3", 8); b->pins[84].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 1, 0 }; // TODO AIN0 strncpy(b->pins[85].name, "AIN0", 8); b->pins[85].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 1, 0 }; // TODO AIN1 strncpy(b->pins[86].name, "AIN1", 8); b->pins[86].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 1, 0 }; strncpy(b->pins[87].name, "GPIO20", 8); b->pins[87].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[87].gpio.pinmap = 20; b->pins[87].gpio.parent_id = 0; b->pins[87].gpio.mux_total = 0; strncpy(b->pins[88].name, "GPIO7", 8); b->pins[88].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[88].gpio.pinmap = 7; b->pins[88].gpio.parent_id = 0; b->pins[88].gpio.mux_total = 0; // GND strncpy(b->pins[89].name, "GND", 8); b->pins[89].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // GND strncpy(b->pins[90].name, "GND", 8); b->pins[90].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // GND strncpy(b->pins[91].name, "GND", 8); b->pins[91].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // GND strncpy(b->pins[92].name, "GND", 8); b->pins[92].capabilites = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // BUS DEFINITIONS b->i2c_bus_count = 2; b->def_i2c_bus = 0; b->i2c_bus[0].bus_id = 0; b->i2c_bus[0].sda = 46 + 18; b->i2c_bus[0].scl = 46 + 17; b->i2c_bus[1].bus_id = 1; b->i2c_bus[1].sda = 46 + 20; b->i2c_bus[1].scl = 46 + 19; if (emmc_enabled == 1) b->spi_bus_count = 1; else b->spi_bus_count = 2; b->def_spi_bus = 0; b->spi_bus[0].bus_id = 1; b->spi_bus[0].slave_s = 0; b->spi_bus[0].cs = 46 + 17; b->spi_bus[0].mosi = 46 + 18; b->spi_bus[0].miso = 46 + 21; b->spi_bus[0].sclk = 46 + 22; b->spi_bus[1].bus_id = 2; b->spi_bus[1].slave_s = 0; b->spi_bus[1].cs = 46 + 28; b->spi_bus[1].mosi = 46 + 29; b->spi_bus[1].miso = 46 + 30; b->spi_bus[1].sclk = 46 + 31; b->uart_dev_count = 5; b->def_uart_dev = 0; b->uart_dev[0].rx = 46 + 26; b->uart_dev[0].tx = 46 + 24; b->uart_dev[1].rx = 46 + 22; b->uart_dev[1].tx = 46 + 21; // TODO b->uart_dev[2].rx = 0; b->uart_dev[2].tx = 42; b->uart_dev[3].rx = 46 + 11; b->uart_dev[3].tx = 46 + 13; b->uart_dev[4].rx = 38; b->uart_dev[4].tx = 37; b->gpio_count = 0; int i; for (i = 0; i < b->phy_pin_count; i++) if (b->pins[i].capabilites.gpio) b->gpio_count++; return b; error: syslog(LOG_CRIT, "Beaglebone: failed to initialize"); free(b); return NULL; };
mraa_pwm_context mraa_beaglebone_pwm_init_replace(int pin) { char devpath[MAX_SIZE]; char overlay[MAX_SIZE]; char* capepath = NULL; if (plat == NULL) { syslog(LOG_ERR, "pwm: Platform Not Initialised"); return NULL; } if (plat->pins[pin].capabilites.pwm != 1) { syslog(LOG_ERR, "pwm: pin not capable of pwm"); return NULL; } if (!mraa_file_exist(SYSFS_CLASS_PWM "pwmchip0")) { FILE* fh; capepath = mraa_file_unglob(SYSFS_DEVICES_CAPEMGR_SLOTS); if (capepath == NULL) { syslog(LOG_ERR, "pwm: Could not find CapeManager"); return NULL; } fh = fopen(capepath, "w"); if (fh == NULL) { free(capepath); syslog(LOG_ERR, "pwm: Failed to open %s for writing, check access rights for user", capepath); return NULL; } if (fprintf(fh, SYSFS_PWM_OVERLAY) < 0) { syslog(LOG_ERR, "pwm: Failed to write to CapeManager, check that /lib/firmware/%s exists", SYSFS_PWM_OVERLAY); } fclose(fh); } sprintf(devpath, SYSFS_CLASS_PWM "pwm%u", plat->pins[pin].pwm.pinmap); if (!mraa_file_exist(devpath)) { FILE* fh; fh = fopen(SYSFS_CLASS_PWM "export", "w"); if (fh == NULL) { syslog(LOG_ERR, "pwm: Failed to open /sys/class/pwm/export for writing, check access " "rights for user"); return NULL; } if (fprintf(fh, "%d", plat->pins[pin].pwm.pinmap) < 0) { syslog(LOG_ERR, "pwm: Failed to write to CapeManager"); } fclose(fh); } if (mraa_file_exist(devpath)) { mraa_pwm_context dev = (mraa_pwm_context) malloc(sizeof(struct _pwm)); if (dev == NULL) return NULL; dev->duty_fp = -1; dev->chipid = -1; dev->pin = plat->pins[pin].pwm.pinmap; dev->period = -1; return dev; } else syslog(LOG_ERR, "pwm: pin not initialized, check that /lib/firmware/%s exists", SYSFS_PWM_OVERLAY); return NULL; }
mraa_board_t* mraa_gt_tuchuck_board() { mraa_board_t* b = (mraa_board_t*) calloc(1, sizeof(mraa_board_t)); if (b == NULL) { return NULL; } b->platform_name = PLATFORM_NAME; b->phy_pin_count = MRAA_INTEL_GT_TUCHUCK_PINCOUNT; b->aio_count = 0; b->adc_raw = 0; b->adc_supported = 0; b->pins = (mraa_pininfo_t*) calloc(MRAA_INTEL_GT_TUCHUCK_PINCOUNT, sizeof(mraa_pininfo_t)); if (b->pins == NULL) { goto error; } b->adv_func = (mraa_adv_func_t*) calloc(1, sizeof(mraa_adv_func_t)); if (b->adv_func == NULL) { free(b->pins); goto error; } b->pwm_default_period = 5000; b->pwm_max_period = 218453; b->pwm_min_period = 1; b->i2c_bus_count = 0; int i2c_bus_num = -1; i2c_bus_num = mraa_find_i2c_bus_pci("0000:00", "0000:00:16.0", "i2c_designware.0"); if (i2c_bus_num != -1) { b->i2c_bus[0].bus_id = i2c_bus_num; b->i2c_bus[0].sda = 11; b->i2c_bus[0].scl = 13; b->i2c_bus_count++; } i2c_bus_num = mraa_find_i2c_bus_pci("0000:00", "0000:00:17.1", "i2c_designware.5"); if (i2c_bus_num != -1) { b->i2c_bus[b->i2c_bus_count].bus_id = i2c_bus_num; b->i2c_bus[b->i2c_bus_count].sda = 15; b->i2c_bus[b->i2c_bus_count].scl = 17; b->i2c_bus_count++; } i2c_bus_num = mraa_find_i2c_bus_pci("0000:00", "0000:00:17.2", "i2c_designware.6"); if (i2c_bus_num != -1) { b->i2c_bus[b->i2c_bus_count].bus_id = i2c_bus_num; b->i2c_bus[b->i2c_bus_count].sda = 19; b->i2c_bus[b->i2c_bus_count].scl = 21; b->i2c_bus_count++; } i2c_bus_num = mraa_find_i2c_bus_pci("0000:00", "0000:00:16.1", "i2c_designware.1"); if (i2c_bus_num != -1) { b->i2c_bus[b->i2c_bus_count].bus_id = i2c_bus_num; b->i2c_bus[b->i2c_bus_count].sda = 71; b->i2c_bus[b->i2c_bus_count].scl = 73; b->i2c_bus_count++; } i2c_bus_num = mraa_find_i2c_bus_pci("0000:00", "0000:00:16.2", "i2c_designware.2"); if (i2c_bus_num != -1) { b->i2c_bus[b->i2c_bus_count].bus_id = i2c_bus_num; b->i2c_bus[b->i2c_bus_count].sda = 75; b->i2c_bus[b->i2c_bus_count].scl = 77; b->i2c_bus_count++; } /** * Old i2c detection method, very poor, avoid, but keep as fallback if * above failed We check for /dev/i2c-0 because we can assume i2c-dev is * not loaded if we haven't enumerated a single i2c-dev node */ if (b->i2c_bus_count == 0) { if (mraa_file_exist("/dev/i2c-0")) { syslog(LOG_WARNING, "joule: Failed to detect i2c buses, making wild assumptions!"); b->i2c_bus_count = 3; b->i2c_bus[0].bus_id = 0; b->i2c_bus[0].sda = 11; b->i2c_bus[0].scl = 13; if (mraa_find_i2c_bus("designware", 5) != 5) { b->i2c_bus[1].bus_id = 9; b->i2c_bus[2].bus_id = 10; } else { b->i2c_bus[1].bus_id = 5; b->i2c_bus[2].bus_id = 6; } b->i2c_bus[1].sda = 15; b->i2c_bus[1].scl = 17; b->i2c_bus[2].sda = 19; b->i2c_bus[2].scl = 21; } else { syslog(LOG_WARNING, "joule: Failed to detect any i2c buses, is i2c-dev loaded?"); } } b->def_i2c_bus = b->i2c_bus[0].bus_id; b->spi_bus_count = 3; b->def_spi_bus = 0; b->spi_bus[0].bus_id = 32765; b->spi_bus[0].slave_s = 0; b->spi_bus[1].bus_id = 32766; b->spi_bus[1].slave_s = 0; b->spi_bus[2].bus_id = 32766; b->spi_bus[2].slave_s = 1; int pos = 0; strncpy(b->pins[pos].name, "INVALID", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 0, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "GPIO", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 446; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPP1RX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 421; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "PMICRST", 8); // disabled as this pin causes a reset b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 366; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPP1TX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 422; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "19.2mhz", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 356; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPP1FS0", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 417; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "UART0TX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 1 }; // not configured as GPIO //b->pins[pos].gpio.pinmap = 462; //b->pins[pos].gpio.mux_total = 0; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPP1FS2", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 419; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "PWRGD", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // not configured as GPI0 - does read work? //b->pins[pos].gpio.pinmap = 365; //b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPP1CLK", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 416; b->pins[pos].gpio.mux_total = 0; pos++; // pin 11 strncpy(b->pins[pos].name, "I2C0SDA", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 315; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.mux_total = 0; b->pins[pos].i2c.pinmap = 0; pos++; strncpy(b->pins[pos].name, "I2S1SDI", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 381; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2C0SCL", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 316; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.mux_total = 0; b->pins[pos].i2c.pinmap = 0; pos++; strncpy(b->pins[pos].name, "I2S1SDO", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 382; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2C1SDA", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 331; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.mux_total = 0; b->pins[pos].i2c.pinmap = 0; pos++; strncpy(b->pins[pos].name, "I2S1WS", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 380; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2C1SCL", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 332; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.pinmap = 0; b->pins[pos].i2c.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2S1CLK", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 379; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2C2SDA", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 333; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.pinmap = 0; b->pins[pos].i2c.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2S1MCL", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 378; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2C2SCL", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 334; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.mux_total = 0; b->pins[pos].i2c.pinmap = 0; pos++; strncpy(b->pins[pos].name, "UART1TX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 1 }; //b->pins[pos].gpio.pinmap = 472; //b->pins[pos].gpio.mux_total = 0; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2S4SDO", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // doesn't work so disable //b->pins[pos].gpio.pinmap = 396; //b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "UART1RX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 1 }; //b->pins[pos].gpio.pinmap = 471; //b->pins[pos].gpio.mux_total = 0; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2S4SDI", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // doesnt work //b->pins[pos].gpio.pinmap = 395; //b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "PWM0", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 463; 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, "I2S4BLK", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; // this pin has a voltage of 0.34V in 'low' mode - beware! b->pins[pos].gpio.pinmap = 397; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "PWM1", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 464; 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, "I2S4WS", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; // not working //b->pins[pos].gpio.pinmap = 398; //b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "PWM2", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 465; 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, "I2S3SDO", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; //b->pins[pos].gpio.pinmap = 400; //b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "PWM3", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 466; 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, "I2S3SDI", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; //b->pins[pos].gpio.pinmap = 399; //b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "1.8V", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "I2S4BLK", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 393; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "3.3V", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; // second header strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "5V", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "5V", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "3.3V", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "3.3V", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "1.8V", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "GPIO", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 456; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "1.8V", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "PANEL", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 270; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "GND", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "PANEL", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 271; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "CAMERA", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "PANEL", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 272; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "CAMERA", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "SPP0FS0", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 411; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "CAMERA", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; pos++; strncpy(b->pins[pos].name, "SPP0FS1", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 412; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPI_DAT", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 385; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPP0FS2", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 411; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPICLKB", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 384; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPP0FS3", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 410; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPICLKA", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 383; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPP0TX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 414; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "UART0RX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[pos].gpio.pinmap = 467; b->pins[pos].gpio.mux_total = 0; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; strncpy(b->pins[pos].name, "SPP0RX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 415; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "UART0RT", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[pos].gpio.pinmap = 469; b->pins[pos].gpio.mux_total = 0; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2C1SDA", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 317; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.pinmap = 0; b->pins[pos].i2c.mux_total = 0; pos++; strncpy(b->pins[pos].name, "UART0CT", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[pos].gpio.pinmap = 412; b->pins[pos].gpio.mux_total = 0; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2C1SCL", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 318; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.pinmap = 0; b->pins[pos].i2c.mux_total = 0; pos++; strncpy(b->pins[pos].name, "UART1TX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[pos].gpio.pinmap = 484; b->pins[pos].gpio.mux_total = 0; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2C2SDA", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 319; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.pinmap = 0; b->pins[pos].i2c.mux_total = 0; pos++; strncpy(b->pins[pos].name, "UART1RX", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[pos].gpio.pinmap = 483; b->pins[pos].gpio.mux_total = 0; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; strncpy(b->pins[pos].name, "I2C1SCL", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 }; b->pins[pos].gpio.pinmap = 320; b->pins[pos].gpio.mux_total = 0; b->pins[pos].i2c.pinmap = 0; b->pins[pos].i2c.mux_total = 0; pos++; strncpy(b->pins[pos].name, "UART1RT", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[pos].gpio.pinmap = 485; b->pins[pos].gpio.mux_total = 0; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; strncpy(b->pins[pos].name, "RTC_CLK", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 367; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "UART1CT", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 }; b->pins[pos].gpio.pinmap = 486; b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.mux_total = 0; pos++; while (pos != 100) { b->pins[pos].capabilities = (mraa_pincapabilities_t){ 0, 0, 0, 0, 0, 0, 0, 0 }; pos++; } strncpy(b->pins[pos].name, "LED100", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 337; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "LED101", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 338; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "LED102", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 339; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "LED103", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 340; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "LEDWIFI", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 438; b->pins[pos].gpio.mux_total = 0; pos++; strncpy(b->pins[pos].name, "LEDBT", 8); b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].gpio.pinmap = 439; b->pins[pos].gpio.mux_total = 0; pos++; return b; error: syslog(LOG_CRIT, "GT Tuchuck: Platform failed to initialise"); free(b); return NULL; }