refactor: added gpio enumeration
This commit is contained in:
20
README.md
20
README.md
@@ -88,12 +88,12 @@ void app_main(void)
|
||||
i2c_new_master_bus(&i2c_bus_config, &i2c_bus_handle);
|
||||
esp_event_loop_create_default();
|
||||
esp_event_handler_instance_register(ZH_PCF8574, ESP_EVENT_ANY_ID, &zh_pcf8574_event_handler, NULL, NULL);
|
||||
zh_pcf8574_init_config_t pcf8574_init_config = ZH_PCF8574_INIT_CONFIG_DEFAULT();
|
||||
pcf8574_init_config.i2c_handle = i2c_bus_handle;
|
||||
pcf8574_init_config.i2c_address = 0x38;
|
||||
pcf8574_init_config.p0_gpio_work_mode = true;
|
||||
pcf8574_init_config.interrupt_gpio = GPIO_NUM_14;
|
||||
zh_pcf8574_init(&pcf8574_init_config, &pcf8574_handle);
|
||||
zh_pcf8574_init_config_t config = ZH_PCF8574_INIT_CONFIG_DEFAULT();
|
||||
config.i2c_handle = i2c_bus_handle;
|
||||
config.i2c_address = 0x38;
|
||||
config.p0_gpio_work_mode = ZH_PCF8574_GPIO_INPUT;
|
||||
config.interrupt_gpio = GPIO_NUM_14;
|
||||
zh_pcf8574_init(&config, &pcf8574_handle);
|
||||
uint8_t reg = 0;
|
||||
zh_pcf8574_read(&pcf8574_handle, ®);
|
||||
print_gpio_status("GPIO status: ", reg);
|
||||
@@ -102,13 +102,13 @@ void app_main(void)
|
||||
zh_pcf8574_read(&pcf8574_handle, ®);
|
||||
print_gpio_status("GPIO status: ", reg);
|
||||
printf("Sets P0 to 0.\n");
|
||||
zh_pcf8574_write_gpio(&pcf8574_handle, 0, false);
|
||||
zh_pcf8574_write_gpio(&pcf8574_handle, ZH_PCF8574_GPIO_NUM_P0, ZH_PCF8574_GPIO_LOW);
|
||||
bool gpio = 0;
|
||||
zh_pcf8574_read_gpio(&pcf8574_handle, 0, &gpio);
|
||||
zh_pcf8574_read_gpio(&pcf8574_handle, ZH_PCF8574_GPIO_NUM_P0, &gpio);
|
||||
printf("P0 status: %d.\n", gpio);
|
||||
printf("Set P1 to 0.\n");
|
||||
zh_pcf8574_write_gpio(&pcf8574_handle, 1, false);
|
||||
zh_pcf8574_read_gpio(&pcf8574_handle, 1, &gpio);
|
||||
zh_pcf8574_write_gpio(&pcf8574_handle, ZH_PCF8574_GPIO_NUM_P1, ZH_PCF8574_GPIO_LOW);
|
||||
zh_pcf8574_read_gpio(&pcf8574_handle, ZH_PCF8574_GPIO_NUM_P1, &gpio);
|
||||
printf("P1 status: %d.\n", gpio);
|
||||
zh_pcf8574_read(&pcf8574_handle, ®);
|
||||
print_gpio_status("GPIO status: ", reg);
|
||||
|
||||
@@ -12,22 +12,27 @@
|
||||
#include "esp_event.h"
|
||||
#include "zh_vector.h"
|
||||
|
||||
#define ZH_PCF8574_GPIO_OUTPUT false
|
||||
#define ZH_PCF8574_GPIO_INPUT true
|
||||
#define ZH_PCF8574_GPIO_LOW false
|
||||
#define ZH_PCF8574_GPIO_HIGH true
|
||||
|
||||
/**
|
||||
* @brief PCF8574 expander initial default values.
|
||||
*/
|
||||
#define ZH_PCF8574_INIT_CONFIG_DEFAULT() \
|
||||
{ \
|
||||
.task_priority = 10, \
|
||||
.stack_size = 2048, \
|
||||
.i2c_address = 0xFF, \
|
||||
.p0_gpio_work_mode = 0, \
|
||||
.p1_gpio_work_mode = 0, \
|
||||
.p2_gpio_work_mode = 0, \
|
||||
.p3_gpio_work_mode = 0, \
|
||||
.p4_gpio_work_mode = 0, \
|
||||
.p5_gpio_work_mode = 0, \
|
||||
.p6_gpio_work_mode = 0, \
|
||||
.p7_gpio_work_mode = 0, \
|
||||
#define ZH_PCF8574_INIT_CONFIG_DEFAULT() \
|
||||
{ \
|
||||
.task_priority = 10, \
|
||||
.stack_size = 2048, \
|
||||
.i2c_address = 0xFF, \
|
||||
.p0_gpio_work_mode = ZH_PCF8574_GPIO_OUTPUT, \
|
||||
.p1_gpio_work_mode = ZH_PCF8574_GPIO_OUTPUT, \
|
||||
.p2_gpio_work_mode = ZH_PCF8574_GPIO_OUTPUT, \
|
||||
.p3_gpio_work_mode = ZH_PCF8574_GPIO_OUTPUT, \
|
||||
.p4_gpio_work_mode = ZH_PCF8574_GPIO_OUTPUT, \
|
||||
.p5_gpio_work_mode = ZH_PCF8574_GPIO_OUTPUT, \
|
||||
.p6_gpio_work_mode = ZH_PCF8574_GPIO_OUTPUT, \
|
||||
.p7_gpio_work_mode = ZH_PCF8574_GPIO_OUTPUT, \
|
||||
.interrupt_gpio = GPIO_NUM_MAX}
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -37,6 +42,22 @@ extern "C"
|
||||
|
||||
extern TaskHandle_t zh_pcf8574; /*!< Unique task handle. */
|
||||
|
||||
/**
|
||||
* @brief Enumeration of PCF8574 expander GPIO.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
ZH_PCF8574_GPIO_NUM_P0 = 0,
|
||||
ZH_PCF8574_GPIO_NUM_P1,
|
||||
ZH_PCF8574_GPIO_NUM_P2,
|
||||
ZH_PCF8574_GPIO_NUM_P3,
|
||||
ZH_PCF8574_GPIO_NUM_P4,
|
||||
ZH_PCF8574_GPIO_NUM_P5,
|
||||
ZH_PCF8574_GPIO_NUM_P6,
|
||||
ZH_PCF8574_GPIO_NUM_P7,
|
||||
ZH_PCF8574_GPIO_NUM_MAX
|
||||
} zh_pcf8574_gpio_num_t;
|
||||
|
||||
/**
|
||||
* @brief Structure for initial initialization of PCF8574 expander.
|
||||
*/
|
||||
@@ -45,14 +66,14 @@ extern "C"
|
||||
uint8_t task_priority; /*!< Task priority for the PCF8574 expander isr processing. @note It is not recommended to set a value less than 10. */
|
||||
uint16_t stack_size; /*!< Stack size for task for the PCF8574 expander isr processing processing. @note The minimum size is 2048 bytes. */
|
||||
uint8_t i2c_address; /*!< Expander I2C address. */
|
||||
bool p0_gpio_work_mode; /*!< Expander GPIO PO work mode. True for input, false for output. */
|
||||
bool p1_gpio_work_mode; /*!< Expander GPIO P1 work mode. True for input, false for output. */
|
||||
bool p2_gpio_work_mode; /*!< Expander GPIO P2 work mode. True for input, false for output. */
|
||||
bool p3_gpio_work_mode; /*!< Expander GPIO P3 work mode. True for input, false for output. */
|
||||
bool p4_gpio_work_mode; /*!< Expander GPIO P4 work mode. True for input, false for output. */
|
||||
bool p5_gpio_work_mode; /*!< Expander GPIO P5 work mode. True for input, false for output. */
|
||||
bool p6_gpio_work_mode; /*!< Expander GPIO P6 work mode. True for input, false for output. */
|
||||
bool p7_gpio_work_mode; /*!< Expander GPIO P7 work mode. True for input, false for output. */
|
||||
bool p0_gpio_work_mode; /*!< Expander GPIO PO work mode. */
|
||||
bool p1_gpio_work_mode; /*!< Expander GPIO P1 work mode. */
|
||||
bool p2_gpio_work_mode; /*!< Expander GPIO P2 work mode. */
|
||||
bool p3_gpio_work_mode; /*!< Expander GPIO P3 work mode. */
|
||||
bool p4_gpio_work_mode; /*!< Expander GPIO P4 work mode. */
|
||||
bool p5_gpio_work_mode; /*!< Expander GPIO P5 work mode. */
|
||||
bool p6_gpio_work_mode; /*!< Expander GPIO P6 work mode. */
|
||||
bool p7_gpio_work_mode; /*!< Expander GPIO P7 work mode. */
|
||||
uint8_t interrupt_gpio; /*!< Interrupt GPIO. @attention Must be same for all PCF8574 expanders. */
|
||||
i2c_master_bus_handle_t i2c_handle; /*!< Unique I2C bus handle. @attention Must be same for all PCF8574 expanders. */
|
||||
} zh_pcf8574_init_config_t;
|
||||
@@ -120,7 +141,7 @@ extern "C"
|
||||
* @return ESP_OK if success or an error code otherwise.
|
||||
*/
|
||||
esp_err_t zh_pcf8574_deinit(zh_pcf8574_handle_t *handle);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Read PCF8574 all GPIO's status.
|
||||
*
|
||||
@@ -165,7 +186,7 @@ extern "C"
|
||||
*
|
||||
* @return ESP_OK if success or an error code otherwise.
|
||||
*/
|
||||
esp_err_t zh_pcf8574_read_gpio(zh_pcf8574_handle_t *handle, uint8_t gpio, bool *status);
|
||||
esp_err_t zh_pcf8574_read_gpio(zh_pcf8574_handle_t *handle, zh_pcf8574_gpio_num_t gpio, bool *status);
|
||||
|
||||
/**
|
||||
* @brief Set PCF8574 GPIO status.
|
||||
@@ -178,7 +199,7 @@ extern "C"
|
||||
*
|
||||
* @return ESP_OK if success or an error code otherwise.
|
||||
*/
|
||||
esp_err_t zh_pcf8574_write_gpio(zh_pcf8574_handle_t *handle, uint8_t gpio, bool status);
|
||||
esp_err_t zh_pcf8574_write_gpio(zh_pcf8574_handle_t *handle, zh_pcf8574_gpio_num_t gpio, bool status);
|
||||
|
||||
/**
|
||||
* @brief Get error statistics.
|
||||
|
||||
@@ -147,11 +147,11 @@ esp_err_t zh_pcf8574_reset(zh_pcf8574_handle_t *handle)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t zh_pcf8574_read_gpio(zh_pcf8574_handle_t *handle, uint8_t gpio, bool *status) // -V2008
|
||||
esp_err_t zh_pcf8574_read_gpio(zh_pcf8574_handle_t *handle, zh_pcf8574_gpio_num_t gpio, bool *status) // -V2008
|
||||
{
|
||||
ZH_LOGI("PCF8574 read GPIO started.");
|
||||
ZH_ERROR_CHECK(handle != NULL && status != NULL, ESP_ERR_INVALID_ARG, NULL, "PCF8574 read GPIO failed. Invalid argument.");
|
||||
ZH_ERROR_CHECK(gpio <= 7, ESP_FAIL, NULL, "PCF8574 read GPIO failed. Invalid GPIO number.")
|
||||
ZH_ERROR_CHECK(gpio >= ZH_PCF8574_GPIO_NUM_P0 && gpio < ZH_PCF8574_GPIO_NUM_MAX, ESP_FAIL, NULL, "PCF8574 read GPIO failed. Invalid GPIO number.")
|
||||
ZH_ERROR_CHECK(handle->is_initialized == true, ESP_ERR_NOT_FOUND, NULL, "PCF8574 read GPIO failed. PCF8574 not initialized.");
|
||||
uint8_t gpio_temp = _gpio_matrix[gpio];
|
||||
uint8_t reg_temp = 0;
|
||||
@@ -162,11 +162,11 @@ esp_err_t zh_pcf8574_read_gpio(zh_pcf8574_handle_t *handle, uint8_t gpio, bool *
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t zh_pcf8574_write_gpio(zh_pcf8574_handle_t *handle, uint8_t gpio, bool status) // -V2008
|
||||
esp_err_t zh_pcf8574_write_gpio(zh_pcf8574_handle_t *handle, zh_pcf8574_gpio_num_t gpio, bool status) // -V2008
|
||||
{
|
||||
ZH_LOGI("PCF8574 write GPIO started.");
|
||||
ZH_ERROR_CHECK(handle != NULL, ESP_ERR_INVALID_ARG, NULL, "PCF8574 write GPIO failed. Invalid argument.");
|
||||
ZH_ERROR_CHECK(gpio <= 7, ESP_FAIL, NULL, "PCF8574 write GPIO failed. Invalid GPIO number.")
|
||||
ZH_ERROR_CHECK(gpio >= ZH_PCF8574_GPIO_NUM_P0 && gpio < ZH_PCF8574_GPIO_NUM_MAX, ESP_FAIL, NULL, "PCF8574 write GPIO failed. Invalid GPIO number.")
|
||||
ZH_ERROR_CHECK(handle->is_initialized == true, ESP_ERR_NOT_FOUND, NULL, "PCF8574 write GPIO failed. PCF8574 not initialized.");
|
||||
uint8_t gpio_temp = _gpio_matrix[gpio];
|
||||
esp_err_t err = ESP_OK;
|
||||
|
||||
Reference in New Issue
Block a user