diff options
author | Arthur Guyader <arthur.guyader@iot.bzh> | 2019-08-27 14:44:48 +0200 |
---|---|---|
committer | Arthur Guyader <arthur.guyader@iot.bzh> | 2019-08-30 15:06:45 +0200 |
commit | b8e8186c95f50e76aa4d88c3c751053568ab7cdf (patch) | |
tree | bd9e31008cd584fe5a8995e6338bd496ee25fedd /low-can-binding/can | |
parent | 7f038fed824cac9b747c033b441263512421c6b2 (diff) |
Add feature ISO TP (multi frames and peer to peer)
This commit adds the ISO TP feature. The ISO TP protocol
allows to communicate between two ECU. The protocol
allows multi packets management.
Bug-AGL : SPEC-2779
Change-Id: Ic222615b547f28e926930e6c1dea2c0265055afd
Signed-off-by: Arthur Guyader <arthur.guyader@iot.bzh>
Diffstat (limited to 'low-can-binding/can')
-rw-r--r-- | low-can-binding/can/message-definition.cpp | 5 | ||||
-rw-r--r-- | low-can-binding/can/message-definition.hpp | 1 | ||||
-rw-r--r-- | low-can-binding/can/message/can-message.cpp | 5 | ||||
-rw-r--r-- | low-can-binding/can/message/can-message.hpp | 11 | ||||
-rw-r--r-- | low-can-binding/can/message/j1939-message.cpp | 6 | ||||
-rw-r--r-- | low-can-binding/can/message/j1939-message.hpp | 1 | ||||
-rw-r--r-- | low-can-binding/can/message/message.cpp | 13 | ||||
-rw-r--r-- | low-can-binding/can/message/message.hpp | 10 |
8 files changed, 45 insertions, 7 deletions
diff --git a/low-can-binding/can/message-definition.cpp b/low-can-binding/can/message-definition.cpp index 407ad750..a875dafa 100644 --- a/low-can-binding/can/message-definition.cpp +++ b/low-can-binding/can/message-definition.cpp @@ -77,6 +77,11 @@ bool message_definition_t::is_j1939() const return (flags_&J1939_PROTOCOL); } +bool message_definition_t::is_isotp() const +{ + return (flags_&ISOTP_PROTOCOL); +} + std::vector<std::shared_ptr<signal_t>>& message_definition_t::get_signals() { return signals_; diff --git a/low-can-binding/can/message-definition.hpp b/low-can-binding/can/message-definition.hpp index 13ae2289..f46d3adb 100644 --- a/low-can-binding/can/message-definition.hpp +++ b/low-can-binding/can/message-definition.hpp @@ -82,6 +82,7 @@ public: uint32_t get_id() const; bool is_fd() const; bool is_j1939() const; + bool is_isotp() const; std::vector<std::shared_ptr<signal_t>>& get_signals(); uint32_t get_length() const; uint32_t get_flags() const; diff --git a/low-can-binding/can/message/can-message.cpp b/low-can-binding/can/message/can-message.cpp index 0ef693c7..b274206b 100644 --- a/low-can-binding/can/message/can-message.cpp +++ b/low-can-binding/can/message/can-message.cpp @@ -55,6 +55,11 @@ uint32_t can_message_t::get_id() const } +void can_message_t::set_id(const canid_t id) +{ + id_ = id; +} + /// @brief Control whether the object is correctly initialized /// to be sent over the CAN bus /// diff --git a/low-can-binding/can/message/can-message.hpp b/low-can-binding/can/message/can-message.hpp index 769899ea..acc3bfc1 100644 --- a/low-can-binding/can/message/can-message.hpp +++ b/low-can-binding/can/message/can-message.hpp @@ -39,8 +39,16 @@ class can_message_t : public message_t { public: can_message_t(); - can_message_t(uint32_t maxdlen, uint32_t id, uint32_t length, bool rtr_flag_, uint32_t flags, std::vector<uint8_t>& data, uint64_t timestamp); + can_message_t( uint32_t maxdlen, + uint32_t id, + uint32_t length, + bool rtr_flag_, + uint32_t flags, + std::vector<uint8_t>& data, + uint64_t timestamp); + uint32_t get_id() const; + void set_id(const canid_t id); static std::shared_ptr<can_message_t> convert_from_frame(const canfd_frame& frame, size_t nbytes, uint64_t timestamp); struct canfd_frame convert_to_canfd_frame(); @@ -53,5 +61,4 @@ class can_message_t : public message_t { void set_bcm_msg(struct bcm_msg bcm_msg); std::string get_debug_message(); - }; diff --git a/low-can-binding/can/message/j1939-message.cpp b/low-can-binding/can/message/j1939-message.cpp index ec65cba4..8e056c17 100644 --- a/low-can-binding/can/message/j1939-message.cpp +++ b/low-can-binding/can/message/j1939-message.cpp @@ -159,6 +159,12 @@ uint32_t j1939_message_t::get_id() const return get_pgn(); } +void j1939_message_t::set_id(const canid_t id) +{ + pgn_ = id; +} + + /** * @brief Return the sockname of the message * diff --git a/low-can-binding/can/message/j1939-message.hpp b/low-can-binding/can/message/j1939-message.hpp index 9e9cea4a..a513e94e 100644 --- a/low-can-binding/can/message/j1939-message.hpp +++ b/low-can-binding/can/message/j1939-message.hpp @@ -75,6 +75,7 @@ class j1939_message_t : public message_t bool is_set(); std::string get_debug_message(); uint32_t get_id() const; + void set_id(const canid_t id); struct sockaddr_can get_sockname(); void set_sockname(struct sockaddr_can sockname); void set_sockname(pgn_t pgn, name_t name, uint8_t addr); diff --git a/low-can-binding/can/message/message.cpp b/low-can-binding/can/message/message.cpp index aaab99f5..2496b672 100644 --- a/low-can-binding/can/message/message.cpp +++ b/low-can-binding/can/message/message.cpp @@ -135,7 +135,7 @@ uint32_t message_t::get_length() const * * @param data A vector of data */ -void message_t::set_data(std::vector<uint8_t> &data) +void message_t::set_data(std::vector<uint8_t> data) { data_ = data; } @@ -170,13 +170,22 @@ void message_t::set_flags(uint32_t flags) flags_ = flags_ | flags; } +void message_t::erase_flags() +{ + flags_ = 0; +} + uint32_t message_t::get_maxdlen() { return maxdlen_; } - void message_t::set_maxdlen(uint32_t maxdlen) { maxdlen_ = maxdlen; +} + +void message_t::set_length(uint32_t length) +{ + length_ = length; }
\ No newline at end of file diff --git a/low-can-binding/can/message/message.hpp b/low-can-binding/can/message/message.hpp index 6cef0185..db06eb38 100644 --- a/low-can-binding/can/message/message.hpp +++ b/low-can-binding/can/message/message.hpp @@ -29,6 +29,7 @@ #define CAN_MESSAGE_SIZE 8 #define MAX_BCM_CAN_FRAMES 257 +#define MAX_ISOTP_FRAMES 4096 /** @@ -42,6 +43,8 @@ #define J1939_PROTOCOL 0x0010 #define J1939_ADDR_CLAIM_PROTOCOL 0x0020 #define ISOTP_PROTOCOL 0x0040 +#define ISOTP_SEND 0x0080 +#define ISOTP_RECEIVE 0x0100 #define FD_FRAME 0x0800 /// @class message_t @@ -69,16 +72,17 @@ public: uint32_t get_length() const; uint64_t get_timestamp() const; - void set_data(std::vector<uint8_t> &data); + void set_data(std::vector<uint8_t> data); void set_sub_id(int sub_id); void set_timestamp(uint64_t timestamp); virtual bool is_set() = 0; virtual std::string get_debug_message() = 0; virtual uint32_t get_id() const = 0; + virtual void set_id(canid_t id) = 0; uint32_t get_flags(); void set_flags(uint32_t flags); + void erase_flags(); uint32_t get_maxdlen(); void set_maxdlen(uint32_t maxdlen); - - + void set_length(uint32_t length); }; |