Exemplo n.º 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;
    }
}
Exemplo n.º 2
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;
    }
}
Exemplo n.º 3
0
static mraa_result_t
mraa_ftdi_ft4222_gpio_interrupt_handler_init_replace(mraa_gpio_context dev)
{
    if (mraa_ftdi_ft4222_is_internal_gpio(dev->pin)) {
        mraa_ftdi_ft4222_has_internal_gpio_triggered(dev->phy_pin);
    } else {
        ftdi_ft4222_set_internal_gpio_dir(GPIO_PORT_IO_INT, GPIO_INPUT);
        ftdi_ft4222_set_internal_gpio_trigger(GPIO_PORT_IO_INT, GPIO_TRIGGER_FALLING);
        mraa_ftdi_ft4222_has_internal_gpio_triggered(GPIO_PORT_IO_INT);
    }
    return MRAA_SUCCESS;
}
Exemplo n.º 4
0
static mraa_result_t
mraa_ftdi_ft4222_gpio_interrupt_handler_init_replace(mraa_gpio_context dev)
{
    switch (mraa_ftdi_ft4222_get_gpio_type(dev->pin)) {
        case GPIO_TYPE_BUILTIN:
            mraa_ftdi_ft4222_has_internal_gpio_triggered(dev->phy_pin);
            break;
        case GPIO_TYPE_PCA9672:
        case GPIO_TYPE_PCA9555:
            ftdi_ft4222_set_internal_gpio_dir(GPIO_PORT_IO_INT, GPIO_INPUT);
            ftdi_ft4222_set_internal_gpio_trigger(GPIO_PORT_IO_INT, GPIO_TRIGGER_FALLING);
            mraa_ftdi_ft4222_has_internal_gpio_triggered(GPIO_PORT_IO_INT);
            mraa_ftdi_ft4222_gpio_monitor_add_pin(dev->phy_pin);
            break;
    }
    return MRAA_SUCCESS;
}