Files
soft_bus_edge/src/core/models/RawBusMessage.h
flower_linux 90ad86b4d0 init
2026-05-13 16:46:07 +08:00

81 lines
1.8 KiB
C++

#pragma once
#include <cstdint>
#include <QMetaType>
#include <QString>
#include "core/models/PayloadRef.h"
namespace softbus::core::models
{
enum class BusDirection
{
Unknown,
Upstream,
Downstream,
};
enum class ProtocolType : std::uint16_t
{
UNKNOWN = 0,
MODBUS_RTU,
MODBUS_ASCII,
MODBUS_TCP,
CAN_RAW,
CAN_OPEN,
UDP_CUSTOM,
};
inline uint qHash(ProtocolType key, uint seed = 0) noexcept
{
return ::qHash(static_cast<std::uint16_t>(key), seed);
}
union ProtocolHeader
{
struct Can
{
std::uint32_t cobId{0};
bool isExtended{false};
bool isRtr{false};
std::uint8_t padding[2]{0, 0};
} can;
struct Modbus
{
std::uint8_t slaveId{0};
std::uint8_t functionCode{0};
std::uint8_t padding[6]{0, 0, 0, 0, 0, 0};
} modbus;
struct Net
{
std::uint32_t srcIp{0};
std::uint16_t srcPort{0};
std::uint16_t padding{0};
} net;
std::uint64_t alignmentPadding{0};
};
struct RawBusMessage
{
int deviceId{-1}; // Device instance id, -1 means unbound.
std::uint32_t endpointHash{0}; // Physical endpoint/channel hash.
ProtocolType protocol{ProtocolType::UNKNOWN};
std::uint32_t logicalAddress{0}; // Slave ID / node ID for protocol routing.
std::uint64_t routingKey{0}; // Stable key for MetadataRegistry lookup.
ProtocolHeader header{}; // Out-of-band protocol header metadata.
std::int64_t timestampMs{0}; // UTC unix timestamp in milliseconds.
QString traceId;
softbus::core::models::PayloadRef payload;
BusDirection direction{BusDirection::Unknown};
};
} // namespace softbus::core::models
Q_DECLARE_METATYPE(softbus::core::models::RawBusMessage)