67 lines
2.1 KiB
C++
67 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include "profinet_serv_data.hpp"
|
|
#include "profinet_subslot.hpp"
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <map>
|
|
#include <memory>
|
|
|
|
class ProfinetSlot
|
|
{
|
|
public:
|
|
/**
|
|
* @brief Construct a new Profinet Slot object
|
|
*
|
|
* @param slot_nbr номер слота
|
|
* @param module_id идентификатор модуля который может поключиться к этому слоту
|
|
* @param module_name имя модуля
|
|
*/
|
|
ProfinetSlot (
|
|
uint16_t slot_nbr,
|
|
uint32_t module_id,
|
|
std::string module_name
|
|
);
|
|
/**
|
|
* @brief Подключает модуль к слоту
|
|
*
|
|
* @param pnet_data Данные pnet
|
|
* @return true модуль подключен
|
|
* @return false модуль не подключен
|
|
*/
|
|
bool plugModule(ProfinetServiceData& pnet_data);
|
|
/**
|
|
* @brief Отключает модуль от слота
|
|
*
|
|
* @param pnet_data Данные pnet
|
|
* @return true модуль был поключен и теперь отключен
|
|
* @return false модуль не был подключен
|
|
*/
|
|
bool pullModule(ProfinetServiceData& pnet_data);
|
|
|
|
bool addSubslot(std::shared_ptr<ProfinetSubslot>& subslot_ptr);
|
|
|
|
bool addSubslotAndPlugSubmodule(ProfinetServiceData& pnet_data, std::shared_ptr<ProfinetSubslot>& subslot_ptr);
|
|
|
|
bool isModulePlugged() { return m_module_plugged; }
|
|
|
|
ProfinetSubslot * getSubslotPtr(uint16_t subslot_nbr, uint32_t submodule_id, const pnet_data_cfg_t * const p_data_cfg);
|
|
|
|
public:
|
|
/// Номер слота
|
|
const uint16_t m_slot_nbr;
|
|
|
|
/// Идентификатор модуля который может быть подключен к данному слоту
|
|
const uint32_t m_module_id;
|
|
|
|
/// Имя подключаемого модуля
|
|
const std::string m_module_name;
|
|
|
|
private:
|
|
/// Флаг подключения модуля к слоту
|
|
bool m_module_plugged;
|
|
/// множество подслотов
|
|
std::map<uint16_t, std::shared_ptr<ProfinetSubslot>> m_subslots;
|
|
};
|