feat!: handle changed to double pointer
This commit is contained in:
1 parent
e7c19680ae
commit
f57671206b
7 files changed
+513
-522
No files matched your search
+34
-60
@@ -24,13 +24,13 @@
|
||||
|
||||
## Возможности
|
||||
|
||||
1. **Поддержка 16 расширителей**: До 16 PCF8574(A) на одной шине I2C (адреса 0x20-0x27 и 0x38-0x3F)
|
||||
2. **Режимы работы GPIO**: Поддержка выходных и входных режимов для каждого из 8 GPIO
|
||||
3. **Генерация прерываний**: Поддержка прерываний от входных GPIO (отрицательный фронт)
|
||||
4. **Статистика ошибок**: Встроенные счетчики ошибок I2C, событий, векторов и переполнения очереди
|
||||
5. **Потокобезопасность**: Использует драйвер I2C ESP-IDF и FreeRTOS
|
||||
6. **Минимальные накладные расходы**: Низкие требования к памяти и процессору
|
||||
7. **Простой API**: Легкое чтение/запись состояния всех GPIO и отдельных пинов
|
||||
- **Поддержка 16 расширителей**: До 16 PCF8574(A) на одной шине I2C (адреса 0x20-0x27 и 0x38-0x3F)
|
||||
- **Режимы работы GPIO**: Поддержка выходных и входных режимов для каждого из 8 GPIO
|
||||
- **Генерация прерываний**: Поддержка прерываний от входных GPIO (отрицательный фронт)
|
||||
- **Статистика ошибок**: Встроенные счетчики ошибок I2C, событий, векторов и переполнения очереди
|
||||
- **Потокобезопасность**: Использует драйвер I2C ESP-IDF и FreeRTOS
|
||||
- **Минимальные накладные расходы**: Низкие требования к памяти и процессору
|
||||
- **Простой API**: Легкое чтение/запись состояния всех GPIO и отдельных пинов
|
||||
|
||||
---
|
||||
|
||||
@@ -88,7 +88,7 @@ typedef struct
|
||||
{
|
||||
i2c_master_bus_handle_t i2c_handle; // Уникальный дескриптор шины I2C
|
||||
uint32_t i2c_frequency; // Частота I2C расширителя (макс. 100000 Гц)
|
||||
uint16_t stack_size; // Размер стека задачи обработки прерываний
|
||||
uint32_t stack_size; // Размер стека задачи обработки прерываний
|
||||
uint8_t task_priority; // Приоритет задачи обработки прерываний
|
||||
uint8_t i2c_address; // Адрес устройства расширителя I2C (0x20-0x27 или 0x38-0x3F)
|
||||
bool p0_gpio_work_mode; // Режим работы GPIO P0 (false - output, true - input)
|
||||
@@ -115,17 +115,11 @@ typedef struct
|
||||
### Структура zh_pcf8574_handle_t
|
||||
|
||||
```c
|
||||
typedef struct
|
||||
{
|
||||
uint8_t i2c_address; // Адрес I2C расширителя
|
||||
uint8_t gpio_work_mode; // Режимы работы GPIO (биты 0-7)
|
||||
uint8_t gpio_status; // Текущее состояние GPIO (биты 0-7)
|
||||
bool is_initialized; // Флаг инициализации расширителя
|
||||
i2c_master_dev_handle_t dev_handle; // Уникальный дескриптор устройства I2C
|
||||
void *system; // Системный указатель для использования в других компонентах
|
||||
} zh_pcf8574_handle_t;
|
||||
typedef struct _zh_pcf8574_handle_t zh_pcf8574_handle_t;
|
||||
```
|
||||
|
||||
Непрозрачный дескриптор экземпляра устройства PCF8574. Внутренняя структура минимальна — хранит только I2C-адрес; полное состояние устройства поддерживается во внутреннем векторе.
|
||||
|
||||
---
|
||||
|
||||
### Структура zh_pcf8574_stats_t
|
||||
@@ -163,15 +157,16 @@ typedef struct
|
||||
|
||||
**Параметры:**
|
||||
|
||||
- `config` - Указатель на структуру конфигурации инициализации PCF8574
|
||||
- `handle` - Указатель на уникальный дескриптор PCF8574
|
||||
- `config` - Указатель на структуру конфигурации инициализации PCF8574. Не должен быть NULL
|
||||
- `handle` - Указатель на указатель на дескриптор PCF8574. Должен быть NULL
|
||||
|
||||
**Возвращает:**
|
||||
|
||||
- `ESP_OK` - Успех
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL config или handle)
|
||||
- `ESP_ERR_INVALID_STATE` - Расширитель уже инициализирован
|
||||
- `ESP_FAIL` - Ошибка инициализации
|
||||
- `ESP_ERR_NO_MEM` - Недостаточно памяти
|
||||
- `ESP_ERR_NOT_SUPPORTED` - Ошибка инициализации I2C
|
||||
|
||||
---
|
||||
|
||||
@@ -181,14 +176,12 @@ typedef struct
|
||||
|
||||
**Параметры:**
|
||||
|
||||
- `handle` - Указатель на уникальный дескриптор PCF8574
|
||||
- `handle` - Указатель на указатель на дескриптор PCF8574. Не должен быть NULL
|
||||
|
||||
**Возвращает:**
|
||||
|
||||
- `ESP_OK` - Успех
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle)
|
||||
- `ESP_ERR_INVALID_STATE` - Расширитель не инициализирован
|
||||
- `ESP_FAIL` - Ошибка деинициализации
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle или *handle)
|
||||
|
||||
---
|
||||
|
||||
@@ -198,15 +191,14 @@ typedef struct
|
||||
|
||||
**Параметры:**
|
||||
|
||||
- `handle` - Указатель на уникальный дескриптор PCF8574
|
||||
- `reg` - Указатель для хранения состояния GPIO (биты 0-7)
|
||||
- `handle` - Указатель на указатель на дескриптор PCF8574. Не должен быть NULL
|
||||
- `reg` - Указатель для хранения состояния GPIO (биты 0-7). Не должен быть NULL
|
||||
|
||||
**Возвращает:**
|
||||
|
||||
- `ESP_OK` - Успех
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle или reg)
|
||||
- `ESP_ERR_NOT_FOUND` - Расширитель не инициализирован
|
||||
- `ESP_FAIL` - Ошибка связи I2C
|
||||
- `ESP_ERR_INVALID_STATE` - Расширитель не инициализирован
|
||||
|
||||
**Примечание:** Для входных GPIO всегда будет 1 (HIGH).
|
||||
|
||||
@@ -218,15 +210,14 @@ typedef struct
|
||||
|
||||
**Параметры:**
|
||||
|
||||
- `handle` - Указатель на уникальный дескриптор PCF8574
|
||||
- `handle` - Указатель на указатель на дескриптор PCF8574. Не должен быть NULL
|
||||
- `reg` - Состояние GPIO (биты 0-7)
|
||||
|
||||
**Возвращает:**
|
||||
|
||||
- `ESP_OK` - Успех
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle)
|
||||
- `ESP_ERR_NOT_FOUND` - Расширитель не инициализирован
|
||||
- `ESP_FAIL` - Ошибка связи I2C
|
||||
- `ESP_ERR_INVALID_STATE` - Расширитель не инициализирован
|
||||
|
||||
**Примечание:** Влияет только на выходные GPIO.
|
||||
|
||||
@@ -238,14 +229,12 @@ typedef struct
|
||||
|
||||
**Параметры:**
|
||||
|
||||
- `handle` - Указатель на уникальный дескриптор PCF8574
|
||||
- `handle` - Указатель на указатель на дескриптор PCF8574. Не должен быть NULL
|
||||
|
||||
**Возвращает:**
|
||||
|
||||
- `ESP_OK` - Успех
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle)
|
||||
- `ESP_ERR_NOT_FOUND` - Расширитель не инициализирован
|
||||
- `ESP_FAIL` - Ошибка связи I2C
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle или *handle)
|
||||
|
||||
---
|
||||
|
||||
@@ -255,16 +244,15 @@ typedef struct
|
||||
|
||||
**Параметры:**
|
||||
|
||||
- `handle` - Указатель на уникальный дескриптор PCF8574
|
||||
- `handle` - Указатель на указатель на дескриптор PCF8574. Не должен быть NULL
|
||||
- `gpio` - Номер GPIO (ZH_PCF8574_GPIO_NUM_P0 ... ZH_PCF8574_GPIO_NUM_P7)
|
||||
- `status` - Указатель для хранения состояния GPIO (true - HIGH, false - LOW)
|
||||
- `status` - Указатель для хранения состояния GPIO (true - HIGH, false - LOW). Не должен быть NULL
|
||||
|
||||
**Возвращает:**
|
||||
|
||||
- `ESP_OK` - Успех
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент
|
||||
- `ESP_ERR_NOT_FOUND` - Расширитель не инициализирован
|
||||
- `ESP_FAIL` - Ошибка связи I2C
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle, gpio, status или выход gpio за пределы)
|
||||
- `ESP_ERR_INVALID_STATE` - Расширитель не инициализирован
|
||||
|
||||
**Примечание:** Для входных GPIO всегда будет 1 (HIGH).
|
||||
|
||||
@@ -276,16 +264,15 @@ typedef struct
|
||||
|
||||
**Параметры:**
|
||||
|
||||
- `handle` - Указатель на уникальный дескриптор PCF8574
|
||||
- `handle` - Указатель на указатель на дескриптор PCF8574. Не должен быть NULL
|
||||
- `gpio` - Номер GPIO (ZH_PCF8574_GPIO_NUM_P0 ... ZH_PCF8574_GPIO_NUM_P7)
|
||||
- `status` - Состояние GPIO (true - HIGH, false - LOW)
|
||||
|
||||
**Возвращает:**
|
||||
|
||||
- `ESP_OK` - Успех
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент
|
||||
- `ESP_ERR_NOT_FOUND` - Расширитель не инициализирован
|
||||
- `ESP_FAIL` - Ошибка связи I2C
|
||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle, gpio, status или выход gpio за пределы)
|
||||
- `ESP_ERR_INVALID_STATE` - Расширитель не инициализирован
|
||||
|
||||
**Примечание:** Влияет только на выходные GPIO.
|
||||
|
||||
@@ -299,25 +286,12 @@ typedef struct
|
||||
|
||||
- Указатель на структуру статистики
|
||||
|
||||
**Пример:**
|
||||
|
||||
```c
|
||||
const zh_pcf8574_stats_t *stats = zh_pcf8574_get_stats();
|
||||
printf("Ошибки I2C: %ld\n", stats->i2c_driver_error);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### zh_pcf8574_reset_stats()
|
||||
|
||||
Сбрасывает счетчики статистики ошибок.
|
||||
|
||||
**Пример:**
|
||||
|
||||
```c
|
||||
zh_pcf8574_reset_stats();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Примеры использования
|
||||
@@ -445,7 +419,7 @@ void app_main(void)
|
||||
## Технические характеристики
|
||||
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| ---------- | ---------- |
|
||||
| **Тип устройства** | 8-битный I2C GPIO расширитель |
|
||||
| **Модели** | PCF8574, PCF8574A |
|
||||
| **Количество устройств на шине** | До 16 (адреса 0x20-0x27, 0x38-0x3F) |
|
||||
@@ -463,7 +437,7 @@ void app_main(void)
|
||||
## Коды ошибок
|
||||
|
||||
| Код ошибки | Описание |
|
||||
|------------|----------|
|
||||
| ------------ | ---------- |
|
||||
| `ESP_OK` | Операция выполнена успешно |
|
||||
| `ESP_ERR_INVALID_ARG` | Неверный аргумент (NULL указатель или неверная конфигурация) |
|
||||
| `ESP_ERR_INVALID_STATE` | Устройство не инициализировано или уже инициализировано |
|
||||
@@ -519,4 +493,4 @@ void app_main(void)
|
||||
|
||||
---
|
||||
|
||||
*Сгенерировано для zh_pcf8574 v2.8.2*
|
||||
"*Сгенерировано для zh_pcf8574 v3.0.0*"
|
||||
Reference in new issue
Block a user