mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-09-20 07:58:39 +02:00
Communication: Add GenericAPIDataMessage and GenericAPIStatusMessage types
This commit is contained in:
committed by
Kyle Schwarz
parent
3aaacb6cc8
commit
936566170f
@@ -236,6 +236,8 @@ set(SRC_FILES
|
|||||||
communication/message/clientidmessage.cpp
|
communication/message/clientidmessage.cpp
|
||||||
communication/message/transmitmessage.cpp
|
communication/message/transmitmessage.cpp
|
||||||
communication/message/spiportkeymessage.cpp
|
communication/message/spiportkeymessage.cpp
|
||||||
|
communication/message/genericapidatamessage.cpp
|
||||||
|
communication/message/genericapistatusmessage.cpp
|
||||||
communication/packet/flexraypacket.cpp
|
communication/packet/flexraypacket.cpp
|
||||||
communication/packet/canpacket.cpp
|
communication/packet/canpacket.cpp
|
||||||
communication/packet/a2bpacket.cpp
|
communication/packet/a2bpacket.cpp
|
||||||
|
|||||||
@@ -27,6 +27,8 @@
|
|||||||
#include "icsneo/communication/message/networkmutexmessage.h"
|
#include "icsneo/communication/message/networkmutexmessage.h"
|
||||||
#include "icsneo/communication/message/clientidmessage.h"
|
#include "icsneo/communication/message/clientidmessage.h"
|
||||||
#include "icsneo/communication/message/spiportkeymessage.h"
|
#include "icsneo/communication/message/spiportkeymessage.h"
|
||||||
|
#include "icsneo/communication/message/genericapidatamessage.h"
|
||||||
|
#include "icsneo/communication/message/genericapistatusmessage.h"
|
||||||
#include "icsneo/communication/command.h"
|
#include "icsneo/communication/command.h"
|
||||||
#include "icsneo/device/device.h"
|
#include "icsneo/device/device.h"
|
||||||
#include "icsneo/communication/packet/canpacket.h"
|
#include "icsneo/communication/packet/canpacket.h"
|
||||||
@@ -345,6 +347,12 @@ bool Decoder::decode(std::shared_ptr<Message>& result, const std::shared_ptr<Pac
|
|||||||
case ExtendedCommand::ExecuteSPIPortKeyOperation:
|
case ExtendedCommand::ExecuteSPIPortKeyOperation:
|
||||||
result = SPIPortKeyMessage::DecodeToMessage(packet->data);
|
result = SPIPortKeyMessage::DecodeToMessage(packet->data);
|
||||||
return true;
|
return true;
|
||||||
|
case ExtendedCommand::ReadGenericAPIData:
|
||||||
|
result = GenericAPIDataMessage::DecodeToMessage(packet->data);
|
||||||
|
return true;
|
||||||
|
case ExtendedCommand::ReadGenericAPIStatus:
|
||||||
|
result = GenericAPIStatusMessage::DecodeToMessage(packet->data);
|
||||||
|
return true;
|
||||||
case ExtendedCommand::GetTC10Status:
|
case ExtendedCommand::GetTC10Status:
|
||||||
result = TC10StatusMessage::DecodeToMessage(packet->data);
|
result = TC10StatusMessage::DecodeToMessage(packet->data);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#include "icsneo/communication/message/genericapidatamessage.h"
|
||||||
|
#include "icsneo/communication/message/extendedresponsemessage.h"
|
||||||
|
#include "icsneo/communication/command.h"
|
||||||
|
|
||||||
|
using namespace icsneo;
|
||||||
|
|
||||||
|
std::shared_ptr<GenericAPIDataMessage> GenericAPIDataMessage::DecodeToMessage(const std::vector<uint8_t>& bytestream) {
|
||||||
|
if(bytestream.size() < sizeof(ExtendedResponseMessage::ResponseHeader))
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
const auto* hdr = reinterpret_cast<const ExtendedResponseMessage::ResponseHeader*>(bytestream.data());
|
||||||
|
|
||||||
|
if(hdr->command != ExtendedCommand::ReadGenericAPIData)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
const size_t required = sizeof(ExtendedResponseMessage::ResponseHeader) + sizeof(GenericAPIDataHeader);
|
||||||
|
if(bytestream.size() < required)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
auto msg = std::make_shared<GenericAPIDataMessage>();
|
||||||
|
|
||||||
|
const auto* packet = reinterpret_cast<const GenericAPIDataPacket*>(bytestream.data() + sizeof(ExtendedResponseMessage::ResponseHeader));
|
||||||
|
|
||||||
|
msg->functionId = packet->header.functionId;
|
||||||
|
msg->buffer.resize(packet->header.bufferLength);
|
||||||
|
std::copy(packet->buffer, packet->buffer + packet->header.bufferLength, msg->buffer.data());
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#include "icsneo/communication/message/genericapistatusmessage.h"
|
||||||
|
#include "icsneo/communication/message/extendedresponsemessage.h"
|
||||||
|
#include "icsneo/communication/command.h"
|
||||||
|
|
||||||
|
using namespace icsneo;
|
||||||
|
|
||||||
|
std::shared_ptr<GenericAPIStatusMessage> GenericAPIStatusMessage::DecodeToMessage(const std::vector<uint8_t>& bytestream) {
|
||||||
|
if(bytestream.size() < sizeof(ExtendedResponseMessage::ResponseHeader))
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
const auto* hdr = reinterpret_cast<const ExtendedResponseMessage::ResponseHeader*>(bytestream.data());
|
||||||
|
|
||||||
|
if(hdr->command != ExtendedCommand::ReadGenericAPIStatus)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
const size_t required = sizeof(ExtendedResponseMessage::ResponseHeader) + sizeof(GenericAPIStatusResponsePacket);
|
||||||
|
if(bytestream.size() < required)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
auto msg = std::make_shared<GenericAPIStatusMessage>();
|
||||||
|
|
||||||
|
const auto* packet = reinterpret_cast<const GenericAPIStatusResponsePacket*>(bytestream.data() + sizeof(ExtendedResponseMessage::ResponseHeader));
|
||||||
|
|
||||||
|
msg->functionId = packet->functionId;
|
||||||
|
msg->finishedProcessing = static_cast<bool>(packet->finishedProcessing);
|
||||||
|
msg->functionError = packet->functionError;
|
||||||
|
msg->callbackError = packet->callbackError;
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
@@ -73,8 +73,11 @@ enum class ExtendedCommand : uint16_t {
|
|||||||
GetComponentVersions = 0x001A,
|
GetComponentVersions = 0x001A,
|
||||||
SoftwareUpdate = 0x001B,
|
SoftwareUpdate = 0x001B,
|
||||||
Reboot = 0x001C,
|
Reboot = 0x001C,
|
||||||
|
ReadGenericAPIStatus = 0x001D,
|
||||||
SetRootFSEntryFlags = 0x0027,
|
SetRootFSEntryFlags = 0x0027,
|
||||||
TransmitCoreminiMessage = 0x0028,
|
TransmitCoreminiMessage = 0x0028,
|
||||||
|
ReadGenericAPIData = 0x002E,
|
||||||
|
WriteGenericAPICommand = 0x002F,
|
||||||
GenericBinaryInfo = 0x0030,
|
GenericBinaryInfo = 0x0030,
|
||||||
LiveData = 0x0035,
|
LiveData = 0x0035,
|
||||||
ExecuteSPIPortKeyOperation = 0x003C,
|
ExecuteSPIPortKeyOperation = 0x003C,
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
#ifndef __GENERICAPIDATAMESSAGE_H_
|
||||||
|
#define __GENERICAPIDATAMESSAGE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
#include "icsneo/communication/message/message.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace icsneo {
|
||||||
|
|
||||||
|
class GenericAPIDataMessage : public Message {
|
||||||
|
public:
|
||||||
|
static constexpr size_t GENERIC_API_BUFFER_SIZE = 513;
|
||||||
|
|
||||||
|
#pragma pack(push, 1)
|
||||||
|
struct GenericAPIDataHeader {
|
||||||
|
uint16_t bufferLength;
|
||||||
|
uint8_t apiIndex;
|
||||||
|
uint8_t instance;
|
||||||
|
uint8_t functionId;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GenericAPIDataPacket
|
||||||
|
{
|
||||||
|
GenericAPIDataHeader header;
|
||||||
|
uint8_t buffer[GENERIC_API_BUFFER_SIZE];
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
static std::shared_ptr<GenericAPIDataMessage> DecodeToMessage(const std::vector<uint8_t>& bytestream);
|
||||||
|
|
||||||
|
GenericAPIDataMessage() : Message(Type::GenericAPIData) {}
|
||||||
|
|
||||||
|
uint8_t functionId;
|
||||||
|
std::vector<uint8_t> buffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace icsneo
|
||||||
|
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif // __GENERICAPIDATAMESSAGE_H_
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#ifndef __GENERICAPISTATUSMESSAGE_H_
|
||||||
|
#define __GENERICAPISTATUSMESSAGE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
#include "icsneo/communication/message/message.h"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace icsneo {
|
||||||
|
|
||||||
|
class GenericAPIStatusMessage : public Message {
|
||||||
|
public:
|
||||||
|
#pragma pack(push, 2)
|
||||||
|
struct GenericAPIStatusResponsePacket
|
||||||
|
{
|
||||||
|
uint8_t apiIndex;
|
||||||
|
uint8_t instance;
|
||||||
|
uint8_t functionId;
|
||||||
|
uint8_t functionError;
|
||||||
|
uint8_t callbackError;
|
||||||
|
uint8_t finishedProcessing;
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
static std::shared_ptr<GenericAPIStatusMessage> DecodeToMessage(const std::vector<uint8_t>& bytestream);
|
||||||
|
|
||||||
|
GenericAPIStatusMessage() : Message(Type::GenericAPIStatus) {}
|
||||||
|
|
||||||
|
uint8_t functionId;
|
||||||
|
bool finishedProcessing;
|
||||||
|
uint8_t functionError;
|
||||||
|
uint8_t callbackError;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace icsneo
|
||||||
|
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif // __GENERICAPISTATUSMESSAGE_H_
|
||||||
@@ -49,6 +49,8 @@ public:
|
|||||||
ClientId = 0x8017,
|
ClientId = 0x8017,
|
||||||
AllMACAddresses = 0x8018,
|
AllMACAddresses = 0x8018,
|
||||||
SPIPortKeyOperation = 0x8019,
|
SPIPortKeyOperation = 0x8019,
|
||||||
|
GenericAPIData = 0x8020,
|
||||||
|
GenericAPIStatus = 0x8021,
|
||||||
};
|
};
|
||||||
|
|
||||||
Message(Type t) : type(t) {}
|
Message(Type t) : type(t) {}
|
||||||
|
|||||||
@@ -47,6 +47,8 @@
|
|||||||
#include "icsneo/communication/message/livedatamessage.h"
|
#include "icsneo/communication/message/livedatamessage.h"
|
||||||
#include "icsneo/communication/message/tc10statusmessage.h"
|
#include "icsneo/communication/message/tc10statusmessage.h"
|
||||||
#include "icsneo/communication/message/spiportkeymessage.h"
|
#include "icsneo/communication/message/spiportkeymessage.h"
|
||||||
|
#include "icsneo/communication/message/genericapidatamessage.h"
|
||||||
|
#include "icsneo/communication/message/genericapistatusmessage.h"
|
||||||
#include "icsneo/core/macseccfg.h"
|
#include "icsneo/core/macseccfg.h"
|
||||||
#include "icsneo/communication/packet/genericbinarystatuspacket.h"
|
#include "icsneo/communication/packet/genericbinarystatuspacket.h"
|
||||||
#include "icsneo/communication/packet/livedatapacket.h"
|
#include "icsneo/communication/packet/livedatapacket.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user