Woman, Life, Freedom


OBD-II Emulator
Linux ODB-II Emulator public and protected interfaces documentation
can_driver.h
1#ifndef CAN_DRIVER_H
2#define CAN_DRIVER_H
3
4#include "./can_frame.h"
5
6namespace ObdEmulator
7{
9 enum class CanBusSpeed : uint8_t
10 {
11 Speed5kbps = 0x0c,
12 Speed10kbps = 0x0b,
13 Speed20kbps = 0x0a,
14 Speed50kbps = 0x09,
15 Speed100kbps = 0x08,
16 Speed125kbps = 0x07,
17 Speed200kbps = 0x06,
18 Speed250kbps = 0x05,
19 Speed400kbps = 0x04,
20 Speed500kbps = 0x03,
21 Speed800kbps = 0x02,
22 Speed1000kbps = 0x01
23 };
24
27 {
28 public:
30 static constexpr size_t cFixedFrameSize{20};
31
32 private:
33 static const size_t cStandardIdSize{2};
34 static const size_t cExtendedIdSize{4};
35 static const uint8_t cHeaderByte{0xaa};
36 static const uint8_t cTrailerByte{0x55};
37 static const uint8_t cExtendedBitMask{0x20};
38 static const uint8_t cRemoteBitMask{0x10};
39
40 const bool mSupportExtended;
41 std::array<uint8_t, cFixedFrameSize> mConfiguration;
42
43 static std::array<uint8_t, cStandardIdSize> getStandardIdArray(
44 uint32_t id);
45 static std::array<uint8_t, cExtendedIdSize> getExtendedIdArray(
46 uint32_t id);
47
48 static uint32_t getStandardId(
49 uint8_t firstByte,
50 uint8_t lastByte);
51
52 static uint32_t getExtendedId(
53 uint8_t firstByte,
54 uint8_t secondtByte,
55 uint8_t thirdByte,
56 uint8_t lastByte);
57
58 static void setChecksum(
59 std::array<uint8_t, cFixedFrameSize> &data);
60
61 static std::array<uint8_t, cFixedFrameSize> getConfigurationArray(
62 CanBusSpeed speed, bool supportExtended);
63
64 public:
68 CanDriver(CanBusSpeed speed, bool supportExtended);
69 CanDriver() = delete;
70
73 std::vector<uint8_t> GetConfiguration() const;
74
79 std::vector<uint8_t> Serialize(const CanFrame &frame) const;
80
85 CanFrame Deserialize(const std::vector<uint8_t> &packet) const;
86 };
87}
88
89#endif
CAN bus controller driver helper.
Definition: can_driver.h:27
std::vector< uint8_t > Serialize(const CanFrame &frame) const
Serialize a CAN frame to a variable length byte array.
CanDriver(CanBusSpeed speed, bool supportExtended)
Constructor.
static constexpr size_t cFixedFrameSize
Fixed CAN frame data packet size.
Definition: can_driver.h:30
CanFrame Deserialize(const std::vector< uint8_t > &packet) const
Deserialize a packet to a CAN frame.
std::vector< uint8_t > GetConfiguration() const
Get CAN bus communication configuration packet.
CAN transmission packet frame.
Definition: can_frame.h:13