/* * eth_ecat_telegram.hpp * * Created on: Jun 5, 2023 * Author: algin */ #ifndef FREE_RTOS_ETHERNET_INDUSTRY_ETH_ECAT_TELEGRAM_HPP_ #define FREE_RTOS_ETHERNET_INDUSTRY_ETH_ECAT_TELEGRAM_HPP_ #include "ethernet/eth.hpp" #include "ethernet_industry/eth_ecat_datagram.hpp" namespace free_rtos { namespace telegram { class EcatTelegram : public Handler { public: EcatTelegram(Eth& eth) : eth_{eth} , eth_stack_{*eth.getEthStackPtr()} { } virtual int32_t Process(uint8_t *p_data, uint32_t len) override; virtual uint32_t Sender(uint8_t *p_data, size_t scatter_segment) override; void init(TEthMacPorts port_id) { port_id_ = port_id; eth_.getEthStackPtr()->Register(ETH_PROT_ECAT_LE, this); } void transfer(datagram::IEcatDatagram& next); //void transfer(queue::Queue& next); private: Eth& eth_; EthStackIface& eth_stack_; TEthMacPorts port_id_; free_rtos::Semaphore rx_sem_; queue::Queue datagram_queue_; uint8_t* pack(uint8_t *raw); uint8_t* unpack(uint8_t *raw); }; } } #endif /* FREE_RTOS_ETHERNET_INDUSTRY_ETH_ECAT_TELEGRAM_HPP_ */