sitara_depot/components/free_rtos/ethernet_industry/eth_ecat_telegram.hpp

56 lines
1.0 KiB
C++

/*
* 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}
, tx_flow_{*eth.getTxFlowPtr()} {
eth_.getEthStackPtr()->Register(ETH_PROT_ECAT_LE, this);
}
virtual int32_t Process(uint8_t *p_data, uint32_t len) override;
void init(TEthMacPorts port_id) {
port_id_ = port_id;
}
void transfer(datagram::IEcatDatagram& first);
private:
Eth& eth_;
EthTxFlowIface& tx_flow_;
TEthMacPorts port_id_;
free_rtos::Semaphore rx_sem_;
queue::QueueEntity<datagram::IEcatDatagram> *datagram_queue_{nullptr};
TEthPkt buffer_out_;
void pack();
void unpack(uint8_t *raw);
};
}
}
#endif /* FREE_RTOS_ETHERNET_INDUSTRY_ETH_ECAT_TELEGRAM_HPP_ */