141 lines
3.8 KiB
C++
141 lines
3.8 KiB
C++
/*
|
||
* eth.hpp
|
||
*
|
||
* Created on: 6 <20><><EFBFBD>. 2023 <20>.
|
||
* Author: sychev
|
||
*/
|
||
|
||
#ifndef FREE_RTOS_ETHERNET_ETH_HPP_
|
||
#define FREE_RTOS_ETHERNET_ETH_HPP_
|
||
|
||
#include "ethernet/eth_task_settings.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 <networking/enet/core/include/core/enet_per.h>
|
||
#include <networking/enet/utils/include/enet_apputils.h>
|
||
#include <networking/enet/core/include/per/icssg.h>
|
||
#include <cstdint>
|
||
#include <string>
|
||
|
||
#include "ethernet/eth_types.h"
|
||
|
||
#include "ethernet_ip/eth_stack.hpp"
|
||
|
||
namespace free_rtos {
|
||
|
||
class Eth {
|
||
public:
|
||
typedef enum {
|
||
e_ethInstSwitch = 1, /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
e_ethInstDualMac_1, /// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
e_ethInstDualMac_2 /// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}TEthInstId;
|
||
|
||
struct Settings {
|
||
uint32_t id; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
/* 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, /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ioctl
|
||
e_signalTotal
|
||
};
|
||
|
||
enum TasksId {
|
||
e_taskLink,
|
||
e_taskTotal
|
||
};
|
||
|
||
uint32_t id_; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
std::string name_; /// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
uint32_t core_id_; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
|
||
Enet_Type enetType_; /// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mac: 1 - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SWITCH, 2 <20> 3 <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DUAL MAC ( <20><><EFBFBD> mac1 <20> mac2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
uint32_t instId_;
|
||
|
||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mac <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Enet_MacPort macPort_[e_ethMacTotal];
|
||
|
||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MAC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
uint32_t macPortNum_;
|
||
|
||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ????
|
||
EnetPer_AttachCoreOutArgs attachInfo_;
|
||
|
||
/// Enet <20> Udma <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||
EnetApp_HandleInfo handleInfo_;
|
||
|
||
EthTxFlow tx_flow_; ///
|
||
EthRxFlow rx_flow_[e_ethMacTotal]; /// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SWITCH
|
||
|
||
Semaphore sem_[e_signalTotal];
|
||
|
||
Task task_[e_taskTotal];
|
||
|
||
bool linkUp_[e_ethMacTotal];
|
||
|
||
bool host_ready_;
|
||
|
||
TEthFrameMacAddr hostMacAddr_; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
uint32_t vlan_id_;
|
||
|
||
EthStack eth_stack_; /// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
};
|
||
|
||
}
|
||
|
||
|
||
#endif /* FREE_RTOS_ETHERNET_ETH_HPP_ */
|