dev(UML-981): Добавлено описание колбэков

This commit is contained in:
Vadim Sychev 2022-07-20 14:21:00 +03:00
parent a2573e0b41
commit 569b714557
19 changed files with 556 additions and 16 deletions

View File

@ -291,6 +291,11 @@ int Profinet::callbackStateInd ( uint32_t arep, pnet_event_values_t event)
int Profinet::callbackConnectInd ( uint32_t arep, pnet_result_t * p_result) int Profinet::callbackConnectInd ( uint32_t arep, pnet_result_t * p_result)
{ {
/**
* @brief По идее здесь ничего не нужно делать
* Если будет возвращено 0, то соединение будет установлено.
* Если будет возвращено значение отличное от 0, то не будет, в этом случае нужно указать p_result.
*/
return 0; return 0;
} }

View File

@ -7,7 +7,6 @@
#include <memory> #include <memory>
#include "profinet_slot.hpp" #include "profinet_slot.hpp"
#include "profinet_serv_data.hpp" #include "profinet_serv_data.hpp"
#include "profinet_iface.hpp"
class Profinet { class Profinet {
public: public:
@ -39,15 +38,6 @@ private:
ProfinetSlot * getSlotPtr(uint16_t slot_nbr, uint32_t module_id); ProfinetSlot * getSlotPtr(uint16_t slot_nbr, uint32_t module_id);
public: public:
/**
* @brief
* AREP - Application Relationship End Point (uint32),
* pretty much an index into an array of AR.
* AR - Application Relation. Consists of several communication relations (CR).
* Typically an IO AR, which is a connection to a PLC, but can also be an
* Supervisor AR.
*/
/** /**
* *
* Indication to the application that a module is requested by the controller in * Indication to the application that a module is requested by the controller in

View File

@ -2,6 +2,30 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* The controller acknowledges the alarm ACK sent previously.
*
* This functionality is used for alarms triggered by the IO-controller.
*
* It is optional to implement this callback.
* The return value from this call-back function is ignored by the Profinet
* stack.
*
* Контроллер подтверждает отправленный ранее ACK аварийного сигнала.
*
* Эта функциональность используется для аварийных сигналов, запускаемых IO-контроллером.
*
* Реализовать этот обратный вызов необязательно. Возвращаемое значение этой функции обратного вызова игнорируется стеком Profinet.
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param res In: 0 if ACK was received by the remote side.
* This is cnf(+).
* -1 if ACK was not received by the remote
* side. This is cnf(-).
* @return 0 on success. Other values are ignored.
*/
int profinet_cb_alarm_ack_cnf ( int profinet_cb_alarm_ack_cnf (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -2,6 +2,28 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* The controller acknowledges the alarm sent previously.
* It is now possible to send another alarm.
*
* This functionality is used for alarms triggered by the IO-device.
*
* It is optional to implement this callback.
* The return value from this call-back function is ignored by the Profinet
* stack.
*
* Контроллер подтверждает отправленный ранее аварийный сигнал. Теперь можно отправить еще один сигнал тревоги.
*
* Эта функция используется для аварийных сигналов, инициируемых IO-устройством.
*
* Реализовать этот обратный вызов необязательно. Возвращаемое значение этой функции обратного вызова игнорируется стеком Profinet.
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param p_pnio_status In: Detailed ACK information.
* @return 0 on success. Other values are ignored.
*/
int profinet_cb_alarm_cnf ( int profinet_cb_alarm_cnf (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -2,6 +2,32 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* The IO-controller has sent an alarm to the device.
*
* This functionality is used for alarms triggered by the IO-controller.
*
* When receiving this indication, the application shall
* respond with \a pnet_alarm_send_ack(), which
* may be called in the context of this callback.
*
* IO-контроллер отправил сигнал тревоги на устройство.
*
* Эта функциональность используется для аварийных сигналов, запускаемых IO-контроллером.
* При получении этого указания приложение должно ответить \a pnet_alarm_send_ack(), которое
* может быть вызвано в контексте этого обратного вызова.
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param p_alarm_argument In: The alarm argument (with slot, subslot,
* alarm_type etc)
* @param data_len In: Data length
* @param data_usi In: Alarm USI
* @param p_data In: Alarm data
* @return 0 on success.
* Other values are ignored.
*/
int profinet_cb_alarm_ind ( int profinet_cb_alarm_ind (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -2,6 +2,39 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that a CControl confirmation was received from
* the controller. Typically this means that the controller has received our
* "Application ready" message.
*
* This application call-back function is called by the Profinet stack on every
* CControl confirmation from the Profinet controller.
*
* The application is not required to take any action.
* The return value from this call-back function is ignored by the Profinet
* stack. In case of error the application should provide error information in
* \a p_result.
*
* It is optional to implement this callback (assumes success?).
*
* Индикация приложению о том, что от контроллера получено подтверждение CControl. Обычно это означает,
* что контроллер получил наше сообщение «Приложение готово».
*
* Эта функция обратного вызова приложения вызывается стеком Profinet при каждом подтверждении CControl от контроллера Profinet.
*
* Приложение не требует никаких действий. Возвращаемое значение этой функции обратного вызова игнорируется стеком Profinet.
*
* В случае ошибки приложение должно предоставить информацию об ошибке в \a p_result.
*
* Реализовать этот обратный вызов необязательно (предполагается успех?).
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param p_result Out: Detailed error information.
* @return 0 on success. Other values are ignored.
*/
int profinet_cb_ccontrol_ind ( int profinet_cb_ccontrol_ind (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -1,8 +1,5 @@
#include "./profinet/profinet_cb_connect_ind.hpp" #include "./profinet/profinet_cb_connect_ind.hpp"
#include "./profinet/profinet.hpp" #include "./profinet/profinet.hpp"
#include <iostream>
using namespace std;
int profinet_cb_connect_ind( pnet_t * net, int profinet_cb_connect_ind( pnet_t * net,
void * arg, void * arg,

View File

@ -2,6 +2,37 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that a Connect request was received from the
* controller.
*
* This application call-back function is called by the Profinet stack on every
* Connect request from the Profinet controller.
*
* The connection will be opened if this function returns 0 (zero) and the stack
* is otherwise able to establish a connection.
*
* If this function returns something other than 0 (zero) then the Connect
* request is refused by the device. In case of error the application should
* provide error information in \a p_result.
*
* It is optional to implement this callback (assumes success if not
* implemented).
*
* Индикация приложению о том, что от контроллера получен запрос на подключение.
* Эта функция обратного вызова приложения вызывается стеком Profinet при каждом запросе Connect от контроллера Profinet.
* Соединение будет открыто, если эта функция вернет 0 (ноль) и стек в противном случае сможет установить соединение.
* Если эта функция возвращает значение, отличное от 0 (нуля), то запрос на подключение отклоняется устройством.
* В случае ошибки приложение должно предоставить информацию об ошибке в p_result.
* Реализовать этот обратный вызов необязательно (предполагается успех, если он не реализован).
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param p_result Out: Detailed error information if return != 0.
* @return 0 on success.
* -1 if an error occurred.
*/
int profinet_cb_connect_ind( pnet_t * net, int profinet_cb_connect_ind( pnet_t * net,
void * arg, void * arg,
uint32_t arep, uint32_t arep,

View File

@ -1,4 +1,4 @@
#include "./profinet/profinet.hpp" #include "./profinet/profinet_cb_dcontrol_ind.hpp"
#include "./profinet/profinet.hpp" #include "./profinet/profinet.hpp"
int profinet_cb_dcontrol_ind ( int profinet_cb_dcontrol_ind (

View File

@ -2,6 +2,42 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that a DControl request was received from the
* controller. Typically this means that the controller is done writing
* parameters.
*
* This application call-back function is called by the Profinet stack on every
* DControl request from the Profinet controller.
*
* The application is not required to take any action but the function must
* return 0 (zero) for proper function of the stack. If this function returns
* something other than 0 (zero) then the DControl request is refused by the
* device. In case of error the application should provide error information in
* \a p_result.
*
* It is optional to implement this callback (assumes success if not
* implemented).
*
* Индикация приложению о том, что от контроллера получен запрос DControl. Обычно это означает, что контроллер закончил запись параметров.
*
* Эта функция обратного вызова приложения вызывается стеком Profinet при каждом запросе DControl от контроллера Profinet.
*
* От приложения не требуется никаких действий, но функция должна возвращать 0 (ноль) для правильной работы стека.
* Если эта функция возвращает значение, отличное от 0 (нуля), то запрос DControl отклоняется устройством.
* В случае ошибки приложение должно предоставить информацию об ошибке в \a p_result.
*
* Реализовать этот обратный вызов необязательно (предполагается успех, если он не реализован).
*
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param control_command In: The DControl command code.
* @param p_result Out: Detailed error information if return != 0.
* @return 0 on success.
* -1 if an error occurred.
*/
int profinet_cb_dcontrol_ind ( int profinet_cb_dcontrol_ind (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -2,6 +2,46 @@
#include "../../libs/include/pnet_api.h" #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 ( int profinet_cb_exp_module_ind (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -2,6 +2,57 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that a sub-module is requested by the
* controller in a specific sub-slot.
*
* This application call-back function is called by the Profinet stack to
* indicate that the controller has requested the presence of a specific
* sub-module with ident number \a submodule_ident, in the sub-slot number
* \a subslot, with module ident number \a module_ident in slot \a slot.
*
* If a module has not been plugged in the slot \a slot then an automatic plug
* request is issued internally by the stack.
*
* The application must react to this by configuring itself accordingly (if
* possible) and call function \a pnet_plug_submodule() to configure the stack
* with the correct input/output data sizes.
*
* If the wrong sub-module ident number is plugged then the stack will accept
* this, but signal to the controller that a substitute sub-module is fitted.
*
* This function should return 0 (zero) if a valid sub-module was plugged,
* or return -1 if the application cannot handle this request.
*
* Индикация приложению о том, что субмодуль запрошен контроллером в определенном субслоте.
*
* Эта функция обратного вызова приложения вызывается стеком Profinet, чтобы указать, что контроллер
* запросил наличие определенного подмодуля с идентификационным номером \a идентификатор_подмодуля,
* в подслоте с номером подслота \a, с идентификационным номером модуля \a module_ident в слоте \a slot.
*
* Если модуль не был вставлен в слот \a slot, то внутри стека выдается автоматический запрос на вставку.
*
* Приложение должно отреагировать на это, настроив себя соответствующим образом (если это возможно) и
* вызвать функцию \a pnet_plug_submodule() для настройки стека с правильными размерами входных/выходных данных.
*
* Если установлен неправильный идентификационный номер субмодуля, стек примет это, но сигнализирует контроллеру,
* что установлен замещающий субмодуль.
*
* Эта функция должна возвращать 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 subslot In: The sub-slot number.
* @param module_ident In: The module ident number.
* @param submodule_ident In: The sub-module ident number.
* @param p_exp_data In: The expected data configuration (sizes and
* direction)
* @return 0 on success.
* -1 if an error occurred.
*/
int profinet_cb_exp_submodule_ind ( int profinet_cb_exp_submodule_ind (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -2,6 +2,34 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that the data status received from the
* controller has changed.
*
* This application call-back function is called by the Profinet stack to
* indicate that the received data status has changed.
*
* The application is not required by the Profinet stack to take any action. It
* may use this information as it wishes. The return value from this call-back
* function is ignored by the Profinet stack.
*
* Индикация приложению, что статус данных, полученных от контроллера, изменился.
*
* Эта функция обратного вызова приложения вызывается стеком Profinet, чтобы указать, что статус полученных данных изменился.
*
* Стек Profinet не требует от приложения каких-либо действий. Он может использовать эту информацию по своему усмотрению.
* Возвращаемое значение этой функции обратного вызова игнорируется стеком Profinet.
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param crep In: The CREP.
* @param changes In: The changed bits in the received data status.
* See pnet_data_status_bits_t
* @param data_status In: Current received data status (after changes).
* See pnet_data_status_bits_t
* @return 0 on success. Other values are ignored.
*/
int profinet_cb_new_data_status_ind ( int profinet_cb_new_data_status_ind (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -2,6 +2,55 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that an IODRead request was received from the
* controller.
*
* This application call-back function is called by the Profinet stack on every
* IODRead request from the Profinet controller which specify an
* application-specific value of \a idx (0x0000 - 0x7fff). All other values of
* \a idx are handled internally by the Profinet stack.
*
* The application must verify the value of \a idx, and that \a p_read_length is
* large enough. Further, the application must provide a
* pointer to the binary value in \a pp_read_data and the size, in bytes, of the
* binary value in \a p_read_length.
*
* The Profinet stack does not perform any endianness conversion on the binary
* value.
*
* In case of error the application should provide error information in \a
* p_result.
*
* Индикация приложению о том, что от контроллера получен запрос IODRead.
*
* Эта функция обратного вызова приложения вызывается стеком Profinet при каждом запросе IODRead от контроллера Profinet,
* в котором указывается специфичное для приложения значение \a idx (0x0000 - 0x7fff). Все остальные значения \a idx
* обрабатываются внутри стека Profinet.
*
* Приложение должно проверить значение \a idx и достаточно ли велико значение \a p_read_length.
* Кроме того, приложение должно предоставить указатель на двоичное значение в \a pp_read_data и размер в байтах
* двоичного значения в \a p_read_length.
*
* Стек Profinet не выполняет никакого преобразования порядка байтов в двоичном значении.
*
* В случае ошибки приложение должно предоставить информацию об ошибке в \a p_result.
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param api In: The AP identifier.
* @param slot In: The slot number.
* @param subslot In: The sub-slot number.
* @param idx In: The data record index.
* @param sequence_number In: The sequence number.
* @param pp_read_data Out: A pointer to the binary value.
* @param p_read_length InOut: The maximum (in) and actual (out) length in
* bytes of the binary value.
* @param p_result Out: Detailed error information if returning != 0
* @return 0 on success.
* -1 if an error occurred.
*/
int profinet_cb_read_ind ( int profinet_cb_read_ind (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -1,7 +1,36 @@
#pragma once #pragma once
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that a Release request was received from the
* controller.
*
* This application call-back function is called by the Profinet stack on every
* Release request from the Profinet controller.
*
* The connection will be closed regardless of the return value from this
* function. In case of error the application should provide error information
* in \a p_result.
*
* It is optional to implement this callback (assumes success if not
* implemented).
*
* Индикация приложению о том, что от контроллера получен запрос Release.
*
* Эта функция обратного вызова приложения вызывается стеком Profinet при каждом запросе Release от контроллера Profinet.
*
* Соединение будет закрыто независимо от возвращаемого значения этой функцией. В случае ошибки приложение должно предоставить
* информацию об ошибке в \a p_result.
*
* Реализовать этот обратный вызов необязательно (предполагается успех, если он не реализован).
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param p_result Out: Detailed error information if return != 0.
* @return 0 on success.
* -1 if an error occurred.
*/
int profinet_cb_release_ind( pnet_t * net, int profinet_cb_release_ind( pnet_t * net,
void * arg, void * arg,
uint32_t arep, uint32_t arep,

View File

@ -2,6 +2,78 @@
#include "../../libs/include/pnet_api.h" #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 ( int profinet_cb_reset_ind (
pnet_t * net, pnet_t * net,
void * arg, void * arg,

View File

@ -2,4 +2,30 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that the Profinet signal LED should change
* state.
*
* Use this callback to implement control of the LED.
*
* It is optional to implement this callback (but a compliant Profinet device
* must have a signal LED)
*
* No \a arep information is available, as this callback typically is triggered
* when there is no active connection.
*
* Индикация приложению о том, что сигнальный светодиод Profinet должен изменить состояние.
*
* Используйте этот обратный вызов для реализации управления светодиодом.
*
* Реализовать этот обратный вызов необязательно (но совместимое с Profinet устройство должно иметь сигнальный светодиод).
*
* Информация \a arep недоступна, так как этот обратный вызов обычно запускается при отсутствии активного соединения.
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param led_state In: True if the signal LED should be on.
* @return 0 on success.
* -1 if an error occurred. Will trigger a log message.
*/
int profinet_cb_signal_led_ind (pnet_t * net, void * arg, bool led_state); int profinet_cb_signal_led_ind (pnet_t * net, void * arg, bool led_state);

View File

@ -1,7 +1,42 @@
#pragma once #pragma once
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that a state transition has occurred within the
* Profinet stack.
*
* This application call-back function is called by the Profinet stack on
* specific state transitions within the Profinet stack.
*
* At the very least the application must react to the PNET_EVENT_PRMEND state
* transition. After this event the application must call \a
* pnet_application_ready(), when it has finished its setup and it is ready to
* exchange data.
*
* The return value from this call-back function is ignored by the Profinet
* stack.
*
* It is optional to implement this callback (but then it would be difficult
* to know when to call the \a pnet_application_ready() function).
*
* Указание приложению о том, что в стеке Profinet произошел переход состояния.
*
* Эта функция обратного вызова приложения вызывается стеком Profinet при определенных переходах состояний в стеке Profinet.
*
* По крайней мере, приложение должно реагировать на переход состояния PNET_EVENT_PRMEND. После этого события приложение
* должно вызвать \a pnet_application_ready(), когда оно закончит настройку и будет готово к обмену данными.
*
* Возвращаемое значение этой функции обратного вызова игнорируется стеком Profinet.
*
* Реализовать этот обратный вызов необязательно (но тогда будет трудно понять, когда вызывать функцию \a pnet_application_ready()).
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param state In: The state transition event. See
* pnet_event_values_t.
* @return 0 on success. Other values are ignored.
*/
int profinet_cb_state_ind( pnet_t * net, int profinet_cb_state_ind( pnet_t * net,
void * arg, void * arg,
uint32_t arep, uint32_t arep,

View File

@ -2,6 +2,52 @@
#include "../../libs/include/pnet_api.h" #include "../../libs/include/pnet_api.h"
/**
* Indication to the application that an IODWrite request was received from the
* controller.
*
* This application call-back function is called by the Profinet stack on every
* IODWrite request from the Profinet controller which specify an
* application-specific value of \a idx (0x0000 - 0x7fff). All other values of
* \a idx are handled internally by the Profinet stack.
*
* The application must verify the values of \a idx and \a write_length and save
* (copy) the binary value in \a p_write_data. A future IODRead must return the
* latest written value.
*
* The Profinet stack does not perform any endianness conversion on the binary
* value.
*
* In case of error the application should provide error information in \a
* p_result.
*
* Индикация приложению о том, что от контроллера получен запрос IODWrite.
*
* Эта функция обратного вызова приложения вызывается стеком Profinet при каждом запросе IODWrite от контроллера Profinet,
* в котором указывается специфичное для приложения значение \a idx (0x0000 - 0x7fff). Все остальные значения \a idx
* обрабатываются внутри стека Profinet.
*
* Приложение должно проверить значения \a idx и \a write_length и сохранить (скопировать) двоичное значение в \a p_write_data.
* Будущий IODRead должен возвращать самое последнее записанное значение.
*
* Стек Profinet не выполняет никакого преобразования порядка байтов в двоичном значении.
*
* В случае ошибки приложение должно предоставить информацию об ошибке в \a p_result.
*
* @param net InOut: The p-net stack instance
* @param arg InOut: User-defined data (not used by p-net)
* @param arep In: The AREP.
* @param api In: The API identifier.
* @param slot In: The slot number.
* @param subslot In: The sub-slot number.
* @param idx In: The data record index.
* @param sequence_number In: The sequence number.
* @param write_length In: The length in bytes of the binary value.
* @param p_write_data In: A pointer to the binary value.
* @param p_result Out: Detailed error information if returning != 0
* @return 0 on success.
* -1 if an error occurred.
*/
int profinet_cb_write_ind ( int profinet_cb_write_ind (
pnet_t * net, pnet_t * net,
void * arg, void * arg,