mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 01:18:36 +02:00
Device: Add sendSPIPortKeyOperation()
This commit is contained in:
committed by
Kyle Schwarz
parent
78c2e3ff89
commit
1dda9f5412
@@ -235,6 +235,7 @@ set(SRC_FILES
|
|||||||
communication/message/networkmutexmessage.cpp
|
communication/message/networkmutexmessage.cpp
|
||||||
communication/message/clientidmessage.cpp
|
communication/message/clientidmessage.cpp
|
||||||
communication/message/transmitmessage.cpp
|
communication/message/transmitmessage.cpp
|
||||||
|
communication/message/spiportkeymessage.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
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#include "icsneo/communication/message/ethernetstatusmessage.h"
|
#include "icsneo/communication/message/ethernetstatusmessage.h"
|
||||||
#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/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"
|
||||||
@@ -341,6 +342,9 @@ bool Decoder::decode(std::shared_ptr<Message>& result, const std::shared_ptr<Pac
|
|||||||
case ExtendedCommand::LiveData:
|
case ExtendedCommand::LiveData:
|
||||||
result = HardwareLiveDataPacket::DecodeToMessage(packet->data, report);
|
result = HardwareLiveDataPacket::DecodeToMessage(packet->data, report);
|
||||||
return true;
|
return true;
|
||||||
|
case ExtendedCommand::ExecuteSPIPortKeyOperation:
|
||||||
|
result = SPIPortKeyMessage::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,27 @@
|
|||||||
|
#include "icsneo/communication/message/spiportkeymessage.h"
|
||||||
|
#include "icsneo/communication/message/extendedresponsemessage.h"
|
||||||
|
#include "icsneo/communication/command.h"
|
||||||
|
#include "icsneo/communication/network.h"
|
||||||
|
|
||||||
|
using namespace icsneo;
|
||||||
|
|
||||||
|
std::shared_ptr<SPIPortKeyMessage> SPIPortKeyMessage::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::ExecuteSPIPortKeyOperation)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
const size_t required = sizeof(ExtendedResponseMessage::ResponseHeader) + sizeof(SPIPortKeyPacket);
|
||||||
|
if(bytestream.size() < required)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
auto msg = std::make_shared<SPIPortKeyMessage>();
|
||||||
|
|
||||||
|
const auto* packet = reinterpret_cast<const SPIPortKeyPacket*>(bytestream.data() + sizeof(ExtendedResponseMessage::ResponseHeader));
|
||||||
|
msg->isKeyLoaded = packet->isKeyLoaded;
|
||||||
|
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
@@ -2132,6 +2132,18 @@ std::optional<EthPhyMessage> Device::sendEthPhyMsg(const EthPhyMessage& message,
|
|||||||
return std::make_optional<EthPhyMessage>(*retMsg);
|
return std::make_optional<EthPhyMessage>(*retMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Device::sendSPIPortKeyOperation(uint8_t portIndex, SPIPortKeyMessage::Operation op, std::array<uint8_t, 16> key) {
|
||||||
|
std::vector<uint8_t> args(sizeof(SPIPortKeyMessage::SPIPortKeyPacket));
|
||||||
|
auto& params = *reinterpret_cast<SPIPortKeyMessage::SPIPortKeyPacket*>(args.data());
|
||||||
|
params.op = op;
|
||||||
|
params.portIndex = portIndex;
|
||||||
|
std::copy(key.begin(), key.end(), params.key);
|
||||||
|
if(!com->sendCommand(ExtendedCommand::ExecuteSPIPortKeyOperation, args)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
std::optional<bool> Device::SetRootDirectoryEntryFlags(uint8_t mask, uint8_t values, uint32_t collectionEntryByteAddress)
|
std::optional<bool> Device::SetRootDirectoryEntryFlags(uint8_t mask, uint8_t values, uint32_t collectionEntryByteAddress)
|
||||||
{
|
{
|
||||||
if(!supportsWiVI())
|
if(!supportsWiVI())
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ enum class ExtendedCommand : uint16_t {
|
|||||||
TransmitCoreminiMessage = 0x0028,
|
TransmitCoreminiMessage = 0x0028,
|
||||||
GenericBinaryInfo = 0x0030,
|
GenericBinaryInfo = 0x0030,
|
||||||
LiveData = 0x0035,
|
LiveData = 0x0035,
|
||||||
|
ExecuteSPIPortKeyOperation = 0x003C,
|
||||||
RequestTC10Wake = 0x003D,
|
RequestTC10Wake = 0x003D,
|
||||||
RequestTC10Sleep = 0x003E,
|
RequestTC10Sleep = 0x003E,
|
||||||
GetTC10Status = 0x003F,
|
GetTC10Status = 0x003F,
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ public:
|
|||||||
NetworkMutex = 0x8016,
|
NetworkMutex = 0x8016,
|
||||||
ClientId = 0x8017,
|
ClientId = 0x8017,
|
||||||
AllMACAddresses = 0x8018,
|
AllMACAddresses = 0x8018,
|
||||||
|
SPIPortKeyOperation = 0x8019,
|
||||||
};
|
};
|
||||||
|
|
||||||
Message(Type t) : type(t) {}
|
Message(Type t) : type(t) {}
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
#ifndef __SPIPORTKEYMESSAGE_H_
|
||||||
|
#define __SPIPORTKEYMESSAGE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
#include "icsneo/communication/message/message.h"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace icsneo {
|
||||||
|
|
||||||
|
class SPIPortKeyMessage : public Message {
|
||||||
|
public:
|
||||||
|
enum class Operation : uint8_t {
|
||||||
|
WriteKey = 0,
|
||||||
|
IsKeySet = 1,
|
||||||
|
ClearKey = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
#pragma pack(push, 2)
|
||||||
|
struct SPIPortKeyPacket
|
||||||
|
{
|
||||||
|
Operation op;
|
||||||
|
uint8_t portIndex;
|
||||||
|
bool isKeyLoaded;
|
||||||
|
uint8_t rsvd;
|
||||||
|
uint8_t key[16];
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
static std::shared_ptr<SPIPortKeyMessage> DecodeToMessage(const std::vector<uint8_t>& bytestream);
|
||||||
|
|
||||||
|
SPIPortKeyMessage() : Message(Type::SPIPortKeyOperation) {}
|
||||||
|
|
||||||
|
bool isKeyLoaded;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace icsneo
|
||||||
|
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif // __SPIPORTKEYMESSAGE_H_
|
||||||
@@ -46,6 +46,7 @@
|
|||||||
#include "icsneo/communication/message/extendeddatamessage.h"
|
#include "icsneo/communication/message/extendeddatamessage.h"
|
||||||
#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/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"
|
||||||
@@ -727,6 +728,8 @@ public:
|
|||||||
std::optional<EthPhyMessage> sendEthPhyMsg(const EthPhyMessage& message, std::chrono::milliseconds timeout = std::chrono::milliseconds(50));
|
std::optional<EthPhyMessage> sendEthPhyMsg(const EthPhyMessage& message, std::chrono::milliseconds timeout = std::chrono::milliseconds(50));
|
||||||
|
|
||||||
|
|
||||||
|
bool sendSPIPortKeyOperation(uint8_t portIndex, SPIPortKeyMessage::Operation op, std::array<uint8_t, 16> key = {});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the flags of the root directory entry specified at given address
|
* Set the flags of the root directory entry specified at given address
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user