From 451598fa9ce4e57a00c9312c04839e0b3dcdf320 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Tue, 26 Nov 2019 16:18:41 +0100 Subject: Integrate the J1939 features : address claiming and write. This commit allows to write J1939 messages and add the management of the address claiming. Bug-AGL: SPEC-2386 Bug-AGL: SPEC-2976 Signed-off-by: Arthur Guyader Change-Id: I1bb95a7ba6f6ebe463319c3972d9d46897181d51 Signed-off-by: Romain Forlot --- .../socketcan-j1939-addressclaiming.hpp | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp (limited to 'low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp') diff --git a/low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp b/low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp new file mode 100644 index 00000000..92c44c8c --- /dev/null +++ b/low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2018, 2019 "IoT.bzh" + * Author "Arthur Guyader" + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once +#include + +#include "./socketcan-j1939.hpp" + +namespace utils +{ + class socketcan_j1939_addressclaiming_t : public socketcan_j1939_t + { + public: + socketcan_j1939_addressclaiming_t(); + virtual std::shared_ptr read_message(); + virtual int open(std::string device_name, pgn_t pgn); + virtual claiming_state get_state(); + TimerHandleT *timer_handle_; + std::pair table_j1939_address_[J1939_IDLE_ADDR]; + + private: + int claim_address(bool first_claim,bool new_address); + int pgn_request(); + void initialize_table_j1939_address(); + int save_addr_name(uint8_t addr,name_t name); + uint8_t choose_new_address(); + uint8_t get_addr_table(name_t name); + void change_state(claiming_state new_state); + void launch_timer(); + static int no_response_claiming(TimerHandleT *timerhandle); + static int free_timer_handle(void *timer_context); + + uint8_t current_address_; + bool signal_stop_; + claiming_state claiming_state_; + std::string device_name_; + }; +} -- cgit 1.2.3-korg