Midnight Sun Firmware
Loading...
Searching...
No Matches
can_hw.h
1#pragma once
2
3/************************************************************************************************
4 * @file can_hw.h
5 *
6 * @brief Header file for CAN HW Interface
7 *
8 * @date 2024-11-03
9 * @author Midnight Sun Team #24 - MSXVI
10 ************************************************************************************************/
11
12/* Standard library Headers */
13#include <stdbool.h>
14#include <stddef.h>
15#include <stdint.h>
16
17/* Inter-component Headers */
18#include "gpio.h"
19#include "status.h"
20
21/* Intra-component Headers */
22#include "can_queue.h"
23
30#ifdef CAN_HW_DEV_USE_CAN0
31#define CAN_HW_DEV_INTERFACE "can0"
32#else
33#define CAN_HW_DEV_INTERFACE "vcan0"
34#endif
35
36typedef StatusCode (*CanRxAllCallback)(CanMessage *msg);
37
39typedef enum {
44
57typedef enum {
64
73typedef struct CanSettings {
74 uint16_t device_id;
78 bool loopback;
79 bool silent;
80 CanRxAllCallback can_rx_all_cb;
82
91StatusCode can_hw_init(const CanQueue* rx_queue, const CanSettings *settings);
92
103StatusCode can_hw_add_filter_in(uint32_t mask, uint32_t filter, bool extended);
104
112
123StatusCode can_hw_transmit(uint32_t id, bool extended, const uint8_t *data, uint8_t len);
124
134bool can_hw_receive(uint32_t *id, bool *extended, uint64_t *data, uint8_t *len);
135
StatusCode can_hw_add_filter_in(uint32_t mask, uint32_t filter, bool extended)
Sets a filter on the CAN interface.
Definition: can_hw.c:157
CanHwBusStatus can_hw_bus_status(void)
Fetches the CAN bus status.
Definition: can_hw.c:177
StatusCode can_hw_transmit(uint32_t id, bool extended, const uint8_t *data, uint8_t len)
Transmits CAN data on the bus.
Definition: can_hw.c:189
StatusCode can_hw_init(const CanQueue *rx_queue, const CanSettings *settings)
Initialize the CAN interface.
Definition: can_hw.c:92
bool can_hw_receive(uint32_t *id, bool *extended, uint64_t *data, uint8_t *len)
Receives CAN data from the bus.
Definition: can_hw.c:234
CanHwBusStatus
CAN Bus status flags.
Definition: can_hw.h:39
CanHwBitrate
Selection for the supported CAN Bitrates.
Definition: can_hw.h:57
@ CAN_HW_BUS_STATUS_OK
Definition: can_hw.h:40
@ CAN_HW_BUS_STATUS_ERROR
Definition: can_hw.h:41
@ CAN_HW_BUS_STATUS_OFF
Definition: can_hw.h:42
@ CAN_HW_BITRATE_500KBPS
Definition: can_hw.h:60
@ CAN_HW_BITRATE_1000KBPS
Definition: can_hw.h:61
@ CAN_HW_BITRATE_125KBPS
Definition: can_hw.h:58
@ CAN_HW_BITRATE_250KBPS
Definition: can_hw.h:59
@ NUM_CAN_HW_BITRATES
Definition: can_hw.h:62
StatusCode
StatusCodes for various errors.
Definition: status.h:27
CAN message structure.
Definition: can_msg.h:56
CAN queue data structure to store received CAN messages.
Definition: can_queue.h:34
CAN Settings.
Definition: bootloader_can.h:66
bool loopback
Definition: bootloader_can.h:69
CanHwBitrate bitrate
Definition: can_hw.h:75
GpioAddress rx
Definition: can_hw.h:77
bool silent
Definition: bootloader_can.h:70
uint16_t device_id
Definition: bootloader_can.h:67
CanRxAllCallback can_rx_all_cb
Definition: can_hw.h:80
GpioAddress tx
Definition: can_hw.h:76
Port and pin data.
Definition: network.h:62