Boolean mraaDigitalCanHandle(SInt32 number, const char *name, SInt32 *remappedNumber) { Boolean success = true; success = mraa_pin_mode_test(number, MRAA_PIN_GPIO); if (!success) fprintf(stderr, "pin %d is not digital GPIO\n", number); return success; }
mraa_result_t mraa_intel_galileo_g2_mmap_setup(mraa_gpio_context dev, mraa_boolean_t en) { if (dev == NULL) { syslog(LOG_ERR, "Galileo mmap: context not valid"); return MRAA_ERROR_INVALID_HANDLE; } if (mraa_pin_mode_test(dev->phy_pin, MRAA_PIN_FAST_GPIO) == 0) { syslog(LOG_ERR, "Galileo mmap: mmap not on this pin"); return MRAA_ERROR_NO_RESOURCES; } if (en == 0) { if (dev->mmap_write == NULL) { syslog(LOG_ERR, "mmap: can't disable disabled mmap gpio"); return MRAA_ERROR_INVALID_PARAMETER; } dev->mmap_write = NULL; mmap_count--; if (mmap_count == 0) { return mraa_intel_galileo_g2_mmap_unsetup(); } return MRAA_SUCCESS; } if (dev->mmap_write != NULL) { syslog(LOG_ERR, "mmap: can't enable enabled mmap gpio"); return MRAA_ERROR_INVALID_PARAMETER; } if (mmap_reg == NULL) { if ((mmap_fd = open(UIO_PATH, O_RDWR)) < 0) { syslog(LOG_ERR, "mmap: Unable to open UIO device"); return MRAA_ERROR_INVALID_RESOURCE; } mmap_reg = mmap(NULL, mmap_size, PROT_READ|PROT_WRITE, MAP_SHARED, mmap_fd, 0); if (mmap_reg == MAP_FAILED) { syslog(LOG_ERR, "mmap: failed to mmap"); mmap_reg = NULL; close(mmap_fd); return MRAA_ERROR_NO_RESOURCES; } } if (mraa_setup_mux_mapped(plat->pins[dev->phy_pin].mmap.gpio) != MRAA_SUCCESS) { syslog(LOG_ERR, "mmap: unable to setup required multiplexers"); return MRAA_ERROR_INVALID_RESOURCE; } dev->mmap_write = &mraa_intel_galileo_g2_mmap_write; return MRAA_SUCCESS; }
/** * Checks if a pin is able to use the passed in mode. * * @param pin Physical Pin to be checked. * @param mode the mode to be tested. * @return boolean if the mode is supported, 0=false. */ bool pinModeTest(int pin, mraa_pinmodes_t mode) { return (bool) mraa_pin_mode_test(pin,mode); }