81 lines
2.4 KiB
C++
81 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
#include "profinet_serv_data.hpp"
|
|
#include "profinet_parameter.hpp"
|
|
#include "../../libs/include/pnet_api.h"
|
|
#include <map>
|
|
#include <memory>
|
|
|
|
/**
|
|
* Callback for updated cyclic data
|
|
*
|
|
* @param subslot InOut: Subslot structure
|
|
* @param tag InOut: Typically a handle to a submodule
|
|
*/
|
|
typedef void (*ProfinetSubslotCallback) (void * subslot, void * tag);
|
|
|
|
class ProfinetSubslot
|
|
{
|
|
public:
|
|
ProfinetSubslot(uint16_t subslot_nbr,
|
|
uint32_t submodule_id,
|
|
std::string submodule_name,
|
|
pnet_data_cfg_t data_cfg);
|
|
|
|
bool plugSubmodule(ProfinetServiceData& pnet_data);
|
|
|
|
bool pullSubmodule(ProfinetServiceData& pnet_data);
|
|
|
|
bool addParameter(std::shared_ptr<ProfinetParameter>& param);
|
|
|
|
ProfinetParameter * getParameterPtr(uint32_t Index);
|
|
|
|
void setSlotNumber(uint16_t slot_nbr) { m_slot_nbr = slot_nbr; };
|
|
|
|
void setModuleId(uint16_t module_id) { m_module_id = module_id; };
|
|
|
|
public:
|
|
/// Номер подслота
|
|
const uint16_t m_subslot_nbr;
|
|
|
|
/// Идентификатор подмодуля который вставлен в данный подслот
|
|
const uint32_t m_submodule_id;
|
|
|
|
/// Имя этого подмодуля
|
|
const std::string m_submodule_name;
|
|
|
|
/// Конфигурация данных подмодуля (направление данных, размер данных)
|
|
const pnet_data_cfg_t m_data_cfg;
|
|
|
|
private:
|
|
|
|
/// Флаг подключения подмодуля к подслоту
|
|
bool m_submodule_plugged;
|
|
|
|
/// Номер слота куда входит данный подслот
|
|
uint16_t m_slot_nbr;
|
|
|
|
/// Идентификатор модуля куда входит подключаемый подмодуль
|
|
uint16_t m_module_id;
|
|
|
|
/// iocs = I/O consumer status data (формат данных из pnet_ioxs_values_t)
|
|
uint8_t m_indata_iocs;
|
|
|
|
/// iops = I/O provider status data (формат данных из pnet_ioxs_values_t)
|
|
uint8_t m_outdata_iops;
|
|
|
|
std::map<uint32_t, std::shared_ptr<ProfinetParameter>> m_params;
|
|
|
|
/** Callback for cyclic input- or output data, or NULL if not implemented */
|
|
ProfinetSubslotCallback m_cyclic_callback;
|
|
|
|
/// данные передающиеся в cyclic_callback вторым параметром.
|
|
void * m_tag;
|
|
};
|
|
|
|
|
|
|