/* * eth.hpp * * Created on: 6 ���. 2023 �. * Author: sychev */ #ifndef FREE_RTOS_ETHERNET_ETH_HPP_ #define FREE_RTOS_ETHERNET_ETH_HPP_ #include "free_rtos/ethernet/eth_task_settings.hpp" #include "free_rtos/ethernet/eth_rx_flow.hpp" #include "free_rtos/ethernet/eth_tx_flow.hpp" #include "free_rtos/semaphore/semaphore.hpp" #include "free_rtos/ethernet/eth_frame.h" #include "free_rtos/task/task.hpp" #include #include #include #include #include #include "free_rtos/ethernet/eth_types.h" #include "free_rtos/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]; UBaseType_t rxTaskPriority[e_ethMacTotal]; UBaseType_t rxTaskStackSize[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]; UBaseType_t rxTaskPriority_[e_ethMacTotal]; UBaseType_t rxTaskStackSize_[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_ */