mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 09:28:40 +02:00
API: Added icsneoc2.
Signed-off-by: David Rebbe <drebbe@intrepidcs.com>
This commit is contained in:
@@ -20,8 +20,10 @@ enum class PCMType : uint8_t {
|
||||
|
||||
using ChannelMap = std::unordered_map<uint8_t, uint8_t>;
|
||||
|
||||
class A2BMessage : public Frame {
|
||||
class A2BMessage : public BusMessage {
|
||||
public:
|
||||
const BusMessage::Type getBusType() const final { return BusMessage::Type::A2B; }
|
||||
|
||||
static constexpr size_t maxAudioBufferSize = 2048;
|
||||
|
||||
enum class TDMMode : uint8_t {
|
||||
|
||||
@@ -64,9 +64,9 @@ enum class AppErrorType : uint16_t {
|
||||
AppNoError = 255
|
||||
};
|
||||
|
||||
class AppErrorMessage : public RawMessage {
|
||||
class AppErrorMessage : public InternalMessage {
|
||||
public:
|
||||
AppErrorMessage() : RawMessage(Message::Type::AppError, Network::NetID::RED_App_Error) {}
|
||||
AppErrorMessage() : InternalMessage(Message::Type::AppError, Network::NetID::RED_App_Error) {}
|
||||
uint16_t errorType;
|
||||
Network::NetID errorNetID;
|
||||
uint32_t timestamp10us;
|
||||
|
||||
@@ -7,8 +7,10 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class CANMessage : public Frame {
|
||||
class CANMessage : public BusMessage {
|
||||
public:
|
||||
const BusMessage::Type getBusType() const final { return BusMessage::Type::CAN; }
|
||||
|
||||
uint32_t arbid;
|
||||
uint8_t dlcOnWire;
|
||||
bool isRemote = false; // Not allowed if CAN FD
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class DiskDataMessage : public RawMessage {
|
||||
class DiskDataMessage : public InternalMessage {
|
||||
public:
|
||||
DiskDataMessage(std::vector<uint8_t>&& d) : RawMessage(Network::NetID::DiskData) {
|
||||
DiskDataMessage(std::vector<uint8_t>&& d) : InternalMessage(Network::NetID::DiskData) {
|
||||
data = std::move(d);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -31,8 +31,10 @@ struct MACAddress {
|
||||
}
|
||||
};
|
||||
|
||||
class EthernetMessage : public Frame {
|
||||
class EthernetMessage : public BusMessage {
|
||||
public:
|
||||
const BusMessage::Type getBusType() const final { return BusMessage::Type::Ethernet; }
|
||||
|
||||
bool preemptionEnabled = false;
|
||||
uint8_t preemptionFlags = 0;
|
||||
std::optional<uint32_t> fcs;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class ExtendedDataMessage : public Frame {
|
||||
class ExtendedDataMessage : public InternalMessage {
|
||||
public:
|
||||
#pragma pack(push, 2)
|
||||
struct ExtendedDataHeader {
|
||||
|
||||
@@ -13,8 +13,8 @@ namespace icsneo {
|
||||
|
||||
class CANMessageFilter : public MessageFilter {
|
||||
public:
|
||||
CANMessageFilter() : MessageFilter(Network::Type::CAN), arbid(INVALID_ARBID) { messageType = Message::Type::Frame; }
|
||||
CANMessageFilter(uint32_t arbid) : MessageFilter(Network::Type::CAN), arbid(arbid) { messageType = Message::Type::Frame; }
|
||||
CANMessageFilter() : MessageFilter(Network::Type::CAN), arbid(INVALID_ARBID) { messageType = Message::Type::BusMessage; }
|
||||
CANMessageFilter(uint32_t arbid) : MessageFilter(Network::Type::CAN), arbid(arbid) { messageType = Message::Type::BusMessage; }
|
||||
|
||||
bool match(const std::shared_ptr<Message>& message) const {
|
||||
if(!MessageFilter::match(message))
|
||||
|
||||
@@ -27,9 +27,9 @@ public:
|
||||
if(!matchMessageType(message->type))
|
||||
return false;
|
||||
|
||||
if(message->type == Message::Type::Frame || message->type == Message::Type::Main51 ||
|
||||
message->type == Message::Type::RawMessage || message->type == Message::Type::ReadSettings) {
|
||||
const auto frame = std::static_pointer_cast<RawMessage>(message);
|
||||
if(message->type == Message::Type::BusMessage || message->type == Message::Type::Main51 ||
|
||||
message->type == Message::Type::InternalMessage || message->type == Message::Type::ReadSettings) {
|
||||
const auto frame = std::static_pointer_cast<InternalMessage>(message);
|
||||
if(!matchNetworkType(frame->network.getType()))
|
||||
return false;
|
||||
if(!matchNetID(frame->network.getNetID()))
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class FlashMemoryMessage : public RawMessage {
|
||||
class FlashMemoryMessage : public InternalMessage {
|
||||
public:
|
||||
FlashMemoryMessage() : RawMessage(Message::Type::RawMessage, Network::NetID::RED_INT_MEMORYREAD) {}
|
||||
FlashMemoryMessage() : InternalMessage(Message::Type::InternalMessage, Network::NetID::RED_INT_MEMORYREAD) {}
|
||||
uint16_t startAddress = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -10,8 +10,10 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class FlexRayMessage : public Frame {
|
||||
class FlexRayMessage : public BusMessage {
|
||||
public:
|
||||
const BusMessage::Type getBusType() const final { return BusMessage::Type::FlexRay; }
|
||||
|
||||
uint16_t slotid = 0;
|
||||
double tsslen = 0;
|
||||
double framelen = 0;
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class I2CMessage : public Frame {
|
||||
class I2CMessage : public BusMessage {
|
||||
public:
|
||||
const BusMessage::Type getBusType() const final { return BusMessage::Type::I2C; }
|
||||
|
||||
enum class DeviceMode : uint8_t {
|
||||
Target = 0,
|
||||
Controller = 1
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class ISO9141Message : public Frame {
|
||||
class ISO9141Message : public BusMessage {
|
||||
public:
|
||||
const BusMessage::Type getBusType() const final { return BusMessage::Type::ISO9141; }
|
||||
|
||||
std::array<uint8_t, 3> header;
|
||||
bool isInit = false;
|
||||
bool isBreak = false;
|
||||
|
||||
@@ -34,8 +34,10 @@ struct LINStatusFlags {
|
||||
bool BreakOnly = false;
|
||||
};
|
||||
|
||||
class LINMessage : public Frame {
|
||||
class LINMessage : public BusMessage {
|
||||
public:
|
||||
const BusMessage::Type getBusType() const final { return BusMessage::Type::LIN; }
|
||||
|
||||
enum class Type : uint8_t {
|
||||
NOT_SET = 0,
|
||||
LIN_COMMANDER_MSG,
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
#include "icsneo/communication/livedata.h"
|
||||
|
||||
namespace icsneo {
|
||||
class LiveDataMessage : public RawMessage {
|
||||
class LiveDataMessage : public InternalMessage {
|
||||
public:
|
||||
LiveDataMessage() : RawMessage(Message::Type::LiveData, Network::NetID::ExtendedCommand) {}
|
||||
LiveDataMessage() : InternalMessage(Message::Type::LiveData, Network::NetID::ExtendedCommand) {}
|
||||
LiveDataHandle handle;
|
||||
LiveDataCommand cmd;
|
||||
};
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class Main51Message : public RawMessage {
|
||||
class Main51Message : public InternalMessage {
|
||||
public:
|
||||
Main51Message() : RawMessage(Message::Type::Main51, Network::NetID::Main51) {}
|
||||
Main51Message() : InternalMessage(Message::Type::Main51, Network::NetID::Main51) {}
|
||||
Command command = Command(0);
|
||||
bool forceShortFormat = false; // Necessary for EnableNetworkCom and EnableNetworkComEx
|
||||
};
|
||||
|
||||
@@ -7,8 +7,10 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class MDIOMessage : public Frame {
|
||||
class MDIOMessage : public BusMessage {
|
||||
public:
|
||||
const BusMessage::Type getBusType() const final { return BusMessage::Type::MDIO; }
|
||||
|
||||
enum class Clause : uint8_t {
|
||||
Clause45 = 0,
|
||||
Clause22 = 1
|
||||
|
||||
@@ -7,14 +7,70 @@ typedef uint16_t neomessagetype_t;
|
||||
#ifdef __cplusplus
|
||||
|
||||
#include "icsneo/communication/network.h"
|
||||
#include "icsneo/icsneoc2types.h"
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class Message {
|
||||
/**
|
||||
* @brief Type of message class
|
||||
*
|
||||
* @see AbstractMessage::getMsgType()
|
||||
*/
|
||||
typedef enum class MessageType : icsneoc2_msg_type_t {
|
||||
Device = icsneoc2_msg_type_device,
|
||||
Internal = icsneoc2_msg_type_internal,
|
||||
Bus = icsneoc2_msg_type_bus,
|
||||
|
||||
MaxSize = icsneoc2_msg_type_maxsize,
|
||||
} MessageType;
|
||||
|
||||
/**
|
||||
* @brief Pure virtual abstract class for all messages. Inherit from Message over this class.
|
||||
*
|
||||
* @see Message
|
||||
*
|
||||
*/
|
||||
class AbstractMessage {
|
||||
public:
|
||||
virtual const MessageType getMsgType() const = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Base Message class representing Device messages.
|
||||
*/
|
||||
class Message : public AbstractMessage {
|
||||
public:
|
||||
virtual const MessageType getMsgType() const { return MessageType::Device; }
|
||||
|
||||
/**
|
||||
* @brief Get the string representation of the message type
|
||||
*
|
||||
* @return String representation of the message type
|
||||
*
|
||||
* @see AbstractMessage::getMsgType()
|
||||
*/
|
||||
static std::string getMsgTypeName(MessageType msgType) {
|
||||
switch (msgType) {
|
||||
case MessageType::Device:
|
||||
return "Device";
|
||||
case MessageType::Internal:
|
||||
return "Internal";
|
||||
case MessageType::Bus:
|
||||
return "Bus";
|
||||
// Don't default here so we can rely on the compiler to warn us about missing cases
|
||||
};
|
||||
std::stringstream ss;
|
||||
ss << "Unknown (" << static_cast<int>(msgType) << ")";
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
enum class Type : neomessagetype_t {
|
||||
Frame = 0,
|
||||
BusMessage = 0,
|
||||
// Deprecated: Will be removed in the future.
|
||||
Frame = BusMessage,
|
||||
|
||||
CANErrorCount = 0x100,
|
||||
CANError = 0x100,
|
||||
@@ -24,7 +80,9 @@ public:
|
||||
|
||||
// Past 0x8000 are all for internal use only
|
||||
Invalid = 0x8000,
|
||||
RawMessage = 0x8001,
|
||||
InternalMessage = 0x8001,
|
||||
// Deprecated: Will be removed in the future.
|
||||
RawMessage = InternalMessage,
|
||||
ReadSettings = 0x8002,
|
||||
ResetStatus = 0x8003,
|
||||
DeviceVersion = 0x8004,
|
||||
@@ -52,26 +110,69 @@ public:
|
||||
uint64_t timestamp = 0;
|
||||
};
|
||||
|
||||
class RawMessage : public Message {
|
||||
/**
|
||||
* @brief Internal Message class representing Device messages that shouldn't be exposed to public APIs.
|
||||
*/
|
||||
class InternalMessage : public Message {
|
||||
public:
|
||||
RawMessage(Message::Type type = Message::Type::RawMessage) : Message(type) {}
|
||||
RawMessage(Message::Type type, Network net) : Message(type), network(net) {}
|
||||
RawMessage(Network net) : Message(Message::Type::RawMessage), network(net) {}
|
||||
RawMessage(Network net, std::vector<uint8_t> d) : Message(Message::Type::RawMessage), network(net), data(d) {}
|
||||
InternalMessage(Message::Type type = Message::Type::InternalMessage) : Message(type) {}
|
||||
InternalMessage(Message::Type type, Network net) : Message(type), network(net) {}
|
||||
InternalMessage(Network net) : Message(Message::Type::InternalMessage), network(net) {}
|
||||
InternalMessage(Network net, std::vector<uint8_t> d) : Message(Message::Type::InternalMessage), network(net), data(d) {}
|
||||
|
||||
virtual const MessageType getMsgType() const { return MessageType::Internal; }
|
||||
|
||||
Network network;
|
||||
std::vector<uint8_t> data;
|
||||
};
|
||||
|
||||
class Frame : public RawMessage {
|
||||
/**
|
||||
* @brief Bus Message class representing Device messages representing Bus networks like CAN, LIN, Ethernet, etc.
|
||||
*/
|
||||
class BusMessage : public InternalMessage {
|
||||
public:
|
||||
Frame() : RawMessage(Message::Type::Frame) {}
|
||||
BusMessage() : InternalMessage(Message::Type::BusMessage) {}
|
||||
|
||||
/** @brief
|
||||
* Bus message types, useful for filtering out or identifying Bus Messages.
|
||||
*/
|
||||
typedef enum class Type : icsneoc2_msg_bus_type_t {
|
||||
Invalid = icsneoc2_msg_bus_type_invalid,
|
||||
Internal = icsneoc2_msg_bus_type_internal,
|
||||
CAN = icsneoc2_msg_bus_type_can,
|
||||
LIN = icsneoc2_msg_bus_type_lin,
|
||||
FlexRay = icsneoc2_msg_bus_type_flexray,
|
||||
MOST = icsneoc2_msg_bus_type_most,
|
||||
Ethernet = icsneoc2_msg_bus_type_ethernet,
|
||||
LSFTCAN = icsneoc2_msg_bus_type_lsftcan,
|
||||
SWCAN = icsneoc2_msg_bus_type_swcan,
|
||||
ISO9141 = icsneoc2_msg_bus_type_iso9141,
|
||||
I2C = icsneoc2_msg_bus_type_i2c,
|
||||
A2B = icsneoc2_msg_bus_type_a2b,
|
||||
SPI = icsneoc2_msg_bus_type_spi,
|
||||
MDIO = icsneoc2_msg_bus_type_mdio,
|
||||
ANY = icsneoc2_msg_bus_type_any,
|
||||
OTHER = icsneoc2_msg_bus_type_other
|
||||
} Type;
|
||||
|
||||
const MessageType getMsgType() const final { return MessageType::Bus; }
|
||||
|
||||
virtual const BusMessage::Type getBusType() const = 0;
|
||||
|
||||
// Description ID of the message. This is used for filtering / tracking in firmware and driver.
|
||||
// This is equivalent to icsSpyMessage::DescriptionID
|
||||
uint16_t description = 0;
|
||||
// weather the message was originally transmitted on the bus. This is equivalent to
|
||||
// SPY_STATUS_TX_MSG bit field in icsSpyMessage::StatusBitField
|
||||
bool transmitted = false;
|
||||
bool error = false;
|
||||
};
|
||||
|
||||
/** @brief Backwards compatibility, RawMessage was renamed to better reflect what it actually does. */
|
||||
typedef InternalMessage RawMessage;
|
||||
/** @brief Backwards compatibility, Frame was renamed to better reflect what it actually does. */
|
||||
typedef BusMessage Frame;
|
||||
|
||||
}
|
||||
|
||||
#endif // __cplusplus
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class NeoReadMemorySDMessage : public RawMessage {
|
||||
class NeoReadMemorySDMessage : public InternalMessage {
|
||||
public:
|
||||
NeoReadMemorySDMessage() : RawMessage(Message::Type::RawMessage, Network::NetID::NeoMemorySDRead) {}
|
||||
NeoReadMemorySDMessage() : InternalMessage(Message::Type::InternalMessage, Network::NetID::NeoMemorySDRead) {}
|
||||
uint32_t startAddress = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
class ReadSettingsMessage : public RawMessage {
|
||||
class ReadSettingsMessage : public InternalMessage {
|
||||
public:
|
||||
ReadSettingsMessage() : RawMessage(Message::Type::ReadSettings, Network::NetID::ReadSettings) {}
|
||||
ReadSettingsMessage() : InternalMessage(Message::Type::ReadSettings, Network::NetID::ReadSettings) {}
|
||||
|
||||
enum class Response : uint8_t {
|
||||
OK = 0,
|
||||
|
||||
Reference in New Issue
Block a user