Midnight Sun Firmware
Loading...
Searching...
No Matches
bootloader_can_datagram.h
1#pragma once
2
3/************************************************************************************************
4 * @file bootloader_can_datagram.h
5 *
6 * @brief Header file for the CAN datagram in the bootloader
7 *
8 * @date 2025-01-08
9 * @author Midnight Sun Team #24 - MSXVI
10 ************************************************************************************************/
11
12/* Standard library Headers */
13#include <stdbool.h>
14#include <stdint.h>
15
16/* Inter-component Headers */
17
18/* Intra-component Headers */
19#include "bootloader_can.h"
20#include "bootloader_error.h"
21
29#define ACK 0U
30
32#define NACK 1U
33
35#define DGRAM_MAX_MSG_SIZE 8
36
40typedef enum {
50
54typedef struct {
60 union {
64 struct {
65 uint16_t node_ids;
66 uint32_t data_len;
67 } start;
68
72 struct {
73 uint16_t sequence_num;
74 uint32_t crc32;
75 } sequencing;
76
80 struct {
81 uint8_t *data;
82 } data;
83
87 struct {
88 uint16_t node_ids;
89 } jump_app;
90
94 struct {
95 uint8_t ack_status;
97 } ack;
98
102 struct {
103 uint16_t node_ids;
104 uint16_t req : 4 , data_len : 12;
105 uint32_t crc32;
106 } ping;
107 } payload;
109
118
124void send_ack_datagram(bool ack, BootloaderError error);
125
BootloaderDatagram deserialize_datagram(Boot_CanMessage *msg, uint16_t *target_nodes)
Deserialize an incoming CAN message.
void send_ack_datagram(bool ack, BootloaderError error)
Send Bootloader ACK/NACK message over CAN.
Definition: bootloader_can_datagram.c:60
BootloaderCanID
Bootloader reserved CAN arbitration IDs.
Definition: bootloader_can_datagram.h:40
BootloaderError
Bootloader error definitions.
Definition: bootloader_error.h:28
@ BOOTLOADER_CAN_JUMP_BOOTLOADER
Definition: bootloader_can_datagram.h:46
@ BOOTLOADER_CAN_FLASH_ID
Definition: bootloader_can_datagram.h:42
@ BOOTLOADER_CAN_PING_METADATA_ID
Definition: bootloader_can_datagram.h:47
@ BOOTLOADER_CAN_JUMP_APPLICATION_ID
Definition: bootloader_can_datagram.h:43
@ BOOTLOADER_CAN_PING_DATA_ID
Definition: bootloader_can_datagram.h:48
@ BOOTLOADER_CAN_SEQUENCING_ID
Definition: bootloader_can_datagram.h:41
@ BOOTLOADER_CAN_ACK_ID
Definition: bootloader_can_datagram.h:44
@ BOOTLOADER_CAN_START_ID
Definition: bootloader_can_datagram.h:45
CAN message structure.
Definition: bootloader_can.h:80
Datagram message definition.
Definition: bootloader_can_datagram.h:54
uint32_t data_len
Definition: bootloader_can_datagram.h:66
uint32_t crc32
Definition: bootloader_can_datagram.h:74
uint16_t sequence_num
Definition: bootloader_can_datagram.h:73
uint16_t bootloader_error
Definition: bootloader_can_datagram.h:96
uint8_t ack_status
Definition: bootloader_can_datagram.h:95
uint8_t * data
Definition: bootloader_can_datagram.h:81
uint16_t node_ids
Definition: bootloader_can_datagram.h:65
uint8_t datagram_type_id
Definition: bootloader_can_datagram.h:55