Beispiel #1
0
static mraa_result_t
mraa_ftdi_ft4222_gpio_dir_replace(mraa_gpio_context dev, mraa_gpio_dir_t dir)
{
    switch (dir) {
    case MRAA_GPIO_IN:
        if (mraa_ftdi_ft4222_is_internal_gpio(dev->pin))
            return ftdi_ft4222_set_internal_gpio_dir(dev->phy_pin, GPIO_INPUT);
        else
            return mraa_ftdi_ft4222_gpio_write_replace(dev, 1);
    case MRAA_GPIO_OUT:
        if (mraa_ftdi_ft4222_is_internal_gpio(dev->pin))
            return ftdi_ft4222_set_internal_gpio_dir(dev->phy_pin, GPIO_OUTPUT);
        else
            return MRAA_SUCCESS;
    case MRAA_GPIO_OUT_HIGH:
        if (mraa_ftdi_ft4222_is_internal_gpio(dev->pin)) {
            if (ftdi_ft4222_set_internal_gpio_dir(dev->phy_pin, GPIO_OUTPUT) != MRAA_SUCCESS)
                return MRAA_ERROR_UNSPECIFIED;
        }
        return mraa_ftdi_ft4222_gpio_write_replace(dev, 1);
    case MRAA_GPIO_OUT_LOW:
        if (mraa_ftdi_ft4222_is_internal_gpio(dev->pin)) {
            if (ftdi_ft4222_set_internal_gpio_dir(dev->phy_pin, GPIO_OUTPUT) != MRAA_SUCCESS)
                return MRAA_ERROR_UNSPECIFIED;
        }
        return mraa_ftdi_ft4222_gpio_write_replace(dev, 0);
    default:
        return MRAA_ERROR_INVALID_PARAMETER;
    }
}
Beispiel #2
0
static mraa_result_t
mraa_ftdi_ft4222_gpio_dir_replace(mraa_gpio_context dev, mraa_gpio_dir_t dir)
{
    switch (dir) {
        case MRAA_GPIO_IN:
        case MRAA_GPIO_OUT_HIGH:
            return mraa_ftdi_ft4222_gpio_write_replace(dev, 1);
        case MRAA_GPIO_OUT_LOW:
            return mraa_ftdi_ft4222_gpio_write_replace(dev, 0);
        default:
            ;
    }
    return MRAA_SUCCESS;
}
Beispiel #3
0
static mraa_result_t
mraa_ftdi_ft4222_gpio_dir_replace(mraa_gpio_context dev, mraa_gpio_dir_t dir)
{
    switch (mraa_ftdi_ft4222_get_gpio_type(dev->pin)) {
        case GPIO_TYPE_BUILTIN:
            switch (dir) {
                case MRAA_GPIO_IN:
                        return ftdi_ft4222_set_internal_gpio_dir(dev->phy_pin, GPIO_INPUT);
                case MRAA_GPIO_OUT:
                        return ftdi_ft4222_set_internal_gpio_dir(dev->phy_pin, GPIO_OUTPUT);
                case MRAA_GPIO_OUT_HIGH:
                        if (ftdi_ft4222_set_internal_gpio_dir(dev->phy_pin, GPIO_OUTPUT) != MRAA_SUCCESS)
                            return MRAA_ERROR_UNSPECIFIED;
                        return mraa_ftdi_ft4222_gpio_write_replace(dev, 1);
                case MRAA_GPIO_OUT_LOW:
                        if (ftdi_ft4222_set_internal_gpio_dir(dev->phy_pin, GPIO_OUTPUT) != MRAA_SUCCESS)
                            return MRAA_ERROR_UNSPECIFIED;
                        return mraa_ftdi_ft4222_gpio_write_replace(dev, 0);
                default:
                    return MRAA_ERROR_INVALID_PARAMETER;
            }
        case GPIO_TYPE_PCA9672:
            switch (dir) {
                case MRAA_GPIO_IN:
                case MRAA_GPIO_OUT:
                    return mraa_ftdi_ft4222_gpio_set_pca9672_dir(dev->phy_pin, dir);
                case MRAA_GPIO_OUT_HIGH:
                    if (mraa_ftdi_ft4222_gpio_set_pca9672_dir(dev->phy_pin, dir) != MRAA_SUCCESS)
                        return MRAA_ERROR_UNSPECIFIED;
                    return mraa_ftdi_ft4222_gpio_write_replace(dev, 1);
                case MRAA_GPIO_OUT_LOW:
                    if (mraa_ftdi_ft4222_gpio_set_pca9672_dir(dev->phy_pin, dir) != MRAA_SUCCESS)
                        return MRAA_ERROR_UNSPECIFIED;
                    return mraa_ftdi_ft4222_gpio_write_replace(dev, 0);
                default:
                    return MRAA_ERROR_INVALID_PARAMETER;
            }
        case GPIO_TYPE_PCA9555:
            switch (dir) {
                case MRAA_GPIO_IN:
                case MRAA_GPIO_OUT:
                    return mraa_ftdi_ft4222_gpio_set_pca9555_dir(dev->phy_pin, dir);
                case MRAA_GPIO_OUT_HIGH:
                    if (mraa_ftdi_ft4222_gpio_set_pca9555_dir(dev->phy_pin, dir) != MRAA_SUCCESS)
                        return MRAA_ERROR_UNSPECIFIED;
                    return mraa_ftdi_ft4222_gpio_write_replace(dev, 1);
                case MRAA_GPIO_OUT_LOW:
                    if (mraa_ftdi_ft4222_gpio_set_pca9555_dir(dev->phy_pin, dir) != MRAA_SUCCESS)
                        return MRAA_ERROR_UNSPECIFIED;
                    return mraa_ftdi_ft4222_gpio_write_replace(dev, 0);
                default:
                    return MRAA_ERROR_INVALID_PARAMETER;
            }
        default:
            return MRAA_ERROR_INVALID_RESOURCE;
    }
}