Refining the FlexRay API
parent
f0582697a6
commit
3396f5dcce
|
|
@ -38,6 +38,18 @@ std::vector<uint8_t> FlexRayControlMessage::BuildWriteCCRegArgs(uint8_t controll
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<uint8_t> FlexRayControlMessage::BuildAddConfiguredTxMessageArgs(
|
||||||
|
uint8_t controller, uint16_t descriptionId, uint16_t slotId, uint8_t baseCycle, uint8_t cycleReps, FlexRay::Channel channel) {
|
||||||
|
return BuildBaseControlArgs(controller, FlexRay::Opcode::AddConfiguredTxMessage, {
|
||||||
|
uint8_t(descriptionId),
|
||||||
|
uint8_t(descriptionId >> 8),
|
||||||
|
uint8_t(slotId),
|
||||||
|
uint8_t(slotId >> 8),
|
||||||
|
uint8_t(baseCycle + cycleReps),
|
||||||
|
uint8_t(channel)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
FlexRayControlMessage::FlexRayControlMessage(const Packet& packet) : Message() {
|
FlexRayControlMessage::FlexRayControlMessage(const Packet& packet) : Message() {
|
||||||
if(packet.data.size() < 2)
|
if(packet.data.size() < 2)
|
||||||
return; // huh?
|
return; // huh?
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ std::shared_ptr<FlexRayMessage> HardwareFlexRayPacket::DecodeToMessage(const std
|
||||||
// Eventually we'll have to get this from the framelen
|
// Eventually we'll have to get this from the framelen
|
||||||
} else {
|
} else {
|
||||||
msg->tsslen = data->tss_length_12_5ns * 12.5e-9;
|
msg->tsslen = data->tss_length_12_5ns * 12.5e-9;
|
||||||
msg->channelB = data->statusBits.bits.chb;
|
msg->channel = data->statusBits.bits.chb ? icsneo::FlexRay::Channel::B : icsneo::FlexRay::Channel::A;
|
||||||
|
|
||||||
if(data->statusBits.bits.bytesRxed >= 5) {
|
if(data->statusBits.bits.bytesRxed >= 5) {
|
||||||
if(data->statusBits.bits.hcrc_error)
|
if(data->statusBits.bits.hcrc_error)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include "icsneo/communication/packet.h"
|
#include "icsneo/communication/packet.h"
|
||||||
#include "icsneo/device/extensions/flexray/opcode.h"
|
#include "icsneo/device/extensions/flexray/opcode.h"
|
||||||
#include "icsneo/device/extensions/flexray/pocstatus.h"
|
#include "icsneo/device/extensions/flexray/pocstatus.h"
|
||||||
|
#include "icsneo/device/extensions/flexray/channel.h"
|
||||||
|
|
||||||
namespace icsneo {
|
namespace icsneo {
|
||||||
|
|
||||||
|
|
@ -14,6 +15,8 @@ public:
|
||||||
static std::vector<uint8_t> BuildBaseControlArgs(uint8_t controller, FlexRay::Opcode op, std::initializer_list<uint8_t> args);
|
static std::vector<uint8_t> BuildBaseControlArgs(uint8_t controller, FlexRay::Opcode op, std::initializer_list<uint8_t> args);
|
||||||
static std::vector<uint8_t> BuildReadCCRegsArgs(uint8_t controller, uint16_t startAddress, uint8_t numRegisters = 1);
|
static std::vector<uint8_t> BuildReadCCRegsArgs(uint8_t controller, uint16_t startAddress, uint8_t numRegisters = 1);
|
||||||
static std::vector<uint8_t> BuildWriteCCRegArgs(uint8_t controller, uint16_t address, uint32_t value);
|
static std::vector<uint8_t> BuildWriteCCRegArgs(uint8_t controller, uint16_t address, uint32_t value);
|
||||||
|
static std::vector<uint8_t> BuildAddConfiguredTxMessageArgs(
|
||||||
|
uint8_t controller, uint16_t descriptionId, uint16_t slotId, uint8_t baseCycle, uint8_t cycleReps, FlexRay::Channel channel);
|
||||||
|
|
||||||
FlexRayControlMessage(const Packet& packet);
|
FlexRayControlMessage(const Packet& packet);
|
||||||
virtual ~FlexRayControlMessage() = default;
|
virtual ~FlexRayControlMessage() = default;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include "icsneo/communication/message/message.h"
|
#include "icsneo/communication/message/message.h"
|
||||||
#include "icsneo/device/extensions/flexray/symbol.h"
|
#include "icsneo/device/extensions/flexray/symbol.h"
|
||||||
#include "icsneo/device/extensions/flexray/crcstatus.h"
|
#include "icsneo/device/extensions/flexray/crcstatus.h"
|
||||||
|
#include "icsneo/device/extensions/flexray/channel.h"
|
||||||
|
|
||||||
namespace icsneo {
|
namespace icsneo {
|
||||||
|
|
||||||
|
|
@ -17,7 +18,7 @@ public:
|
||||||
uint16_t headerCRC = 0;
|
uint16_t headerCRC = 0;
|
||||||
FlexRay::CRCStatus crcStatus = FlexRay::CRCStatus::OK;
|
FlexRay::CRCStatus crcStatus = FlexRay::CRCStatus::OK;
|
||||||
uint32_t frameCRC = 0;
|
uint32_t frameCRC = 0;
|
||||||
bool channelB = false;
|
FlexRay::Channel channel = FlexRay::Channel::None;
|
||||||
bool nullFrame = false;
|
bool nullFrame = false;
|
||||||
bool reserved0was1 = false;
|
bool reserved0was1 = false;
|
||||||
bool payloadPreamble = false;
|
bool payloadPreamble = false;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef __FLEXRAYCHANNEL_H_
|
||||||
|
#define __FLEXRAYCHANNEL_H_
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace icsneo {
|
||||||
|
|
||||||
|
namespace FlexRay {
|
||||||
|
|
||||||
|
// In some cases used as a bitfield
|
||||||
|
enum class Channel {
|
||||||
|
None = 0, // Usually an invalid/unset value
|
||||||
|
A = 1,
|
||||||
|
B = 2,
|
||||||
|
AB = 3
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace FlexRay
|
||||||
|
|
||||||
|
} // namespace icsneo
|
||||||
|
|
||||||
|
#endif // __FLEXRAYCHANNEL_H_
|
||||||
|
|
@ -14,7 +14,7 @@ enum class Opcode : uint8_t {
|
||||||
WriteCCReg = 0x02,
|
WriteCCReg = 0x02,
|
||||||
WriteMessageBuffer = 0x03,
|
WriteMessageBuffer = 0x03,
|
||||||
ReadCCStatus = 0x04,
|
ReadCCStatus = 0x04,
|
||||||
AddConfiguredMessage = 0x05,
|
AddConfiguredTxMessage = 0x05,
|
||||||
InitForRun = 0x06,
|
InitForRun = 0x06,
|
||||||
Unknown = 0xff
|
Unknown = 0xff
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue