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
36#define DGRAM_MAX_MSG_SIZE 8
37
41typedef enum {
51
55typedef struct {
61 union {
65 struct {
66 uint16_t node_ids;
67 uint32_t data_len;
68 } start;
69
73 struct {
74 uint16_t sequence_num;
75 uint32_t crc32;
76 } sequencing;
77
81 struct {
82 uint8_t *data;
83 } data;
84
88 struct {
89 uint16_t node_ids;
90 } jump_app;
91
95 struct {
96 uint8_t ack_status;
98 } ack;
99
103 struct {
104 uint16_t node_ids;
105 uint16_t req : 4 , data_len : 12;
106 uint32_t crc32;
107 } ping;
108 } payload;
110
119
125void send_ack_datagram(bool ack, BootloaderError error);
126
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:41
BootloaderError
Bootloader error definitions.
Definition: bootloader_error.h:28
@ BOOTLOADER_CAN_JUMP_BOOTLOADER
Definition: bootloader_can_datagram.h:47
@ BOOTLOADER_CAN_FLASH_ID
Definition: bootloader_can_datagram.h:43
@ BOOTLOADER_CAN_PING_METADATA_ID
Definition: bootloader_can_datagram.h:48
@ BOOTLOADER_CAN_JUMP_APPLICATION_ID
Definition: bootloader_can_datagram.h:44
@ BOOTLOADER_CAN_PING_DATA_ID
Definition: bootloader_can_datagram.h:49
@ BOOTLOADER_CAN_SEQUENCING_ID
Definition: bootloader_can_datagram.h:42
@ BOOTLOADER_CAN_ACK_ID
Definition: bootloader_can_datagram.h:45
@ BOOTLOADER_CAN_START_ID
Definition: bootloader_can_datagram.h:46
CAN message structure.
Definition: bootloader_can.h:80
Datagram message definition.
Definition: bootloader_can_datagram.h:55
uint32_t data_len
Definition: bootloader_can_datagram.h:67
uint32_t crc32
Definition: bootloader_can_datagram.h:75
uint16_t sequence_num
Definition: bootloader_can_datagram.h:74
uint16_t bootloader_error
Definition: bootloader_can_datagram.h:97
uint8_t ack_status
Definition: bootloader_can_datagram.h:96
uint8_t * data
Definition: bootloader_can_datagram.h:82
uint16_t node_ids
Definition: bootloader_can_datagram.h:66
uint8_t datagram_type_id
Definition: bootloader_can_datagram.h:56