-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Description
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;
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels