#pragma once

#include "../../libs/include/pnet_api.h"

/**
 * Indication to the application that a module is requested by the controller in
 * a specific slot.
 *
 * This application call-back function is called by the Profinet stack to
 * indicate that the controller has requested the presence of a specific module,
 * ident number \a module_ident, in the slot number \a slot.
 *
 * The application must react to this by configuring itself accordingly (if
 * possible) and call function pnet_plug_module() to configure the stack for
 * this module.
 *
 * If the wrong module ident number is plugged then the stack will accept this,
 * but signal to the controller that a substitute module is fitted.
 *
 * This function should return 0 (zero) if a valid module was plugged. Or return
 * -1 if the application cannot handle this request.
 * 
 * Индикация приложению о том, что модуль запрошен контроллером в определенном слоте. 
 * 
 * Эта функция обратного вызова приложения вызывается стеком Profinet, чтобы указать, что 
 * контроллер запросил наличие определенного модуля с идентификационным номером \a module_ident в слоте с номером \a slot.
 * 
 * Приложение должно отреагировать на это, соответствующим образом сконфигурировав себя (если это возможно) и вызвать 
 * функцию pnet_plug_module() для настройки стека для этого модуля. 
 * 
 * Если установлен неправильный идентификационный номер модуля, стек примет это, но сигнализирует контроллеру, что установлен 
 * заменяющий модуль. 
 * 
 * Эта функция должна возвращать 0 (ноль), если был подключен допустимый модуль. 
 * Или верните -1, если приложение не может обработать этот запрос.
 *
 * @param net              InOut: The p-net stack instance
 * @param arg              InOut: User-defined data (not used by p-net)
 * @param api              In:    The AP identifier.
 * @param slot             In:    The slot number.
 * @param module_ident     In:    The module ident number.
 * @return  0  on success.
 *          -1 if an error occurred.
 */
int profinet_cb_exp_module_ind (
    pnet_t * net,
    void * arg,
    uint32_t api,
    uint16_t slot,
    uint32_t module_ident);