ProfinetConnector/src/profinet/profinet_slot.hpp
Vadim Sychev 359bef516a dev(UML-981): Технический коммит перед отключением электричества
Реализованы колбэки подключения модуля и подмодуля
2022-07-20 11:25:48 +03:00

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;
};