/* * eth.hpp * * Created on: 6 мар. 2023 г. * Author: sychev */ #ifndef FREE_RTOS_ETHERNET_ETH_HPP_ #define FREE_RTOS_ETHERNET_ETH_HPP_ #include "ethernet/eth_rx_flow.hpp" #include "ethernet/eth_tx_flow.hpp" #include "semaphore/semaphore.hpp" #include "ethernet/eth_frame.h" #include "task/task.hpp" #include #include #include #include #include #include "ethernet/eth_types.h" #include "ethernet_ip/eth_stack.hpp" namespace free_rtos { class Eth { public: typedef enum { e_ethInstSwitch = 1, /// Поддерживается e_ethInstDualMac_1, /// Не поддерживается e_ethInstDualMac_2 /// Не поддерживается }TEthInstId; struct Settings { uint32_t id; /// Идентификатор порта /* Peripheral type */ Enet_Type enetType; /* Peripheral instance */ TEthInstId instId; /* Peripheral's MAC ports to use */ Enet_MacPort macPort[e_ethMacTotal]; /* Number of MAC ports in macPorts array */ uint32_t macPortNum; /* Name of this port to be used for logging */ std::string name; uint32_t vlan_id; EthStack::Settings eth_stack_sett; }; Eth(); bool Init(Settings& sett); bool Open(); void ioctl_callback(); void link_task(); EthUdpServerIface * getUdpServerPtr() {return eth_stack_.getUdpServerPtr(); } EthTxFlowIface * getTxFlowPtr() { return &tx_flow_; } EthStackIface * getEthStackPtr() {return ð_stack_;} private: enum TaskPriority { e_linkTaskPriority = 2 }; bool host_init(); private: enum SignalsId { e_signalIoctl, /// Завершение передачи по ioctl e_signalTotal }; enum TasksId { e_taskLink, e_taskTotal }; uint32_t id_; /// Идентификатор порта std::string name_; /// Имя порта uint32_t core_id_; /// Идентификатор ядра Enet_Type enetType_; /// Тип порта /// Идентификатор периферии mac: 1 - для режима SWITCH, 2 и 3 для режима DUAL MAC ( для mac1 и mac2 соответственно) uint32_t instId_; /// Идентификаторы mac портов Enet_MacPort macPort_[e_ethMacTotal]; /// Количество MAC портов uint32_t macPortNum_; /// Основная информация о подключении для периферийного устройства ???? EnetPer_AttachCoreOutArgs attachInfo_; /// Enet и Udma обработчик информации для периферийного устройства. EnetApp_HandleInfo handleInfo_; EthTxFlow tx_flow_; /// EthRxFlow rx_flow_[e_ethMacTotal]; /// Два потока приема в режиме SWITCH Semaphore sem_[e_signalTotal]; Task task_[e_taskTotal]; bool linkUp_[e_ethMacTotal]; bool host_ready_; TEthFrameMacAddr hostMacAddr_; /// собственный мак адрес uint32_t vlan_id_; EthStack eth_stack_; /// Стек логических протоколов }; } #endif /* FREE_RTOS_ETHERNET_ETH_HPP_ */