dev(UML-1462): Убрал промежуточное копирование данных при приеме
This commit is contained in:
parent
b2a9b34ddb
commit
3c9a8e40a3
@ -12,16 +12,24 @@ namespace free_rtos {
|
||||
namespace datagram {
|
||||
|
||||
int32_t EcatTelegram::Process(uint8_t *p_data, uint32_t len) {
|
||||
buffer_in_.length = len + sizeof(TEthFrameHeader);
|
||||
//buffer_in_.length = len + sizeof(TEthFrameHeader);
|
||||
|
||||
memcpy(buffer_in_.data, p_data - sizeof(TEthFrameHeader), buffer_in_.length);
|
||||
//memcpy(buffer_in_.data, p_data - sizeof(TEthFrameHeader), buffer_in_.length);
|
||||
|
||||
if(first_ == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
unpack(p_data);
|
||||
|
||||
first_ = nullptr;
|
||||
|
||||
rx_sem_.post();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EcatTelegram::pack(IEcatDatagram& first) {
|
||||
void EcatTelegram::pack() {
|
||||
TEthFrameHeader *p_eth_hdr = new(buffer_out_.data) TEthFrameHeader{ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
|
||||
ETH_PROT_ECAT_LE};
|
||||
@ -30,7 +38,7 @@ void EcatTelegram::pack(IEcatDatagram& first) {
|
||||
.type = static_cast<uint16_t>(ec_network::PROTOCOL_TYPE)}};
|
||||
uint8_t *p_datagram_first = buffer_out_.data + sizeof(TEthFrameHeader) + sizeof(TEcatFrameHeader);
|
||||
uint8_t *p_datagram_last = p_datagram_first;
|
||||
IEcatDatagram *next = &first;
|
||||
IEcatDatagram *next = first_;
|
||||
|
||||
(void)p_eth_hdr;
|
||||
(void)p_hdr;
|
||||
@ -44,12 +52,12 @@ void EcatTelegram::pack(IEcatDatagram& first) {
|
||||
buffer_out_.length = sizeof(TEthFrameHeader) + sizeof(TEcatFrameHeader) + p_hdr->bits.length;
|
||||
}
|
||||
|
||||
void EcatTelegram::unpack(IEcatDatagram& first) {
|
||||
TEthFrameHeader *p_eth_hdr = reinterpret_cast<TEthFrameHeader*>(buffer_in_.data);
|
||||
TEcatFrameHeader *p_hdr = reinterpret_cast<TEcatFrameHeader*>(buffer_in_.data + sizeof(TEthFrameHeader));
|
||||
uint8_t *p_datagram_first = buffer_in_.data + sizeof(TEthFrameHeader) + sizeof(TEcatFrameHeader);
|
||||
void EcatTelegram::unpack(uint8_t *raw) {
|
||||
TEthFrameHeader *p_eth_hdr = reinterpret_cast<TEthFrameHeader*>(raw);
|
||||
TEcatFrameHeader *p_hdr = reinterpret_cast<TEcatFrameHeader*>(raw + sizeof(TEthFrameHeader));
|
||||
uint8_t *p_datagram_first = raw + sizeof(TEthFrameHeader) + sizeof(TEcatFrameHeader);
|
||||
uint8_t *p_datagram_last = p_datagram_first;
|
||||
IEcatDatagram *next = &first;
|
||||
IEcatDatagram *next = first_;
|
||||
|
||||
(void)p_eth_hdr;
|
||||
(void)p_hdr;
|
||||
@ -61,7 +69,9 @@ void EcatTelegram::unpack(IEcatDatagram& first) {
|
||||
}
|
||||
|
||||
void EcatTelegram::transfer(IEcatDatagram& first) {
|
||||
pack(first);
|
||||
first_ = &first;
|
||||
|
||||
pack();
|
||||
bool stat = tx_flow_.send(port_id_, buffer_out_.data, buffer_out_.length);
|
||||
|
||||
if(stat == false) {
|
||||
@ -69,7 +79,7 @@ void EcatTelegram::transfer(IEcatDatagram& first) {
|
||||
}
|
||||
|
||||
rx_sem_.pend();
|
||||
unpack(first);
|
||||
//unpack(first);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -182,11 +182,13 @@ private:
|
||||
|
||||
free_rtos::Semaphore rx_sem_;
|
||||
|
||||
TEthPkt buffer_out_;
|
||||
TEthPkt buffer_in_;
|
||||
IEcatDatagram *first_{nullptr};
|
||||
|
||||
void pack(IEcatDatagram& first);
|
||||
void unpack(IEcatDatagram& first);
|
||||
TEthPkt buffer_out_;
|
||||
//TEthPkt buffer_in_;
|
||||
|
||||
void pack();
|
||||
void unpack(uint8_t *raw);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user