Midnight Sun Firmware
Loading...
Searching...
No Matches
fota_datagram.h
1#pragma once
2
3/************************************************************************************************
4 * @file fota_datagram.h
5 *
6 * @brief Fota Datagram Header File
7 *
8 * @date 2025-04-30
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 "fota_packet.h"
20
28#define FOTA_MAX_DATAGRAM_SIZE (16U * FOTA_PACKET_PAYLOAD_SIZE)
29
31#define FOTA_MAX_PACKETS_PER_DATAGRAM ((FOTA_MAX_DATAGRAM_SIZE / FOTA_PACKET_PAYLOAD_SIZE) + 1U)
32
34#define FOTA_DATAGRAM_HEADER_PAYLOAD_SIZE 10U
35
39typedef enum FotaDatagramType {
44 FOTA_DATAGRAM_TYPE_ERROR
46
69typedef struct {
72 uint16_t num_packets;
73 uint32_t datagram_id;
74 uint32_t total_length;
75 uint32_t datagram_crc32;
76 uint32_t packet_crc32;
78
82typedef struct {
84 uint8_t data[FOTA_MAX_DATAGRAM_SIZE];
85 bool packet_received[FOTA_MAX_PACKETS_PER_DATAGRAM];
89
99FotaError fota_datagram_init(FotaDatagram *datagram, FotaDatagramType type, uint32_t datagram_id, uint8_t *data, uint32_t length);
100
109FotaError fota_datagram_to_packets(FotaDatagram *datagram, FotaPacket *packets, uint16_t *num_packets, uint16_t max_packets);
110
118
126
134
141
FotaDatagramType
Datagram types corresponding to different FOTA operations.
Definition: fota_datagram.h:39
bool fota_datagram_is_complete(FotaDatagram *datagram)
Check if a datagram has been completely received.
Definition: fota_datagram.c:161
FotaError fota_datagram_to_packets(FotaDatagram *datagram, FotaPacket *packets, uint16_t *num_packets, uint16_t max_packets)
Fragment a datagram into packets for transmission.
Definition: fota_datagram.c:55
#define FOTA_MAX_DATAGRAM_SIZE
Maximum supported datagram size (2KB)
Definition: fota_datagram.h:28
FotaError fota_datagram_verify(FotaDatagram *datagram)
Verify the integrity of a complete datagram.
Definition: fota_datagram.c:170
FotaError fota_datagram_process_data_packet(FotaDatagram *datagram, FotaPacket *packet)
Process a received packet and incorporate it into a datagram.
Definition: fota_datagram.c:109
FotaError fota_datagram_process_header_packet(FotaDatagram *datagram, FotaPacket *packet)
Process a received header packet and incorporate it into a datagram.
Definition: fota_datagram.c:134
FotaError fota_datagram_init(FotaDatagram *datagram, FotaDatagramType type, uint32_t datagram_id, uint8_t *data, uint32_t length)
Initialize a datagram structure.
Definition: fota_datagram.c:26
#define FOTA_MAX_PACKETS_PER_DATAGRAM
Maximum number of packets that can make up a datagram (8 data + 1 Header)
Definition: fota_datagram.h:31
FotaError
FOTA Error code definitions.
Definition: fota_error.h:27
@ FOTA_DATAGRAM_TYPE_FIRMWARE_METADATA
Definition: fota_datagram.h:40
@ FOTA_DATAGRAM_TYPE_ACKNOWLEDGEMENT
Definition: fota_datagram.h:43
@ FOTA_DATAGRAM_TYPE_FIRMWARE_CHUNK
Definition: fota_datagram.h:41
@ FOTA_DATAGRAM_TYPE_JUMP_TO_APP
Definition: fota_datagram.h:42
Structure representing the datagram header (In the payload)
Definition: fota_datagram.h:69
uint32_t datagram_id
Definition: fota_datagram.h:73
uint32_t datagram_crc32
Definition: fota_datagram.h:75
uint8_t target_node_id
Definition: fota_datagram.h:70
uint32_t packet_crc32
Definition: fota_datagram.h:76
uint32_t total_length
Definition: fota_datagram.h:74
uint16_t num_packets
Definition: fota_datagram.h:72
FotaDatagramType type
Definition: fota_datagram.h:71
Structure representing datagram.
Definition: fota_datagram.h:82
uint16_t packets_received
Definition: fota_datagram.h:86
bool is_complete
Definition: fota_datagram.h:87
FotaDatagramHeaderPacketPayload header
Definition: fota_datagram.h:83
FOTA Packet structure.
Definition: fota_packet.h:69