#pragma once

#ifdef __cplusplus
extern "C" {  // Запрещаем name mangling для C++
#endif

/**
 * @brief Перечисление GPIO пинов (C-интерфейс)
 *
 * Содержит коды всех доступных GPIO пинов системы с их назначением.
 * Соответствует enum class HwhGpioPinEnum в C++ интерфейсе.
 */
typedef enum {
    /* MDB */
    kGpioMdb1SlvMstrSlct,  ///< Выбор режима Master/Slave для MDB1
    kGpioMdb2SlvMstrSlct,  ///< Выбор режима Master/Slave для MDB2
    kGpioMdb1SnifEnable,   ///< Включение режима сниффера для MDB1
    kGpioMdb2SnifEnable,   ///< Включение режима сниффера для MDB2
    /* DEX */
    kGpioDex1Dex2Enable,   ///< Включение интерфейса DEX1/DEX2
    /* GPI/GPO */
    kGpioGpi1,     ///< GPIO вход 1
    kGpioGpi2,     ///< GPIO вход 2
    kGpioGpo3,     ///< GPIO выход 3
    kGpioGpo4,     ///< GPIO выход 4
    kGpioGpiTclk1 = kGpioGpi1,  ///< Альтернативное название для GPIO входа 1 (TCLK)
    kGpioGpiTclk2 = kGpioGpi2,  ///< Альтернативное название для GPIO входа 2 (TCLK)
    kGpioGpoTioa3 = kGpioGpo3,  ///< Альтернативное название для GPIO выхода 3 (TIOA)
    kGpioGpoTioa4 = kGpioGpo4,  ///< Альтернативное название для GPIO выхода 4 (TIOA)
    /* UART */
    kGpioUrxd2,    ///< Приёмник UART2
    kGpioUtxd2,    ///< Передатчик UART2
    kGpioAuxUrxd4, ///< Приёмник AUX UART4
    kGpioAuxUtxd4, ///< Передатчик AUX UART4
    kGpioUart2Rx = kGpioUrxd2,  ///< Альтернативное название для приёмника UART2
    kGpioUart2Tx = kGpioUtxd2,  ///< Альтернативное название для передатчика UART2
    kGpioUart4Rx = kGpioAuxUrxd4, ///< Альтернативное название для приёмника UART4
    kGpioUart4Tx = kGpioAuxUtxd4, ///< Альтернативное название для передатчика UART4
    /* GPIO */
    kGpioGpio0,    ///< GPIO пин 0 общего назначения
    kGpioGpio1,    ///< GPIO пин 1 общего назначения
    kGpioGpio2,    ///< GPIO пин 2 общего назначения
    kGpioGpio3,    ///< GPIO пин 3 общего назначения
    /* FCOM IO */
    kGpioFcom0Io0, ///< FCOM0 IO линия 0
    kGpioFcom0Io1, ///< FCOM0 IO линия 1
    kGpioFcom0Io2, ///< FCOM0 IO линия 2
    kGpioFcom0Io3, ///< FCOM0 IO линия 3
    kGpioFcom0Io4, ///< FCOM0 IO линия 4
    kGpioFcom2Io0, ///< FCOM2 IO линия 0
    kGpioFcom2Io1, ///< FCOM2 IO линия 1
    kGpioFcom2Io2, ///< FCOM2 IO линия 2
    kGpioFcom2Io3, ///< FCOM2 IO линия 3
    kGpioFcom4Io2, ///< FCOM4 IO линия 2
    /* FCOM UARTs */
    kGpioAuxFcom2MuxSlct, ///< Выбор мультиплексора для FCOM2 UART
    /* CLASSD */
    kGpioClassdEnable,    ///< Включение аудио усилителя CLASSD
    /* ISO7816 */
    kGpioIso7816Disable,  ///< Отключение интерфейса ISO7816
    /* CAN */
    kGpioCanSilentEnable, ///< Включение silent режима CAN интерфейса
    /* RS485 */
    kGpioRs485ReceiverDisable, ///< Отключение приёмника RS485
    /* Modem power pins */
    kGpioModemPowerCommand, ///< Управление питанием модема (команда)
    kGpioModemReset,        ///< Сброс модема
    kGpioModemPowerEnable,  ///< Включение питания модема
    /* NFC */
    kGpioNfcReset,  ///< Сброс NFC контроллера
    kGpioNfcIrq,    ///< Прерывание от NFC контроллера
    kGpioNfcBusy,   ///< Флаг занятости NFC контроллера
    kGpioNfcDwl,    ///< Сигнал загрузки данных в NFC контроллер
    /* ADC MUX */
    kGpioAdcMux,    ///< Управление мультиплексором ADC
    /* QR Scanner */
    kGpioQrsTrig,   ///< Триггер сканера QR кодов
    kGpioQrsEnable, ///< Включение сканера QR кодов
} hwh_gpio_pin_enum;

/**
 * @brief Перечисление TTY устройств (C-интерфейс)
 *
 * Содержит коды всех доступных TTY устройств системы с их назначением.
 * Соответствует enum class HwhTtyDeviceEnum в C++ интерфейсе.
 */
typedef enum {
    /* MDB */
    kTtyDeviceMdb1Exe1Sniffer, ///< TTY для MDB1 исполнителя/сниффера
    kTtyDeviceMdb2Exe2Sniffer, ///< TTY для MDB2 исполнителя/сниффера
    kTtyDeviceMdb1Exe1,        ///< TTY для MDB1 исполнителя
    kTtyDeviceMdb2Exe2,        ///< TTY для MDB2 исполнителя
    /* DEX */
    kTtyDeviceDex1, ///< TTY для устройства DEX1
    kTtyDeviceRs232 = kTtyDeviceDex1, ///< TTY для RS232 интерфейса
    kTtyDeviceDex2, ///< TTY для устройства DEX2
    /* UART */
    kTtyDeviceUart2, ///< TTY для UART2
    kTtyDeviceUart4, ///< TTY для UART4
    /* FCOM UARTs */
    kTtyDeviceFcom0Uart,  ///< TTY для FCOM0 UART
    kTtyDeviceFcom0UartB, ///< TTY для FCOM0 UART (альтернативный)
    /* RS485 */
    kTtyDeviceRs485, ///< TTY для RS485 интерфейса
    /* QR Scanner */
    kTtyDeviceQrScanner, ///< TTY для сканера QR кодов
    /* Debug UART */
    kTtyDeviceDebugUart,  ///< TTY для отладочного UART
    /* Test Ports */
    kTtyDeviceRs485TestReciprocal,  ///< TTY преобразователя USB-RS485 в QC-тестах
    kTtyDeviceRs232TestReciprocal,  ///< TTY преобразователя USB-RS232 в QC-тестах
} hwh_tty_device_enum;

#ifdef __cplusplus
}  // Конец extern "C"
#endif
