Update doc revision and pdf cover.
[apps/low-level-can-service.git] / low-can-binding / utils / socketcan-bcm.hpp
1 /*
2  * Copyright (C) 2015, 2016 ,2017 "IoT.bzh"
3  * Author "Romain Forlot" <romain.forlot@iot.bzh>
4  * Author "Loïc Collignon" <loic.collignon@iot.bzh>
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 #pragma once
19
20 #include "socketcan.hpp"
21 #include "../can/can-message.hpp"
22
23 namespace utils
24 {
25         struct simple_bcm_msg
26         {
27                 struct bcm_msg_head msg_head;
28                 struct can_frame frames;
29         };
30
31         struct canfd_bcm_msg
32         {
33                 struct bcm_msg_head msg_head;
34                 struct canfd_frame frames;
35                 canfd_bcm_msg() { msg_head.flags |= CAN_FD_FRAME; }
36         };
37
38         /// @brief derivated socketcan class specialized for BCM CAN socket.
39         class socketcan_bcm_t : public socketcan_t
40         {
41         public:
42                 using socketcan_t::socketcan_t;
43
44                 virtual int open(std::string device_name);
45
46         private:
47                 int connect(const struct sockaddr* addr, socklen_t len);
48         };
49
50         socketcan_bcm_t& operator>>(socketcan_bcm_t& s, can_message_t& cm);
51 //      socketcan_bcm_t& operator<<(socketcan_bcm_t& s, const struct simple_bcm_msg& obj);
52 //      socketcan_bcm_t& operator<<(socketcan_bcm_t& s, const struct canfd_bcm_msg& obj);
53 }