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() {
|
||||
if(packet.data.size() < 2)
|
||||
return; // huh?
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ std::shared_ptr<FlexRayMessage> HardwareFlexRayPacket::DecodeToMessage(const std
|
|||
// Eventually we'll have to get this from the framelen
|
||||
} else {
|
||||
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.hcrc_error)
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include "icsneo/communication/packet.h"
|
||||
#include "icsneo/device/extensions/flexray/opcode.h"
|
||||
#include "icsneo/device/extensions/flexray/pocstatus.h"
|
||||
#include "icsneo/device/extensions/flexray/channel.h"
|
||||
|
||||
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> 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> BuildAddConfiguredTxMessageArgs(
|
||||
uint8_t controller, uint16_t descriptionId, uint16_t slotId, uint8_t baseCycle, uint8_t cycleReps, FlexRay::Channel channel);
|
||||
|
||||
FlexRayControlMessage(const Packet& packet);
|
||||
virtual ~FlexRayControlMessage() = default;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include "icsneo/communication/message/message.h"
|
||||
#include "icsneo/device/extensions/flexray/symbol.h"
|
||||
#include "icsneo/device/extensions/flexray/crcstatus.h"
|
||||
#include "icsneo/device/extensions/flexray/channel.h"
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
|
|
@ -17,7 +18,7 @@ public:
|
|||
uint16_t headerCRC = 0;
|
||||
FlexRay::CRCStatus crcStatus = FlexRay::CRCStatus::OK;
|
||||
uint32_t frameCRC = 0;
|
||||
bool channelB = false;
|
||||
FlexRay::Channel channel = FlexRay::Channel::None;
|
||||
bool nullFrame = false;
|
||||
bool reserved0was1 = 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,
|
||||
WriteMessageBuffer = 0x03,
|
||||
ReadCCStatus = 0x04,
|
||||
AddConfiguredMessage = 0x05,
|
||||
AddConfiguredTxMessage = 0x05,
|
||||
InitForRun = 0x06,
|
||||
Unknown = 0xff
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue