/**
 * @file epmux.h
 * @brief epmux API
 */
/* Project generated by builder 0.10.12 */
#ifndef INC_EPMUX_H
#define INC_EPMUX_H
#define EPMUX_BUILDER_VERSION_MAJOR 0
#define EPMUX_BUILDER_VERSION_MINOR 10
#define EPMUX_BUILDER_VERSION_BUGFIX 12
#define EPMUX_BUILDER_VERSION_SUFFIX ""
#define EPMUX_BUILDER_VERSION "0.10.12"


#ifdef __cplusplus
extern "C"
{
#endif
#include <stdint.h>
#include <wchar.h>


#undef EPMUX_URPC_API_EXPORT
#if defined(_WIN32)
    #if EPMUX_URPC_BUILDING_STAGE
        #define EPMUX_URPC_API_EXPORT __declspec(dllexport)
    #else
        #define EPMUX_URPC_API_EXPORT __declspec(dllimport)
    #endif
#else
    #define EPMUX_URPC_API_EXPORT __attribute__((visibility("default")))
#endif

#undef EPMUX_URPC_CALLING_CONVENTION
#if defined(_WIN32)
    #define EPMUX_URPC_CALLING_CONVENTION __cdecl
#else
    #define EPMUX_URPC_CALLING_CONVENTION
#endif

typedef int device_t;
#define device_undefined (-1)
typedef int result_t;
#define result_ok 0
#define result_error (-1)
#define result_not_implemented (-2)
#define result_value_error (-3)
#define result_nodevice (-4)
/**
 * \~english
 * @name Logging level
 * \~russian
 * @name Уровень логирования
 */
//@{
/**
 * \~english
 * Logging level - error
 * \~russian
 * Уровень логирования - ошибка
 */
#define LOGLEVEL_ERROR 		0x01
/**
 * \~english
 * Logging level - warning
 * \~russian
 * Уровень логирования - предупреждение
 */
#define LOGLEVEL_WARNING 	0x02
/**
 * \~english
 * Logging level - info
 * \~russian
 * Уровень логирования - информация
 */
#define LOGLEVEL_INFO		0x03
/**
 * \~english
 * Logging level - debug
 * \~russian
 * Уровень логирования - отладка
 */
#define LOGLEVEL_DEBUG		0x04
//@}

/**
 * \~english
 * Logging callback prototype.
 * @param loglevel - A logging level.
 * @param message - A message.
 * \~russian
 * Прототип функции обратного вызова для логирования.
 * @param loglevel - Уровень логирования.
 * @param message - Сообщение.
 */
typedef void (EPMUX_URPC_CALLING_CONVENTION *epmux_logging_callback_t)(int loglevel, const wchar_t *message, void *user_data);

/**
 * \~english
 * Simple callback for logging to stderr in wide chars.
 * @param loglevel - A logging level.
 * @param message - A message.
 * \~russian
 * Простая функция логирования на stderr в широких символах.
 * @param loglevel - Уровень логирования.
 * @param message - Сообщение.
 */
EPMUX_URPC_API_EXPORT void EPMUX_URPC_CALLING_CONVENTION epmux_logging_callback_stderr_wide(int loglevel, const wchar_t *message, void *user_data);

/**
 * \~english
 * Simple callback for logging to stderr in narrow (single byte) chars.
 * @param loglevel - A logging level.
 * @param message - A message.
 * \~russian
 * Простая функция логирования на stderr в узких (однобайтных) символах.
 * @param loglevel - Уровень логирования.
 * @param message - Сообщение.
 */
EPMUX_URPC_API_EXPORT void EPMUX_URPC_CALLING_CONVENTION epmux_logging_callback_stderr_narrow(int loglevel, const wchar_t *message, void *user_data);

/**
 * \~english
 * Sets a logging callback.
 * Passing NULL disables logging.
 * @param logging_callback a callback for log messages
 * \~russian
 * Устанавливает функцию обратного вызова для логирования.
 * Передача NULL в качестве аргумента отключает логирование.
 * @param logging_callback указатель на функцию обратного вызова
 */
EPMUX_URPC_API_EXPORT void EPMUX_URPC_CALLING_CONVENTION epmux_set_logging_callback(epmux_logging_callback_t cb, void *data);
#define EPMUX_MAX_CHAIN_LENGTH    0x10 /**< \~english  \~russian  */
#define EPMUX_MODULE_TYPE_A    0x1 /**< \~english  \~russian  */
#define EPMUX_MODULE_TYPE_AB    0x2 /**< \~english  \~russian  */
#define EPMUX_NO_MODULE    0x0 /**< \~english  \~russian  */
typedef struct
{
    uint8_t Manufacturer[16]; /**< \~english Manufacturer name. The name is set by the manufacturer. \~russian Имя производителя. Устанавливается производителем. */
    uint8_t ProductName[16]; /**< \~english Product name. The name is set by the manufacturer. \~russian Название продукта. Устанавливается производителем. */
    uint8_t ControllerName[16]; /**< \~english User controller name. This name can be set by user via additional command. \~russian Пользовательское имя контроллера. Может быть установлено пользователем с помощью отдельной команды. */
    uint8_t HardwareMajor; /**< \~english The major number of the hardware version. \~russian Основной номер версии железа. */
    uint8_t HardwareMinor; /**< \~english Minor number of the hardware version. \~russian Второстепенный номер версии железа. */
    uint16_t HardwareBugfix; /**< \~english Number of edits for this release of hardware. \~russian Номер правок этой версии железа. */
    uint8_t BootloaderMajor; /**< \~english Bootloader major version number. \~russian Мажорный номер версии загрузчика. */
    uint8_t BootloaderMinor; /**< \~english Bootloader minor version number. \~russian Минорный номер версии загрузчика. */
    uint16_t BootloaderBugfix; /**< \~english Bootloader release version number. \~russian Номер релиза версии загрузчика. */
    uint8_t FirmwareMajor; /**< \~english Firmware major version number. \~russian Мажорный номер версии прошивки. */
    uint8_t FirmwareMinor; /**< \~english Firmware minor version number. \~russian Минорный номер версии прошивки. */
    uint16_t FirmwareBugfix; /**< \~english Firmware release version number. \~russian Номер релиза версии прошивки. */
    uint32_t SerialNumber; /**< \~english Device serial number. \~russian Серийный номер изделия. */
    uint8_t Reserved[8]; /**< \~english  \~russian  */

} epmux_get_identity_information_t;

typedef struct
{
    uint8_t DebugData[128]; /**< \~english Arbitrary debug data. \~russian Отладочные данные. */
    uint8_t Reserved[8]; /**< \~english  \~russian  */

} epmux_debug_read_t;

typedef struct
{
    uint8_t DebugData[128]; /**< \~english Arbitrary debug data. \~russian Отладочные данные. */
    uint8_t Reserved[8]; /**< \~english  \~russian  */

} epmux_debug_write_t;

typedef struct
{
    uint8_t ChainLength; /**< \~english Device chain length. Equals to the number of connected modules. \~russian Длина цепочки устройств. Длина цепочки равна количеству подключенных модулей. */
    uint8_t ChainStructure[16]; /**< \~english Device chain structure. Shows arrangement of modules of different types. Module types: 1 – module type A, supports channel connection to line A only; 2 – module type AB, support channel connection to both line A and line B; 0 – placeholder for the remaining part of the array, does not correspond to any real modules. \~russian Структура цепочки устройств. Показывает, какого типа модули на каких позициях расположены. Типы модулей: 1 – модуль типа А, поддерживает подключение каналов только к линии А; 2 – модуль типа AB, поддерживает подключение каналов как к линии A, так и к линии B; 0 – используется для заполнения оставшейся части массива, реальным модулям не соответствует. */
    uint8_t Reserved[16]; /**< \~english Software should not rely on the value of this field. To provide compatibility with future products the value of this field shouldn’t be modified. \~russian Значение данного поля не должно использоваться в прикладном ПО. Для обеспечения совместимости с другими устройствами не изменяйте значение этого поля. */

} epmux_get_chain_structure_t;

typedef struct
{
    uint8_t ModuleNumber; /**< \~english Module chain position. Numbering starts from 1. 0 – disconnect all channels. \~russian Порядковый номер модуля в цепочке устройств. Нумерация начинается с единицы. 0 –отключить все каналы. */
    uint8_t ChannelNumber; /**< \~english Channel channel number within the module (connector pin number). Numbering starts from 1. 0 – disconnect all channels. Valid range:0 – 64. \~russian Номер канала в пределах модуля (номер контакта в разъёме). Нумерация начинается с единицы. 0 –отключить все каналы. Диапазон допустимых значений: 0 – 64. */
    uint8_t Reserved[14]; /**< \~english Software should not rely on the value of this field. To provide compatibility with future products the value of this field shouldn’t be modified. \~russian Значение данного поля не должно использоваться в прикладном ПО. Для обеспечения совместимости с другими устройствами не изменяйте значение этого поля. */

} epmux_channel_for_line_a_t;

typedef struct
{
    uint8_t ModuleNumber; /**< \~english Module chain position. Numbering starts from 1. 0 – disconnect all channels. \~russian Порядковый номер модуля в цепочке устройств. Нумерация начинается с единицы. 0 –отключить все каналы. */
    uint8_t ChannelNumber; /**< \~english Channel channel number within the module (connector pin number). Numbering starts from 1. 0 – disconnect all channels. Valid range:0 – 64. \~russian Номер канала в пределах модуля (номер контакта в разъёме). Нумерация начинается с единицы. 0 –отключить все каналы. Диапазон допустимых значений: 0 – 64. */
    uint8_t Reserved[14]; /**< \~english Software should not rely on the value of this field. To provide compatibility with future products the value of this field shouldn’t be modified. \~russian Значение данного поля не должно использоваться в прикладном ПО. Для обеспечения совместимости с другими устройствами не изменяйте значение этого поля. */

} epmux_channel_for_line_b_t;
/**
 * \~english
 * Open a device by name \a name and return identifier of the device which can be used in calls.
 * @param[in] name - A device name.
 * Device name has form "com:port" or "xi-net://host/serial" or "udp://host:port".
 * In case of USB-COM port the "port" is the OS device uri.
 * For example "com:\\.\COM3" in Windows or "com:///dev/ttyACM34" in Linux/Mac.
 * In case of network device the "host" is an IPv4 address or fully qualified domain uri (FQDN),
 * "serial" is the device serial number in hexadecimal system.
 * For example "xi-net://192.168.0.1/00001234" or "xi-net://hostname.com/89ABCDEF".
 * In case of ethernet udp-com adapter the "host" is an IPv4 address, "port" is network port
 * For example: "udp://192.168.0.2:1024"
 * Note: only one program may use COM-device in same time.
 * If errors occur when opening device, you need to make sure that the COM port is in the system and
 * device is not currently used by other programs.
 * \~russian
 * Открывает устройство по имени \a name и возвращает идентификатор устройства.
 * @param[in] name - Имя устройства.
 * Имя устройства имеет вид "com:port" или xi-net://host/serial или udp://host:port.
 * Для COM устройства "port" это имя устройства в ОС.
 * Например "com:\\.\COM3" (Windows) или "com:///dev/tty/ttyACM34" (Linux/Mac).
 * Для сетевого (XiNet) устройства "host" это IPv4 адрес или полностью определённое имя домена,
 * "serial" это серийный номер устройства в шестнадцатеричной системе.
 * Например "xi-net://192.168.0.1/00001234" или "xi-net://hostname.com/89ABCDEF".
 * Для ethernet переходника com-udp "host" это IPv4 адрес переходника, "port" это порт переходника.
 * Например "udp://192.168.0.2:1024"
 * Замечание: в один момент времени COM устройство может использоваться только одной программой.
 * Если при открытии устройства возникают ошибки, нужно убедиться, что COM-порт есть в системе и что это
 * устройство в данный момент не используется другими программами
 */
EPMUX_URPC_API_EXPORT device_t EPMUX_URPC_CALLING_CONVENTION epmux_open_device(const char *uri);

/**
 * \~english
 * Get library version.
 * @param[out] lib_version - Library version.
 * \~russian
 * Версия библиотеки.
 * @param[out] lib_version - Версия библиотеки.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_libversion(char *lib_version);

/**
 * \~english
 * Save all settings from controller's RAM to controller's flash memory, replacing previous data in controller's flash memory.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * \~russian
 * При получении команды контроллер выполняет операцию сохранения текущих настроек во встроенную энергонезависимую память контроллера.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_save_settings(device_t handle);

/**
 * \~english
 * Read all settings from controller's flash memory to controller's RAM, replacing previous data in controller's RAM.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * \~russian
 * Чтение всех настроек контроллера из flash памяти в оперативную, заменяя текущие настройки.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_read_settings(device_t handle);

/**
 * \~english
 * Return device identity information such as firmware version and serial number. It is useful to find your device in a list of available devices. It can be called from the firmware and bootloader.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * @param[out] output - Device out data.
 * \~russian
 * Возвращает идентификационную информацию об устройстве, такую как номера версий прошивки и серийный номер. Эта информация удобна для поиска нужного устройства среди списка доступных. Может быть вызвана как из прошивки, так и из бутлоадера.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 * @param[out] output - Данные, получаемые с устройства.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_get_identity_information(device_t handle, epmux_get_identity_information_t *output);

/**
 * \~english
 * This command reboots the controller to the bootloader. After receiving this command, the firmware sets a flag (for bootloader), sends reply and restarts the controller.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * \~russian
 * Команда служит для перезагрузки контроллера в загрузчик. Получив такую команду, прошивка платы устанавливает флаг (для загрузчика), отправляет ответ и перезагружает контроллер.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_reboot_to_bootloader(device_t handle);

/**
 * \~english
 * Read data from firmware for debug purpose. Its use depends on context, firmware version and previous history. Should be used by manufacturer only.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * @param[out] output - Device out data.
 * \~russian
 * Чтение данных из прошивки для отладки и поиска неисправностей. Получаемые данные зависят от версии прошивки, истории и контекста использования. Должна использоваться только производителем.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 * @param[out] output - Данные, получаемые с устройства.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_debug_read(device_t handle, epmux_debug_read_t *output);

/**
 * \~english
 * Write data to firmware for debug purpose. Should be used by manufacturer only.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * @param[in] input - Device in data.
 * \~russian
 * Запись данных в прошивку для отладки и поиска неисправностей. Используется только производиетелем.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 * @param[in] input - Данные, отправляемые устройству.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_debug_write(device_t handle, epmux_debug_write_t *input);

/**
 * \~english
 * Resets controller equivalently to the power switch reset. Shouldn't be used in normal practice.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * \~russian
 * Команда для перезагрузки контроллера эквивалентная перезагрузке по питанию. В нормальной практике использоваться не должна.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_reset(device_t handle);

/**
 * \~english
 * Automatic module chain structure discovery / update. By this command you can discover the number of connected modules, their types and arrangement in device chain. This command is not only for device discovery, but also for internal automatic configuration of the multiplexor. Therefore this command should be called in case of «hot-plug» hardware changes (module connection / disconnection). Otherwise you can face errors related to incorrect module numbering.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * @param[out] output - Device out data.
 * \~russian
 * Автоматическое определение / обновление структуры цепочки подключенных модулей. Позволяет узнать количество подключенных модулей, их тип и взаимное расположение в цепочке устройств. Данная команда используется не только для сбора информации, но и для автоматической конфигурации мультиплексора. Поэтому при обновлении конфигурации устройств «на горячую» (подключении / отключении новых модулей) необходимо вызвать данную команду перед установкой каналов. В противном случае возможны ошибки, связанные с неправильной нумерацией модулей.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 * @param[out] output - Данные, получаемые с устройства.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_get_chain_structure(device_t handle, epmux_get_chain_structure_t *output);

/**
 * \~english
 * Turns off all channels of all modules.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * \~russian
 * Выключает все каналы всех модулей.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_all_channels_off(device_t handle);

/**
 * \~english
 * Active channel for line A (main line for signal output). The channel is determined by the module chain position and the channel number within the module (connector pin number). Only one channel can be connected to the line at the same time. In case of new channel connection the previous channel will be disconnected automatically. In case of «hot-plug» hardware changes (module connection / disconnection) hardware chain configuration should be updated by the get_chain_structure command before new channel connection.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * @param[out] output - Device out data.
 * \~russian
 * Активный канал линии A (основная линия для вывода сигнала). Канал определяется порядковым номером модуля в цепочке и номером канала в пределах модуля (номер контакта в разъёме). Линия может быть подключена ровно к одному из каналов. При подключении нового канала, старый канал будет отключен автоматически. При изменении конфигурации оборудования «на горячую» (отключение / подключение модулей) перед установкой канала нужно обновить конфигурацию цепочки устройств с помощью команды get_chain_structure.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 * @param[out] output - Данные, получаемые с устройства.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_get_channel_for_line_a(device_t handle, epmux_channel_for_line_a_t *output);

/**
 * \~english
 * Active channel for line A (main line for signal output). The channel is determined by the module chain position and the channel number within the module (connector pin number). Only one channel can be connected to the line at the same time. In case of new channel connection the previous channel will be disconnected automatically. In case of «hot-plug» hardware changes (module connection / disconnection) hardware chain configuration should be updated by the get_chain_structure command before new channel connection.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * @param[in] input - Device in data.
 * \~russian
 * Активный канал линии A (основная линия для вывода сигнала). Канал определяется порядковым номером модуля в цепочке и номером канала в пределах модуля (номер контакта в разъёме). Линия может быть подключена ровно к одному из каналов. При подключении нового канала, старый канал будет отключен автоматически. При изменении конфигурации оборудования «на горячую» (отключение / подключение модулей) перед установкой канала нужно обновить конфигурацию цепочки устройств с помощью команды get_chain_structure.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 * @param[in] input - Данные, отправляемые устройству.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_set_channel_for_line_a(device_t handle, epmux_channel_for_line_a_t *input);

/**
 * \~english
 * Active channel for line B. The channel is determined by the module chain position and the channel number within the module (connector pin number). Only one channel can be connected to the line at the same time. In case of new channel connection the previous channel will be disconnected automatically. Some modules don’t support channel connection to line B. You can find out the modules with line B connection support in current hardware chain configuration by the get_chain_structure command. In case of «hot-plug» hardware changes (module connection / disconnection) hardware chain configuration should be updated by the get_chain_structure command before new channel connection.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * @param[out] output - Device out data.
 * \~russian
 * Активный канал линии B. Канал определяется порядковым номером модуля в цепочке и номером канала в пределах модуля (номер контакта в разъёме). Линия может быть подключена ровно к одному из каналов. При подключении нового канала, старый канал будет отключен автоматически. Линия B поддерживается не на всех модулях. Узнать, какие модули в текущей конфигурации цепочки поддерживают подключение каналов к линии B, можно с помощью команды get_chain_structure. При изменении конфигурации оборудования «на горячую» (отключение / подключение модулей) перед установкой канала нужно обновить конфигурацию цепочки устройств с помощью команды get_chain_structure.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 * @param[out] output - Данные, получаемые с устройства.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_get_channel_for_line_b(device_t handle, epmux_channel_for_line_b_t *output);

/**
 * \~english
 * Active channel for line B. The channel is determined by the module chain position and the channel number within the module (connector pin number). Only one channel can be connected to the line at the same time. In case of new channel connection the previous channel will be disconnected automatically. Some modules don’t support channel connection to line B. You can find out the modules with line B connection support in current hardware chain configuration by the get_chain_structure command. In case of «hot-plug» hardware changes (module connection / disconnection) hardware chain configuration should be updated by the get_chain_structure command before new channel connection.
 * @param[in] handle - Device ID, obtained by epmux_open_device() function.
 * @param[in] input - Device in data.
 * \~russian
 * Активный канал линии B. Канал определяется порядковым номером модуля в цепочке и номером канала в пределах модуля (номер контакта в разъёме). Линия может быть подключена ровно к одному из каналов. При подключении нового канала, старый канал будет отключен автоматически. Линия B поддерживается не на всех модулях. Узнать, какие модули в текущей конфигурации цепочки поддерживают подключение каналов к линии B, можно с помощью команды get_chain_structure. При изменении конфигурации оборудования «на горячую» (отключение / подключение модулей) перед установкой канала нужно обновить конфигурацию цепочки устройств с помощью команды get_chain_structure.
 * @param[in] handle - Идентификатор устройства, полученный от epmux_open_device().
 * @param[in] input - Данные, отправляемые устройству.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_set_channel_for_line_b(device_t handle, epmux_channel_for_line_b_t *input);

/**
 * \~english
 * Close specified device.
 * @param handle_ptr - An identifier of device.
 * \~russian
 * Закрывает устройство.
 * @param handle_ptr - Идентификатор устройства.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_close_device(device_t *handle_ptr);

/**
 * \~english
 * Load profile from device.
 * @param[in] handle - Device id.
 * @param[out] buffer - Pointer to output char* buffer. Memory for char* pointer must be allocated.
 * @param[out] allocate - Function for memory allocate.
 * \~russian
 * Загружает профиль с устройства.
 * @param[in] handle - Идентификатор устройства.
 * @param[out] buffer -  Адрес указателя на выходной буфер.
 * Память для указателя на char* должна быть выделена.
 * @param[out] allocate - Функция для выделения памяти.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_get_profile(device_t handle, char **buffer, void *(*allocate)(size_t));

/**
 * \~english
 * Save profile to device
 * @param[in] handle - Device id.
 * @param[in] buffer - Input char* buffer.
 * \~russian
 * Загружает профиль с устройства.
 * @param[in] handle - Идентификатор устройства.
 * @param[in] buffer - Входной буфер, откуда будет считан профиль.
 */
EPMUX_URPC_API_EXPORT result_t EPMUX_URPC_CALLING_CONVENTION epmux_set_profile(device_t handle, char *buffer);

#ifdef __cplusplus
}
#endif
#endif
