#pragma once

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

/**
 * Indication to the application that a reset request was received from the
 * IO-controller.
 *
 * The IO-controller can ask for communication parameters or application
 * data to be reset, or to do a factory reset.
 *
 * This application call-back function is called by the Profinet stack on every
 * reset request (via the DCP "Set" command) from the Profinet controller.
 *
 * The application should reset the application data if
 * \a should_reset_application is true. For other cases this callback is
 * triggered for diagnostic reasons.
 *
 * The return value from this call-back function is ignored by the Profinet
 * stack.
 *
 * It is optional to implement this callback (if you do not have any application
 * data that could be reset).
 *
 * Reset modes:
 *  * 0:  (Power-on reset, not from IO-controller. Will not trigger this.)
 *  * 1:  Reset application data
 *  * 2:  Reset communication parameters (done by the stack)
 *  * 99: Reset all (factory reset).
 *
 * The reset modes 1-9 (out of which 1 and 2 are supported here) are defined
 * by the Profinet standard. Value 99 is used here to indicate that the
 * IO-controller has requested a factory reset via another mechanism.
 *
 * In order to remain responsive to DCP communication and Ethernet switching,
 * the device should not do a hard or soft reset for reset mode 1 or 2. It is
 * allowed for the factory reset case (but not mandatory).
 *
 * No \a arep information is available, as this callback typically is triggered
 * when there is no active connection.
 * 
 * Индикация приложению о том, что от IO-контроллера получен запрос на сброс. 
 * 
 * Контроллер ввода-вывода может запросить сброс параметров связи или данных приложения или выполнить сброс к заводским настройкам. 
 * 
 * Эта функция обратного вызова приложения вызывается стеком Profinet при каждом запросе на сброс (через команду «Set» DCP) 
 * от контроллера Profinet. 
 * 
 * Приложение должно сбросить данные приложения, если \a should_reset_application имеет значение true. В других случаях этот 
 * обратный вызов запускается по диагностическим причинам. 
 * 
 * Возвращаемое значение этой функции обратного вызова игнорируется стеком Profinet. 
 * 
 * Реализовать этот обратный вызов необязательно (если у вас нет данных приложения, которые можно было бы сбросить). 
 * 
 * Режимы сброса:
 * 0: (Сброс при включении питания, а не от IO-контроллера. Это не срабатывает.)
 * 1: Сбросить данные приложения
 * 2: Сброс параметров связи (выполняется стеком)
 * 99: Сбросить все (сброс настроек). 
 * 
 * Режимы сброса 1-9 (из которых здесь поддерживаются 1 и 2) определены стандартом Profinet. Здесь используется значение 99, 
 * чтобы указать, что контроллер ввода-вывода запросил сброс к заводским настройкам с помощью другого механизма. 
 * 
 * Чтобы оставаться чувствительным к связи DCP и коммутации Ethernet, устройство не должно выполнять аппаратный 
 * или программный сброс для режима сброса 1 или 2. Это разрешено для случая сброса к заводским настройкам (но не обязательно). 
 * 
 * Информация \a arep недоступна, так как этот обратный вызов обычно запускается при отсутствии активного соединения.
 *
 * @param net                      InOut: The p-net stack instance
 * @param arg                      InOut: User-defined data (not used by p-net)
 * @param should_reset_application In:    True if the user should reset the
 *                                        application data.
 * @param reset_mode               In:    Detailed reset information.
 * @return 0 on success. Other values are ignored.
 */
int profinet_cb_reset_ind (
    pnet_t * net,
    void * arg,
    bool should_reset_application,
    uint16_t reset_mode);