Fix diagnostic message subscription.
[apps/agl-service-can-low-level.git] / CAN-binder / low-can-binding / binding / low-can-cb.hpp
1 /*
2  * Copyright (C) 2015, 2016 "IoT.bzh"
3  * Author "Romain Forlot" <romain.forlot@iot.bzh>
4   *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #include <string>
19 #include <cmath>
20 #include <utility>
21
22 #include "../can/can-signals.hpp"
23 #include "../diagnostic/diagnostic-message.hpp"
24 #include "../utils/socketcan-bcm.hpp"
25
26 struct event_filter_t
27 {
28         float frequency;
29         float min;
30         float max;
31         event_filter_t() : frequency{NAN}, min{NAN}, max{NAN} {}
32 };
33
34 class low_can_subscription_t
35 {
36 private:
37         int index_;
38
39         /// Signal part
40         std::shared_ptr<can_signal_t> can_signal_;
41         std::shared_ptr<diagnostic_message_t> diagnostic_message_;
42
43         /// Filtering part
44         struct event_filter_t event_filter_;
45
46         utils::socketcan_bcm_t socket_;
47 public:
48         low_can_subscription_t();
49         low_can_subscription_t(struct event_filter_t event_filter);
50         low_can_subscription_t(struct event_filter_t event_filter, std::shared_ptr<diagnostic_message_t> sig_name);
51         low_can_subscription_t(const low_can_subscription_t& s) = delete;
52         low_can_subscription_t(low_can_subscription_t&& s);
53
54         low_can_subscription_t& operator=(const low_can_subscription_t& s);
55         explicit operator bool() const;
56
57         int get_index() const;
58         const std::shared_ptr<can_signal_t> get_can_signal() const;
59         const std::string get_sig_name() const;
60         float get_frequency() const;
61         float get_min() const;
62         float get_max() const;
63         utils::socketcan_bcm_t& get_socket();
64
65         void set_frequency(float freq);
66         void set_min(float min);
67         void set_max(float max);
68
69         int create_rx_filter();
70         int create_rx_filter(std::shared_ptr<can_signal_t> sig);
71 };