Midnight Sun Firmware
Loading...
Searching...
No Matches
can_listener.h
1#pragma once
2
3/************************************************************************************************
4 * @file can_listener.h
5 *
6 * @brief Header file defining the CanListener class
7 *
8 * @date 2025-01-04
9 * @author Aryan Kashem
10 ************************************************************************************************/
11
12/* Standard library Headers */
13#include <atomic>
14#include <cstring>
15#include <string>
16#include <unordered_map>
17#include <vector>
18
19/* Inter-component Headers */
20#include <arpa/inet.h>
21#include <fcntl.h>
22#include <linux/can.h>
23#include <linux/can/bcm.h>
24#include <net/if.h>
25#include <sys/ioctl.h>
26#include <sys/socket.h>
27#include <sys/types.h>
28#include <unistd.h>
29
30#include <nlohmann/json.hpp>
31
32/* Intra-component Headers */
33
47 private:
48 const std::string CAN_INTERFACE_NAME = "vcan0";
49 const std::string CAN_JSON_NAME = "CANListener";
51 static const constexpr unsigned int UPDATE_CAN_JSON_PERIOD_MS = 1000U;
53 std::unordered_map<std::string, nlohmann::json> m_canInfo;
55 pthread_mutex_t m_mutex;
56 pthread_t m_listenCanBusId;
57 pthread_t m_updateJSONId;
60 std::atomic<bool> m_isListening;
67 void canMessageHandler(uint32_t id, const uint8_t *data);
68
69 public:
76
83
88 void listenCanBus();
89
95
100 void updateJSONProcedure();
101};
102
Class that handles message listening over a SocketCAN interface.
Definition: can_listener.h:46
pthread_t m_listenCanBusId
Definition: can_listener.h:56
~CanListener()
Destructs a CanListener object.
Definition: can_listener.cc:32
int m_rawCanSocket
Definition: can_listener.h:59
const std::string CAN_JSON_NAME
Definition: can_listener.h:49
const std::string CAN_INTERFACE_NAME
Definition: can_listener.h:48
void updateJSONProcedure()
Thread procedure for updating the global JSON object.
Definition: can_listener.cc:79
static const constexpr unsigned int UPDATE_CAN_JSON_PERIOD_MS
Definition: can_listener.h:51
void listenCanBusProcedure()
Thread procedure for listening to the CAN bus.
Definition: can_listener.cc:36
void canMessageHandler(uint32_t id, const uint8_t *data)
Handles receiving new CAN messages.
Definition: can_message_handler.cc:788
pthread_t m_updateJSONId
Definition: can_listener.h:57
CanListener()
Constructs a CanListener object.
Definition: can_listener.cc:26
std::unordered_map< std::string, nlohmann::json > m_canInfo
Definition: can_listener.h:53
void listenCanBus()
Initiate the CAN Bus listener on a Raw SocketCAN port.
Definition: can_listener.cc:113
pthread_mutex_t m_mutex
Definition: can_listener.h:55