ambd: remove redundant code in core
[profile/ivi/automotive-message-broker.git] / plugins / common / canbus.h
1 /*
2 Copyright (C) 2012 Intel Corporation
3 Copyright (C) 2015 Cogent Embedded Inc.
4 Copyright (C) 2015 Renesas Electronics Corporation
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public
17 License along with this library; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19 */
20
21 /* Refactored to an abstract interface. See http://stackoverflow.com/a/825365 */
22
23 #ifndef CANBUS_H
24 #define CANBUS_H
25
26 /**
27  *  @defgroup libcanbus libcanbus static library
28  *  \brief SocketCAN based CAN bus library.
29  *  @{
30  */
31
32 #include "canobserver.h"
33
34 /**
35 * \brief Encapsulation of the raw CAN bus.
36 *
37 * @class CANBus
38 */
39 class CANBus
40 {
41 public:
42         virtual ~CANBus(){} /*LCOV_EXCL_LINE*/
43
44     /**
45     * Starts the CAN bus instance on the specified interface
46     * @fn start
47     * @param name Name of the CAN bus network interface
48     * @return True if no error occurs.
49     */
50         virtual bool start(const char* name) = 0;
51     /**
52     * Stops the CAN bus instance
53     * @fn stop
54     */
55         virtual void stop() = 0; 
56     /**
57     * Sends standard(11bit) CAN frame over the bus
58     * @fn sendStandardFrame
59     * @param frame CAN frame to be sent
60     * @return True if frame was sent
61     */
62         virtual bool sendStandardFrame(const can_frame& frame) = 0;
63     /**
64     * Sends extended(29bit) CAN frame over the bus
65     * @fn sendExtendedFrame
66     * @param frame CAN frame to be sent
67     * @return True if frame was sent
68     */
69         virtual bool sendExtendedFrame(const can_frame& frame) = 0;
70     /**
71     * Registers CAN ID of a cyclic message for receiving
72     * @fn registerCyclicMessageForReceive
73     * @param canId CAN ID of the message.
74     * @param minCycleTime Minimal interval between messages in seconds. Set to 0 if not used.
75     * @param maxCycleTime Maximum interval between messages for timeout detection in seconds. Set to 0 if no timeout detection is necessary.
76     * @return True if registration succeeds.
77     */
78     virtual bool registerCyclicMessageForReceive(int canId, double minCycleTime, double maxCycleTime) = 0;
79     /**
80     * Registers CAN ID of a message for receiving with no timeout. Perfect for sporadic messages.
81     * @fn registerMessageForReceive
82     * @param canId CAN ID of the message.
83     * @return True if registration succeeds.
84     */
85     virtual bool registerMessageForReceive(int canId)
86     {
87         return registerCyclicMessageForReceive(canId, 0, 0);
88     }
89     /**
90     * Unregisters CAN ID for receiving
91     * @fn unregisterMessageForReceive
92     * @param canId CAN ID of the message.
93     * @return True if de-registration succeeds.
94     */
95     virtual bool unregisterMessageForReceive(int canId) = 0;
96 };
97
98 #endif // CANBUS_H
99
100 /** @} */