Skip to content

GPIO output modes not implemented? #57

@ve2opn

Description

@ve2opn

Please implement the output modes properly. They are missing

OPERATE_RET tkl_gpio_init(TUYA_GPIO_NUM_E pin_id, const TUYA_GPIO_BASE_CFG_T *cfg)
{
    esp_err_t ret;
    int gpio_num;
    gpio_mode_t gpio_dir;
    gpio_pull_mode_t pull_type;

    if (NULL == cfg) {
        return OPRT_INVALID_PARM;
    }

    PIN_DEV_CHECK_ERROR_RETURN(pin_id, OPRT_INVALID_PARM);
	gpio_num = pinmap[pin_id].gpio;

    gpio_reset_pin(gpio_num);
    gpio_set_level(gpio_num, cfg->level);

    gpio_dir = GPIO_MODE_DISABLE; 
    switch (cfg->direct)  {
    case TUYA_GPIO_INPUT:
        gpio_dir = GPIO_MODE_INPUT;
        break;
    case TUYA_GPIO_OUTPUT:
        gpio_dir = GPIO_MODE_OUTPUT;
        break;
    default:
        return OPRT_NOT_SUPPORTED;
    }
    ret = gpio_set_direction(gpio_num, gpio_dir);
    if (ESP_OK != ret) {
        ESP_LOGE(DBG_TAG, "%s: call gpio_set_direction failed(ret=%d)", __func__, ret);
        return OPRT_COM_ERROR;
    }

	pull_type = GPIO_FLOATING; 
    switch (cfg->mode) {
    case TUYA_GPIO_PULLUP:
		pull_type = GPIO_PULLUP_ONLY;
        break;
    case TUYA_GPIO_PULLDOWN:
		pull_type = GPIO_PULLDOWN_ONLY;
        break;
    default:
        return OPRT_NOT_SUPPORTED;
    }
    ret = gpio_set_pull_mode(gpio_num, pull_type);
    if (ESP_OK != ret) {
        ESP_LOGE(DBG_TAG, "%s: call gpio_set_pull_mode failed(ret=%d)", __func__, ret);
        return OPRT_COM_ERROR;
    }

    return OPRT_OK;
}


ABSTRACT LAYER:

/**
 * @brief gpio mode
 */
typedef enum {
    TUYA_GPIO_PULLUP = 0,       // for input
    TUYA_GPIO_PULLDOWN,         // for input
    TUYA_GPIO_HIGH_IMPEDANCE,   // for input
    TUYA_GPIO_FLOATING,         // for input
// following not mapped?
    TUYA_GPIO_PUSH_PULL,        // for output
    TUYA_GPIO_OPENDRAIN,        // for output
    TUYA_GPIO_OPENDRAIN_PULLUP, // for output
} TUYA_GPIO_MODE_E;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions