Skip to content

Commit 3694599

Browse files
committed
Process can packets refactoring
1 parent 5bcb8e9 commit 3694599

File tree

2 files changed

+14
-46
lines changed

2 files changed

+14
-46
lines changed

asam_cmp_capture_module/include/asam_cmp_capture_module/stream_fb.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616

1717
#pragma once
1818
#include <asam_cmp/encoder.h>
19+
#include <asam_cmp/payload_type.h>
1920
#include <asam_cmp_capture_module/common.h>
2021
#include <asam_cmp_common_lib/id_manager.h>
2122
#include <asam_cmp_common_lib/stream_common_fb_impl.h>
2223
#include <asam_cmp_capture_module/encoder_bank.h>
2324
#include <opendaq/context_factory.h>
2425
#include <opendaq/function_block_impl.h>
25-
#include <asam_cmp/payload_type.h>
2626
#include <opendaq/data_packet_ptr.h>
2727
#include <opendaq/event_packet_ptr.h>
2828

@@ -75,8 +75,8 @@ class StreamFb final : public asam_cmp_common_lib::StreamCommonFb
7575
void configure();
7676

7777
void processDataPacket(const DataPacketPtr& packet);
78+
template <typename CanPayloadType>
7879
void processCanPacket(const DataPacketPtr& packet);
79-
void processCanFdPacket(const DataPacketPtr& packet);
8080
void processAnalogPacket(const DataPacketPtr& packet);
8181

8282
void processEventPacket(const EventPacketPtr& packet);

asam_cmp_capture_module/src/stream_fb.cpp

Lines changed: 12 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,16 @@ ASAM::CMP::DataContext StreamFb::createEncoderDataContext() const
319319
return {minFrameSize, maxFrameSize};
320320
}
321321

322+
template <typename T>
323+
constexpr size_t maxCanDataSize = 64;
324+
template <>
325+
constexpr size_t maxCanDataSize<ASAM::CMP::CanPayload> = 8;
326+
327+
template <typename CanPayloadType>
322328
void StreamFb::processCanPacket(const DataPacketPtr& packet)
323329
{
330+
static_assert(std::is_base_of_v<ASAM::CMP::CanPayloadBase, CanPayloadType>);
331+
324332
#pragma pack(push, 1)
325333
struct CANData
326334
{
@@ -345,9 +353,9 @@ void StreamFb::processCanPacket(const DataPacketPtr& packet)
345353

346354
for (size_t i = 0; i < sampleCount; i++)
347355
{
348-
if (canData->length <= 8)
356+
if (canData->length <= maxCanDataSize<CanPayloadType>)
349357
{
350-
ASAM::CMP::CanPayload payload;
358+
CanPayloadType payload{};
351359
payload.setData(canData->data, canData->length);
352360
payload.setId(canData->arbId);
353361

@@ -364,46 +372,6 @@ void StreamFb::processCanPacket(const DataPacketPtr& packet)
364372
ethernetWrapper->sendPacket(rawFrame);
365373
}
366374

367-
void StreamFb::processCanFdPacket(const DataPacketPtr& packet)
368-
{
369-
#pragma pack(push, 1)
370-
struct CANData
371-
{
372-
uint32_t arbId;
373-
uint8_t length;
374-
uint8_t data[64];
375-
};
376-
#pragma pack(pop)
377-
378-
auto* canData = reinterpret_cast<CANData*>(packet.getData());
379-
const size_t sampleCount = packet.getSampleCount();
380-
381-
uint64_t* rawTimeBuffer = reinterpret_cast<uint64_t*>(packet.getDomainPacket().getRawData());
382-
RatioPtr timeResolution = packet.getDomainPacket().getDataDescriptor().getTickResolution();
383-
size_t timeScale = 1'000'000'000 / timeResolution.getDenominator();
384-
385-
std::vector<ASAM::CMP::Packet> packets;
386-
packets.reserve(sampleCount);
387-
388-
for (size_t i = 0; i < sampleCount; i++)
389-
{
390-
ASAM::CMP::CanFdPayload payload;
391-
payload.setData(canData->data, canData->length);
392-
payload.setId(canData->arbId);
393-
394-
packets.emplace_back();
395-
packets.back().setInterfaceId(interfaceId);
396-
packets.back().setPayload(payload);
397-
packets.back().setTimestamp((*rawTimeBuffer) * timeScale);
398-
399-
canData++;
400-
rawTimeBuffer++;
401-
}
402-
403-
for (auto& rawFrame : encoders->encode(streamId, packets.begin(), packets.end(), dataContext))
404-
ethernetWrapper->sendPacket(rawFrame);
405-
}
406-
407375
template <SampleType SrcType>
408376
void createAnalogPayloadWithInternalScaling(ASAM::CMP::AnalogPayload& payload,
409377
const daq::DataPacketPtr& packet,
@@ -505,10 +473,10 @@ void StreamFb::processDataPacket(const DataPacketPtr& packet)
505473
switch (payloadType.getType())
506474
{
507475
case ASAM::CMP::PayloadType::can:
508-
processCanPacket(packet);
476+
processCanPacket<ASAM::CMP::CanPayload>(packet);
509477
break;
510478
case ASAM::CMP::PayloadType::canFd:
511-
processCanFdPacket(packet);
479+
processCanPacket<ASAM::CMP::CanFdPayload>(packet);
512480
break;
513481
case ASAM::CMP::PayloadType::analog:
514482
processAnalogPacket(packet);

0 commit comments

Comments
 (0)