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
65typedef struct {
68 uint16_t num_packets;
69 uint32_t datagram_id;
70 uint32_t total_length;
71 uint32_t datagram_crc32;
72 uint32_t packet_crc32;
74
78typedef struct {
80 uint8_t data[FOTA_MAX_DATAGRAM_SIZE];
81 bool packet_received[FOTA_MAX_PACKETS_PER_DATAGRAM];
85
95FotaError fota_datagram_init(FotaDatagram *datagram, FotaDatagramType type, uint32_t datagram_id, uint8_t *data, uint32_t length);
96
105FotaError fota_datagram_to_packets(FotaDatagram *datagram, FotaPacket *packets, uint16_t *num_packets, uint16_t max_packets);
106
114
122
130
137
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:65
uint32_t datagram_id
Definition: fota_datagram.h:69
uint32_t datagram_crc32
Definition: fota_datagram.h:71
uint8_t target_node_id
Definition: fota_datagram.h:66
uint32_t packet_crc32
Definition: fota_datagram.h:72
uint32_t total_length
Definition: fota_datagram.h:70
uint16_t num_packets
Definition: fota_datagram.h:68
FotaDatagramType type
Definition: fota_datagram.h:67
Structure representing datagram.
Definition: fota_datagram.h:78
uint16_t packets_received
Definition: fota_datagram.h:82
bool is_complete
Definition: fota_datagram.h:83
FotaDatagramHeaderPacketPayload header
Definition: fota_datagram.h:79
FOTA Packet structure.
Definition: fota_packet.h:69