Refining the FlexRay API

pull/25/head
Paul Hollinsky 2019-11-09 15:34:58 -05:00
parent f0582697a6
commit 3396f5dcce
6 changed files with 41 additions and 3 deletions

View File

@ -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?

View File

@ -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)

View File

@ -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;

View File

@ -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;

View File

@ -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_

View File

@ -14,7 +14,7 @@ enum class Opcode : uint8_t {
WriteCCReg = 0x02,
WriteMessageBuffer = 0x03,
ReadCCStatus = 0x04,
AddConfiguredMessage = 0x05,
AddConfiguredTxMessage = 0x05,
InitForRun = 0x06,
Unknown = 0xff
};