style: big renaming

This commit is contained in:
aZholtikov committed 2026-10-25 12:00:47 +03:00
1 parent 52f2da6368
commit 696091857e
3 files changed
+59 -59

No files matched your search

+6 -6
View File
@@ -12,7 +12,7 @@ upload_flags =
-Pusb -Pusb
-e -e
lib_deps = lib_deps =
https://github.com/aZholtikov/zh_rf_config#dev https://github.com/aZholtikov/zh_nrf24_config#dev
[env:ATmega168P] [env:ATmega168P]
platform = atmelavr platform = atmelavr
@@ -28,7 +28,7 @@ upload_flags =
-Pusb -Pusb
-e -e
lib_deps = lib_deps =
https://github.com/aZholtikov/zh_rf_config#dev https://github.com/aZholtikov/zh_nrf24_config#dev
[env:ATmega168PB] [env:ATmega168PB]
platform = atmelavr platform = atmelavr
@@ -44,7 +44,7 @@ upload_flags =
-Pusb -Pusb
-e -e
lib_deps = lib_deps =
https://github.com/aZholtikov/zh_rf_config#dev https://github.com/aZholtikov/zh_nrf24_config#dev
[env:ATmega328] [env:ATmega328]
platform = atmelavr platform = atmelavr
@@ -60,7 +60,7 @@ upload_flags =
-Pusb -Pusb
-e -e
lib_deps = lib_deps =
https://github.com/aZholtikov/zh_rf_config#dev https://github.com/aZholtikov/zh_nrf24_config#dev
[env:ATmega328P] [env:ATmega328P]
platform = atmelavr platform = atmelavr
@@ -76,7 +76,7 @@ upload_flags =
-Pusb -Pusb
-e -e
lib_deps = lib_deps =
https://github.com/aZholtikov/zh_rf_config#dev https://github.com/aZholtikov/zh_nrf24_config#dev
[env:ATmega328PB] [env:ATmega328PB]
platform = atmelavr platform = atmelavr
@@ -92,4 +92,4 @@ upload_flags =
-Pusb -Pusb
-e -e
lib_deps = lib_deps =
https://github.com/aZholtikov/zh_rf_config#dev https://github.com/aZholtikov/zh_nrf24_config#dev
+31 -31
View File
@@ -6,7 +6,7 @@
#include "util/delay.h" #include "util/delay.h"
#include "stdbool.h" #include "stdbool.h"
#include "math.h" #include "math.h"
#include "zh_rf_config.h" #include "zh_nrf24_config.h"
#if defined(__AVR_ATmega328PB__) #if defined(__AVR_ATmega328PB__)
#ifndef SPCR #ifndef SPCR
@@ -496,11 +496,11 @@ static uint8_t bme280_calib[33] = {0};
static int32_t bme280_t_fine = 0; static int32_t bme280_t_fine = 0;
static bool bme280_present = false; static bool bme280_present = false;
zh_rf_sensor_transmitted_data_t transmitted_data = {0}; zh_nrf24_sensor_transmitted_data_t transmitted_data = {0};
int main(void) int main(void)
{ {
transmitted_data.type = ZH_RF_SENSOR_BME280; transmitted_data.type = ZH_NRF24_SENSOR_BME280;
MCUSR &= ~(1 << WDRF); MCUSR &= ~(1 << WDRF);
wdt_disable(); wdt_disable();
cli(); cli();
@@ -517,8 +517,8 @@ int main(void)
} }
transmitted_data.id = (int16_t)device_id; transmitted_data.id = (int16_t)device_id;
{ {
uint8_t probe[ZH_RF_MAX_PAYLOAD_SIZE]; uint8_t probe[ZH_NRF24_MAX_PAYLOAD_SIZE];
if (zh_rf_sensor_build_payload(&transmitted_data, probe, sizeof(probe)) == 0) if (zh_nrf24_sensor_build_payload(&transmitted_data, probe, sizeof(probe)) == 0)
{ {
zh_enter_final_sleep(); zh_enter_final_sleep();
} }
@@ -535,8 +535,8 @@ int main(void)
transmitted_data.value_2 = (int16_t)lroundf(zh_bme280_compensate_temperature(adc_t) * 10.0); transmitted_data.value_2 = (int16_t)lroundf(zh_bme280_compensate_temperature(adc_t) * 10.0);
transmitted_data.value_3 = (int16_t)lroundf(zh_bme280_compensate_pressure(adc_p) * 0.00750062 * 10.0); transmitted_data.value_3 = (int16_t)lroundf(zh_bme280_compensate_pressure(adc_p) * 0.00750062 * 10.0);
transmitted_data.value_1 = (int16_t)lroundf(zh_bme280_compensate_humidity(adc_h) * 10.0); transmitted_data.value_1 = (int16_t)lroundf(zh_bme280_compensate_humidity(adc_h) * 10.0);
uint8_t payload[ZH_RF_MAX_PAYLOAD_SIZE]; uint8_t payload[ZH_NRF24_MAX_PAYLOAD_SIZE];
uint8_t size = zh_rf_sensor_build_payload(&transmitted_data, payload, sizeof(payload)); uint8_t size = zh_nrf24_sensor_build_payload(&transmitted_data, payload, sizeof(payload));
if (size > 0) if (size > 0)
{ {
zh_nrf24_send(payload, size); zh_nrf24_send(payload, size);
@@ -567,8 +567,8 @@ int main(void)
transmitted_data.value_2 = (int16_t)lroundf(zh_bme280_compensate_temperature(adc_t)); transmitted_data.value_2 = (int16_t)lroundf(zh_bme280_compensate_temperature(adc_t));
transmitted_data.value_3 = (int16_t)lroundf(zh_bme280_compensate_pressure(adc_p) * 0.00750062); transmitted_data.value_3 = (int16_t)lroundf(zh_bme280_compensate_pressure(adc_p) * 0.00750062);
transmitted_data.value_1 = (int16_t)lroundf(zh_bme280_compensate_humidity(adc_h)); transmitted_data.value_1 = (int16_t)lroundf(zh_bme280_compensate_humidity(adc_h));
uint8_t payload[ZH_RF_MAX_PAYLOAD_SIZE]; uint8_t payload[ZH_NRF24_MAX_PAYLOAD_SIZE];
uint8_t size = zh_rf_sensor_build_payload(&transmitted_data, payload, sizeof(payload)); uint8_t size = zh_nrf24_sensor_build_payload(&transmitted_data, payload, sizeof(payload));
if (size > 0) if (size > 0)
{ {
zh_nrf24_send(payload, size); zh_nrf24_send(payload, size);
@@ -1070,25 +1070,25 @@ static uint16_t zh_get_random_token(void)
static uint8_t zh_do_pairing(void) static uint8_t zh_do_pairing(void)
{ {
uint16_t token = zh_get_random_token(); uint16_t token = zh_get_random_token();
zh_rf_sensor_pairing_data_t pairing_request; zh_nrf24_sensor_pairing_data_t pairing_request;
pairing_request.type = (uint8_t)transmitted_data.type; pairing_request.type = (uint8_t)transmitted_data.type;
pairing_request.magic = ZH_RF_PAIRING_REQ_MAGIC; pairing_request.magic = ZH_NRF24_PAIRING_REQ_MAGIC;
pairing_request.token_hi = (uint8_t)(token >> 8); pairing_request.token_hi = (uint8_t)(token >> 8);
pairing_request.token_lo = (uint8_t)(token & 0xFF); pairing_request.token_lo = (uint8_t)(token & 0xFF);
pairing_request.id = 0; pairing_request.id = 0;
zh_nrf24_interrupt_init(); zh_nrf24_interrupt_init();
zh_rf_sensor_pairing_state_t state = ZH_RF_PAIR_SEND; zh_nrf24_sensor_pairing_state_t state = ZH_NRF24_PAIR_SEND;
uint8_t attempts = 0; uint8_t attempts = 0;
for (;;) for (;;)
{ {
switch (state) switch (state)
{ {
case ZH_RF_PAIR_SEND: case ZH_NRF24_PAIR_SEND:
nrf_event = false; nrf_event = false;
zh_nrf24_send_no_wait((uint8_t *)&pairing_request, ZH_RF_PAIRING_PACKET_SIZE); zh_nrf24_send_no_wait((uint8_t *)&pairing_request, ZH_NRF24_PAIRING_PACKET_SIZE);
state = ZH_RF_PAIR_TX_WAIT; state = ZH_NRF24_PAIR_TX_WAIT;
break; break;
case ZH_RF_PAIR_TX_WAIT: case ZH_NRF24_PAIR_TX_WAIT:
if ((PIND & (1 << PD2)) == 0) if ((PIND & (1 << PD2)) == 0)
{ {
nrf_event = true; nrf_event = true;
@@ -1112,19 +1112,19 @@ static uint8_t zh_do_pairing(void)
if ((status & NRF_STATUS_TX_DS) != 0) if ((status & NRF_STATUS_TX_DS) != 0)
{ {
zh_nrf24_enter_rx(); zh_nrf24_enter_rx();
state = ZH_RF_PAIR_RX_WAIT; state = ZH_NRF24_PAIR_RX_WAIT;
} }
else else
{ {
state = ZH_RF_PAIR_BACKOFF; state = ZH_NRF24_PAIR_BACKOFF;
} }
} }
else else
{ {
state = ZH_RF_PAIR_BACKOFF; state = ZH_NRF24_PAIR_BACKOFF;
} }
break; break;
case ZH_RF_PAIR_RX_WAIT: case ZH_NRF24_PAIR_RX_WAIT:
if ((PIND & (1 << PD2)) == 0) if ((PIND & (1 << PD2)) == 0)
{ {
nrf_event = true; nrf_event = true;
@@ -1147,27 +1147,27 @@ static uint8_t zh_do_pairing(void)
if ((status & NRF_STATUS_RX_DR) != 0) if ((status & NRF_STATUS_RX_DR) != 0)
{ {
uint8_t width = zh_nrf24_read_payload_width(); uint8_t width = zh_nrf24_read_payload_width();
if (width > ZH_RF_MAX_PAYLOAD_SIZE) if (width > ZH_NRF24_MAX_PAYLOAD_SIZE)
{ {
zh_nrf24_send_command(NRF_CMD_FLUSH_RX); zh_nrf24_send_command(NRF_CMD_FLUSH_RX);
zh_nrf24_write_register(NRF_REG_STATUS, NRF_STATUS_RX_DR); zh_nrf24_write_register(NRF_REG_STATUS, NRF_STATUS_RX_DR);
state = ZH_RF_PAIR_BACKOFF; state = ZH_NRF24_PAIR_BACKOFF;
break; break;
} }
if (width != ZH_RF_PAIRING_PACKET_SIZE) if (width != ZH_NRF24_PAIRING_PACKET_SIZE)
{ {
uint8_t dummy[ZH_RF_MAX_PAYLOAD_SIZE]; uint8_t dummy[ZH_NRF24_MAX_PAYLOAD_SIZE];
zh_nrf24_read_payload(dummy, width); zh_nrf24_read_payload(dummy, width);
zh_nrf24_write_register(NRF_REG_STATUS, NRF_STATUS_RX_DR); zh_nrf24_write_register(NRF_REG_STATUS, NRF_STATUS_RX_DR);
zh_nrf24_send_command(NRF_CMD_FLUSH_RX); zh_nrf24_send_command(NRF_CMD_FLUSH_RX);
state = ZH_RF_PAIR_BACKOFF; state = ZH_NRF24_PAIR_BACKOFF;
break; break;
} }
zh_rf_sensor_pairing_data_t pairing_response; zh_nrf24_sensor_pairing_data_t pairing_response;
zh_nrf24_read_payload((uint8_t *)&pairing_response, width); zh_nrf24_read_payload((uint8_t *)&pairing_response, width);
zh_nrf24_write_register(NRF_REG_STATUS, NRF_STATUS_RX_DR | NRF_STATUS_TX_DS | NRF_STATUS_MAX_RT); zh_nrf24_write_register(NRF_REG_STATUS, NRF_STATUS_RX_DR | NRF_STATUS_TX_DS | NRF_STATUS_MAX_RT);
zh_nrf24_send_command(NRF_CMD_FLUSH_RX); zh_nrf24_send_command(NRF_CMD_FLUSH_RX);
if (pairing_response.magic == ZH_RF_PAIRING_ACK_MAGIC && pairing_response.type == pairing_request.type && if (pairing_response.magic == ZH_NRF24_PAIRING_ACK_MAGIC && pairing_response.type == pairing_request.type &&
pairing_response.token_hi == pairing_request.token_hi && pairing_response.token_lo == pairing_request.token_lo && pairing_response.token_hi == pairing_request.token_hi && pairing_response.token_lo == pairing_request.token_lo &&
pairing_response.id != 0 && pairing_response.id != DEVICE_ID_UNASSIGNED) pairing_response.id != 0 && pairing_response.id != DEVICE_ID_UNASSIGNED)
{ {
@@ -1177,14 +1177,14 @@ static uint8_t zh_do_pairing(void)
return pairing_response.id; return pairing_response.id;
} }
} }
state = ZH_RF_PAIR_BACKOFF; state = ZH_NRF24_PAIR_BACKOFF;
} }
else else
{ {
state = ZH_RF_PAIR_BACKOFF; state = ZH_NRF24_PAIR_BACKOFF;
} }
break; break;
case ZH_RF_PAIR_BACKOFF: case ZH_NRF24_PAIR_BACKOFF:
zh_nrf24_enter_power_down(); zh_nrf24_enter_power_down();
nrf_event = false; nrf_event = false;
zh_wdt_start(WDT_T_4S); zh_wdt_start(WDT_T_4S);
@@ -1198,7 +1198,7 @@ static uint8_t zh_do_pairing(void)
{ {
zh_enter_final_sleep(); zh_enter_final_sleep();
} }
state = ZH_RF_PAIR_SEND; state = ZH_NRF24_PAIR_SEND;
break; break;
} }
} }
+22 -22
View File
@@ -23,31 +23,31 @@
### Структура данных ### Структура данных
Компонент не использует динамическое выделение памяти. Сырые показания хранятся в статических переменных, калибровочные коэффициенты BME280 — в массиве `bme280_calib[33]`. Перед передачей данные сериализуются функцией `zh_rf_sensor_build_payload()` из внешней библиотеки `zh_rf_config` в буфер `uint8_t[ZH_RF_MAX_PAYLOAD_SIZE]` (32 байта) в формате little-endian. Компонент не использует динамическое выделение памяти. Сырые показания хранятся в статических переменных, калибровочные коэффициенты BME280 — в массиве `bme280_calib[33]`. Перед передачей данные сериализуются функцией `zh_nrf24_sensor_build_payload()` из внешней библиотеки `zh_nrf24_config` в буфер `uint8_t[ZH_NRF24_MAX_PAYLOAD_SIZE]` (32 байта) в формате little-endian.
#### Формат передаваемого пакета #### Формат передаваемого пакета
Данные формируются в глобальной переменной `transmitted_data` типа `zh_rf_sensor_transmitted_data_t` из библиотеки `zh_rf_config`, затем сериализуются в полезную нагрузку. Для типа `ZH_RF_SENSOR_BME280` полный размер пакета — 12 байт (заголовок id + type + battery и три поля измерений, каждое `int16_t` в little-endian). Данные формируются в глобальной переменной `transmitted_data` типа `zh_nrf24_sensor_transmitted_data_t` из библиотеки `zh_nrf24_config`, затем сериализуются в полезную нагрузку. Для типа `ZH_NRF24_SENSOR_BME280` полный размер пакета — 12 байт (заголовок id + type + battery и три поля измерений, каждое `int16_t` в little-endian).
| Поле | Тип | Описание | | Поле | Тип | Описание |
| ------ | ----- | ---------- | | ------ | ----- | ---------- |
| `id` | `int16_t` | Идентификатор устройства, назначенный шлюзом при сопряжении | | `id` | `int16_t` | Идентификатор устройства, назначенный шлюзом при сопряжении |
| `type` | `int16_t` | Тип устройства (`ZH_RF_SENSOR_BME280`) | | `type` | `int16_t` | Тип устройства (`ZH_NRF24_SENSOR_BME280`) |
| `battery` | `int16_t` | Напряжение батареи × 100 (например, 330 = 3.30 В) | | `battery` | `int16_t` | Напряжение батареи × 100 (например, 330 = 3.30 В) |
| `value_1` | `int16_t` | Влажность (% × 10, например 453 = 45.3 %) | | `value_1` | `int16_t` | Влажность (% × 10, например 453 = 45.3 %) |
| `value_2` | `int16_t` | Температура (°C × 10, например 253 = 25.3 °C) | | `value_2` | `int16_t` | Температура (°C × 10, например 253 = 25.3 °C) |
| `value_3` | `int16_t` | Давление (мм рт. ст. × 10) | | `value_3` | `int16_t` | Давление (мм рт. ст. × 10) |
Тип устройства задаётся значением перечисления `ZH_RF_SENSOR_BME280` из библиотеки `zh_rf_config`. Тип устройства задаётся значением перечисления `ZH_NRF24_SENSOR_BME280` из библиотеки `zh_nrf24_config`.
#### Формат пакета сопряжения #### Формат пакета сопряжения
Пакет сопряжения — структура `zh_rf_sensor_pairing_data_t` (5 байт, `ZH_RF_PAIRING_PACKET_SIZE`): Пакет сопряжения — структура `zh_nrf24_sensor_pairing_data_t` (5 байт, `ZH_NRF24_PAIRING_PACKET_SIZE`):
| Поле | Тип | Описание | | Поле | Тип | Описание |
| ------ | ----- | ---------- | | ------ | ----- | ---------- |
| `type` | `uint8_t` | Тип датчика (код `ZH_RF_SENSOR_BME280`) | | `type` | `uint8_t` | Тип датчика (код `ZH_NRF24_SENSOR_BME280`) |
| `magic` | `uint8_t` | Маркер направления: `ZH_RF_PAIRING_REQ_MAGIC` (0xA5) в запросе, `ZH_RF_PAIRING_ACK_MAGIC` (0x5A) в ответе | | `magic` | `uint8_t` | Маркер направления: `ZH_NRF24_PAIRING_REQ_MAGIC` (0xA5) в запросе, `ZH_NRF24_PAIRING_ACK_MAGIC` (0x5A) в ответе |
| `token_hi` | `uint8_t` | Старший байт псевдослучайного токена | | `token_hi` | `uint8_t` | Старший байт псевдослучайного токена |
| `token_lo` | `uint8_t` | Младший байт псевдослучайного токена | | `token_lo` | `uint8_t` | Младший байт псевдослучайного токена |
| `id` | `uint8_t` | Идентификатор, назначенный шлюзом (в ответе) | | `id` | `uint8_t` | Идентификатор, назначенный шлюзом (в ответе) |
@@ -169,14 +169,14 @@
### Алгоритм загрузки идентификатора и сопряжения ### Алгоритм загрузки идентификатора и сопряжения
- При старте читается ID из EEPROM (`eeprom_read_byte`, адрес `0x00`); значения `0x00` и `0xFF` считаются признаком несопряжённого устройства. - При старте читается ID из EEPROM (`eeprom_read_byte`, адрес `0x00`); значения `0x00` и `0xFF` считаются признаком несопряжённого устройства.
- При отсутствии ID выполняется `zh_do_pairing()` — неблокирующая машина состояний (`ZH_RF_PAIR_SEND` → `ZH_RF_PAIR_TX_WAIT` → `ZH_RF_PAIR_RX_WAIT` → `ZH_RF_PAIR_BACKOFF`): - При отсутствии ID выполняется `zh_do_pairing()` — неблокирующая машина состояний (`ZH_NRF24_PAIR_SEND` → `ZH_NRF24_PAIR_TX_WAIT` → `ZH_NRF24_PAIR_RX_WAIT` → `ZH_NRF24_PAIR_BACKOFF`):
- генерируется токен (`zh_get_random_token()` из MCUSR и шума АЦП); - генерируется токен (`zh_get_random_token()` из MCUSR и шума АЦП);
- отправляется запрос `zh_rf_sensor_pairing_data_t` (magic `0xA5`) без ожидания (`zh_nrf24_send_no_wait`); - отправляется запрос `zh_nrf24_sensor_pairing_data_t` (magic `0xA5`) без ожидания (`zh_nrf24_send_no_wait`);
- после TX_DS трансивер переводится в RX-режим, ожидание ответа со сном и WDT-таймаутом 250 мс; - после TX_DS трансивер переводится в RX-режим, ожидание ответа со сном и WDT-таймаутом 250 мс;
- ответ валидируется по magic `0x5A`, типу, токену и ненулевому ID; ширина пакета проверяется через `R_RX_PL_WID`; - ответ валидируется по magic `0x5A`, типу, токену и ненулевому ID; ширина пакета проверяется через `R_RX_PL_WID`;
- при неудаче — backoff-пауза ~4 с (WDT), не более `PAIRING_TIMEOUT_ATTEMPTS` (7) попыток. - при неудаче — backoff-пауза ~4 с (WDT), не более `PAIRING_TIMEOUT_ATTEMPTS` (7) попыток.
- Назначенный ID сохраняется в EEPROM и записывается в `transmitted_data.id`. - Назначенный ID сохраняется в EEPROM и записывается в `transmitted_data.id`.
- После инициализации выполняется пробная сборка пакета `zh_rf_sensor_build_payload()`; при нулевом результате (неизвестный тип) — переход в постоянный сон. - После инициализации выполняется пробная сборка пакета `zh_nrf24_sensor_build_payload()`; при нулевом результате (неизвестный тип) — переход в постоянный сон.
### Алгоритм инициализации BME280 ### Алгоритм инициализации BME280
@@ -210,7 +210,7 @@
- Переход в Power Up (бит `PWR_UP` в CONFIG). - Переход в Power Up (бит `PWR_UP` в CONFIG).
- Ожидание 5 мс (время стартования осциллятора). - Ожидание 5 мс (время стартования осциллятора).
- Очистка TX FIFO командой `FLUSH_TX`. - Очистка TX FIFO командой `FLUSH_TX`.
- Загрузка полезной нагрузки командой `W_TX_PAYLOAD` (размер пакета определяет `zh_rf_sensor_build_payload()`, динамические пакеты включены: `FEATURE = EN_DPL`, `DYNPD = DPL_P0`). - Загрузка полезной нагрузки командой `W_TX_PAYLOAD` (размер пакета определяет `zh_nrf24_sensor_build_payload()`, динамические пакеты включены: `FEATURE = EN_DPL`, `DYNPD = DPL_P0`).
- Импульс CE для запуска передачи. - Импульс CE для запуска передачи.
- Ожидание завершения по пину IRQ (PD2) с таймаутом ~100 мс. - Ожидание завершения по пину IRQ (PD2) с таймаутом ~100 мс.
- Сброс флагов статуса, очистка FIFO, переход в Power Down. - Сброс флагов статуса, очистка FIFO, переход в Power Down.
@@ -235,7 +235,7 @@
```c ```c
int main(void) int main(void)
{ {
transmitted_data.type = ZH_RF_SENSOR_BME280; transmitted_data.type = ZH_NRF24_SENSOR_BME280;
MCUSR &= ~(1 << WDRF); MCUSR &= ~(1 << WDRF);
wdt_disable(); wdt_disable();
cli(); cli();
@@ -266,8 +266,8 @@ int main(void)
(int16_t)lroundf(zh_bme280_compensate_pressure(adc_p) * 0.00750062 * 10.0); (int16_t)lroundf(zh_bme280_compensate_pressure(adc_p) * 0.00750062 * 10.0);
transmitted_data.value_1 = transmitted_data.value_1 =
(int16_t)lroundf(zh_bme280_compensate_humidity(adc_h) * 10.0); (int16_t)lroundf(zh_bme280_compensate_humidity(adc_h) * 10.0);
uint8_t payload[ZH_RF_MAX_PAYLOAD_SIZE]; uint8_t payload[ZH_NRF24_MAX_PAYLOAD_SIZE];
uint8_t size = zh_rf_sensor_build_payload(&transmitted_data, uint8_t size = zh_nrf24_sensor_build_payload(&transmitted_data,
payload, sizeof(payload)); payload, sizeof(payload));
if (size > 0) { if (size > 0) {
zh_nrf24_send(payload, size); zh_nrf24_send(payload, size);
@@ -297,8 +297,8 @@ int main(void)
(int16_t)lroundf(zh_bme280_compensate_pressure(adc_p) * 0.00750062); (int16_t)lroundf(zh_bme280_compensate_pressure(adc_p) * 0.00750062);
transmitted_data.value_1 = transmitted_data.value_1 =
(int16_t)lroundf(zh_bme280_compensate_humidity(adc_h)); (int16_t)lroundf(zh_bme280_compensate_humidity(adc_h));
uint8_t payload[ZH_RF_MAX_PAYLOAD_SIZE]; uint8_t payload[ZH_NRF24_MAX_PAYLOAD_SIZE];
uint8_t size = zh_rf_sensor_build_payload(&transmitted_data, uint8_t size = zh_nrf24_sensor_build_payload(&transmitted_data,
payload, sizeof(payload)); payload, sizeof(payload));
if (size > 0) { if (size > 0) {
zh_nrf24_send(payload, size); zh_nrf24_send(payload, size);
@@ -320,7 +320,7 @@ int main(void)
// обнулите ячейку EEPROM. // обнулите ячейку EEPROM.
#define GATEWAY_CHANNEL 120 #define GATEWAY_CHANNEL 120
#define GATEWAY_ADDRESS 0xDDEEFF #define GATEWAY_ADDRESS 0xDDEEFF
// Тип устройства задаётся перечислением ZH_RF_SENSOR_BME280 // Тип устройства задаётся перечислением ZH_NRF24_SENSOR_BME280
``` ```
### Подключение по SPI и I2C (схема выводов) ### Подключение по SPI и I2C (схема выводов)
@@ -362,7 +362,7 @@ int main(void)
| Превышение таймаута передачи (~100 мс) | Цикл ожидания IRQ прерывается, передача может быть неполной | | Превышение таймаута передачи (~100 мс) | Цикл ожидания IRQ прерывается, передача может быть неполной |
| Нет ответа шлюза при сопряжении | После 7 попыток (`PAIRING_TIMEOUT_ATTEMPTS`) — переход в постоянный сон до сброса | | Нет ответа шлюза при сопряжении | После 7 попыток (`PAIRING_TIMEOUT_ATTEMPTS`) — переход в постоянный сон до сброса |
| Ширина принятого пакета ≠ 5 байт / > 32 байт | FIFO очищается, состояние сопряжения переходит в backoff | | Ширина принятого пакета ≠ 5 байт / > 32 байт | FIFO очищается, состояние сопряжения переходит в backoff |
| `zh_rf_sensor_build_payload()` вернул 0 | Неизвестный тип датчика или слишком мал буфер — переход в постоянный сон | | `zh_nrf24_sensor_build_payload()` вернул 0 | Неизвестный тип датчика или слишком мал буфер — переход в постоянный сон |
--- ---
@@ -385,7 +385,7 @@ int main(void)
- PlatformIO с плагином `platform-atmelavr` - PlatformIO с плагином `platform-atmelavr`
- AVR-GCC (входит в состав PlatformIO) - AVR-GCC (входит в состав PlatformIO)
- Библиотека `zh_rf_config` (ветка `dev`, подключается через `lib_deps` в `platformio.ini`) - Библиотека `zh_nrf24_config` (ветка `dev`, подключается через `lib_deps` в `platformio.ini`)
- Программатор USBasp (или совместимый) - Программатор USBasp (или совместимый)
- Фьюзы: LFUSE=`0xE2`, HFUSE=`0xDF`, EFUSE=`0x07` (8 МГц, без делителя) - Фьюзы: LFUSE=`0xE2`, HFUSE=`0xDF`, EFUSE=`0x07` (8 МГц, без делителя)
@@ -401,12 +401,12 @@ pio run -e ATmega328P -t upload
### Подключение в проекте ### Подключение в проекте
Компонент является самодостаточной прошивкой — не подключается как библиотека. Для интеграции в другой проект скопируйте `src/main.c`, добавьте зависимость `zh_rf_config` и адаптируйте макросы конфигурации. Компонент является самодостаточной прошивкой — не подключается как библиотека. Для интеграции в другой проект скопируйте `src/main.c`, добавьте зависимость `zh_nrf24_config` и адаптируйте макросы конфигурации.
```ini ```ini
; platformio.ini ; platformio.ini
lib_deps = lib_deps =
https://github.com/aZholtikov/zh_rf_config#dev https://github.com/aZholtikov/zh_nrf24_config#dev
``` ```
```c ```c
@@ -419,5 +419,5 @@ lib_deps =
#include "util/delay.h" #include "util/delay.h"
#include "stdbool.h" #include "stdbool.h"
#include "math.h" #include "math.h"
#include "zh_rf_config.h" #include "zh_nrf24_config.h"
``` ```