# Інтерфейс подій
The _Events Interface_ provides a system-wide API for notification of events, which are published to GCSs via the _MAVLink Events Service_ (to GCSs and other components) and also stored in [system logs](../dev_log/logging.md).
Інтерфейс може використовуватися для публікації подій змін стану або будь-якого іншого типу події, включаючи такі речі, як стан готовності, завершення калібрування і досягнення цільової висоти злету.
:::info
Інтерфейс подій замінить використання викликів `mavlink_log_*` у коді PX4, (а також повідомлень `STATUS_TEXT` у MAVLink) для сповіщення про події в релізах PX4 після v1.13 та новіше.
Буде проміжний період коли [обидва підходи будуть підтримуватися](#backward-compatibility).
:::
## Використання
### Основне
А потім визначте та надішліть подію з бажаного місця коду:
```cpp
#include
```
А потім визначте та надішліть подію з бажаного місця коду:
```cpp
events::send(events::ID("mymodule_test"), events::Log::Info, "Test Message");
```
#### Зворотна сумісність
Для старих версій GCS без підтримки інтерфейсу подій, PX4 на цей момент надсилає також всі події як `mavlink_log_*` `STATUSTEXT` повідомлення.
Крім того, повідомлення має бути промарковано додатковою табуляцією (`\t`), щоб нові GCS змогли проігнорувати це і показати тільки подію.
Отже, коли ви додаєте подію, не забудьте також додати виклик `mavlink_log_`. Наприклад:
```cpp
mavlink_log_info(mavlink_log_pub, "Test Message\t");
events::send(events::ID("mymodule_test"), events::Log::Info, "Test Message");
```
Вище - мінімальний приклад, цей - у більш розширеному вигляді.
### Докладно
Пояснення та вимоги:
```cpp
uint8_t arg1 = 0;
float arg2 = -1.f;
/* EVENT
* @description
* This is the detailed event description.
*
* - value of arg1: {1}
* - value of arg2: {2:.1}
*
*
* (This paragraph is only meant to be shown to developers).
* This behavior can be configured with the parameter COM_EXAMPLE.
*
*
* Link to documentation: https://docs.px4.io
*/
events::send(events::ID("event_name"),
{events::Log::Error, events::LogInternal::Info}, "Event Message", arg1, arg2);
```
Події можуть мати незмінний набір аргументів, які можна вкласти у повідомлення або опис використовуючи шаблонні замінники (наприклад {2:.1m}, дивіться наступний розділ).
- `/* EVENT`: Цей тег вказує, що коментар описує метадані для наступної події.
- **event_name**: ім'я події (`events::ID(event_name)`).
- повинно бути унікальним в межах всього вихідного коду PX4.
Як загальне правило, додайте префікс з назвою модуля або вихідного файлу для великих модулів.
- має бути дійсна назва змінної, тобто не повинна містити пробіли, двокрапки тощо.
- з цього імені отримується 24-бітний ID події за допомогою геш-функції.
Це означає, що до тих пір, поки ім'я події залишається однаковим, ID залишиться тим же.
- **Рівень журналювання**:
- припустимі рівні журналювання такі ж, як і у перерахуванні MAVLink [MAV_SEVERITY](https://mavlink.io/en/messages/common.html#MAV_SEVERITY).
Рівні перелічені за зменшенням важливості:
```plain
Emergency,
Alert,
Critical,
Error,
Warning,
Notice,
Info,
Debug,
Disabled,
```
```
Попередньо ми вказали окремий зовнішній і внутрішній рівень журналювання, які є рівнями для користувачів GCS і в файлі журналу, відповідно: `{events::Log::Error, events::LogInternal::Info}`.
```
- **Повідомлення про подію**:
- Коротке повідомлення про подію в один рядок.
Може мати шаблонні замінники для аргументів (наприклад `{1}`). Для додаткової інформації дивіться нижче. Для додаткової інформації дивіться нижче.
- **Опис події**:
- Докладний, необов'язковий опис події.
- Може бути кілька рядів/абзаців.
- It may contain template placeholders for arguments (e.g. `{2}`) and supported tags (see below)
#### Аргументи та перерахування
Events can have a fixed set of arguments that can be inserted into the message or description using template placeholders (e.g. `{2:.1m}` - see next section).
Припустимі типи: `uint8_t`, `int8_t`, `uint16_t`, `int16_t`, `uint32_t`, `int32_t`, `uint64_t`, `int64_t` та `float`.
Формат тексту для опису повідомлення події:
- Користувацькі або характерні для PX4 перерахування для подій повинні бути визначені у [src/lib/events/enums.json](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/events/enums.json), та можуть бути використані як аргументи події у формі `events::send(...)`.
- "Загальні" події MAVLink визначені у [mavlink/libevents/events/common.json](https://github.com/mavlink/libevents/blob/master/events/common.json) та можуть бути використані як аргументи подій у формі `events::send(...)`.
#### Формат тексту
Події записуються відповідно до рівня внутрішнього журналювання, а Огляд польоту показує події.
- символи можна екранувати за допомогою \\
Ці символи повинні бути екрановані: '\\\\', '\\<', '\\{'.
- теги що підтримуються:
- Профілі: `CONTENT`
`CONTENT` буде показано, лише якщо назва збігається з налаштованим профілем.
Це може бути використано, наприклад, щоб приховати інформацію для розробників від кінцевих користувачів.
- URLs: `CONTENT`.
If `href` is not set, use `CONTENT` as `URL` (i.e.`https://docs.px4.io` is interpreted as `https://docs.px4.io`)
- Parameters: `PARAM_NAME`
- не дозволено використовувати вкладені теги того ж типу
- аргументи: шаблонні замінники, що відповідають синтаксису python з індексацією що починається з 1 (замість 0)
- загальна форма: `{ARG_IDX[:.NUM_DECIMAL_DIGITS][UNIT]}`
UNIT:
- m: горизонтальна відстань в метрах
- m_v: вертикальна відстань в метрах
- m^2: площа в метрах квадратних
- m/s: швидкість у метрах в секунду
- C: температура у градусах Цельсія
- `NUM_DECIMAL_DIGITS` підходить тільки для аргументів у вигляді дійсних чисел.
## Логування
Події записуються відповідно до рівня внутрішнього журналювання, а [Огляд польоту](../log/flight_review.md) показує події.
:::info
Огляд польоту завантажує метадані на основі головної гілки PX4, тому, якщо визначення ще немає на головній гілці, огляд зможе показати тільки ID події.
:::
## Імплементація
Метадані для всіх подій вбудовані в окремий JSON файл метаданих (з використанням python скрипту, який сканує весь вихідний код у пошуках викликів подій).
Метадані для всіх подій вбудовані в окремий JSON файл метаданих (з використанням python скрипту, який сканує весь вихідний код у пошуках викликів подій).
### Публікація метаданих події в GCS
Цей процес такий самий як і для [метаданих параметрів](../advanced/parameters_and_configurations.md#publishing-parameter-metadata-to-a-gcs).
Для отримання додаткової інформації див. Метадані PX4 (трансляція і публікація).
Цей процес такий самий як і для [метаданих параметрів](../advanced/parameters_and_configurations.md#publishing-parameter-metadata-to-a-gcs).
Для отримання додаткової інформації див. [Метадані PX4 (трансляція і публікація)](../advanced/px4_metadata.md)