Midnight Sun Firmware
Loading...
Searching...
No Matches
packet_manger.h
1#pragma once
2
3/************************************************************************************************
4 * @file packet_manager.h
5 *
6 * @brief Packet manager class for firmware over the air (FOTA) updates
7 *
8 * @date 2025-03-16
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_datagram.h"
20#include "fota_encryption.h"
21#include "fota_error.h"
22#include "fota_packet.h"
23#include "network_buffer.h"
24
34typedef enum {
41
42/* Maximum number of datagrams that can be processed simultaneously */
43#define FOTA_MAX_ACTIVE_DATAGRAMS 2U
44
48typedef struct {
49 /* Network buffer for raw data */
50 NetworkBuffer network_buffer;
51
52 /* Packet reception */
53 PacketReceiverState rx_state;
54 uint16_t bytes_received;
55 uint8_t rx_packet_buffer[sizeof(FotaPacket)];
56 uint8_t tx_packet_buffer[sizeof(FotaPacket)];
57 FotaPacket current_packet;
58
59 /* Datagram handling */
60 FotaDatagram active_datagrams[FOTA_MAX_ACTIVE_DATAGRAMS];
61 bool datagram_active[FOTA_MAX_ACTIVE_DATAGRAMS];
62
63 /* Callback for completed datagrams */
64 void (*datagram_complete_callback)(FotaDatagram *datagram);
66
74FotaError packet_manager_init(PacketManager *manager, UartSettings *uart2_settings, void (*callback)(FotaDatagram *datagram));
75
85
93FotaError packet_manager_send_datagram(PacketManager *manager, FotaDatagram *datagram, FotaError (*send_func)(int8_t *data, uint32_t length));
94
104FotaError packet_manager_create_datagram(PacketManager *manager, FotaDatagramType type, uint8_t *data, uint32_t length, FotaDatagram *datagram);
105
113FotaError packet_manager_get_datagram(PacketManager *manager, uint32_t datagram_id, FotaDatagram **datagram);
114
121FotaError packet_manager_free_datagram(PacketManager *manager, uint32_t datagram_id);
122
FotaDatagramType
Datagram types corresponding to different FOTA operations.
Definition: fota_datagram.h:36
PacketReceiverState
State machine states for packet receiving.
Definition: packet_manger.h:34
FotaError packet_manager_send_datagram(PacketManager *manager, FotaDatagram *datagram, FotaError(*send_func)(int8_t *data, uint32_t length))
Send a datagram by fragmenting it into packets.
Definition: packet_manager.c:194
FotaError packet_manager_free_datagram(PacketManager *manager, uint32_t datagram_id)
Free a datagram slot.
Definition: packet_manager.c:269
FotaError packet_manager_create_datagram(PacketManager *manager, FotaDatagramType type, uint8_t *data, uint32_t length, FotaDatagram *datagram)
Create a new datagram for sending.
Definition: packet_manager.c:227
FotaError packet_manager_init(PacketManager *manager, UartSettings *uart2_settings, void(*callback)(FotaDatagram *datagram))
Initialize the packet manager.
Definition: packet_manager.c:20
FotaError packet_manager_get_datagram(PacketManager *manager, uint32_t datagram_id, FotaDatagram **datagram)
Get a pointer to a completed datagram.
Definition: packet_manager.c:253
FotaError packet_manager_process(PacketManager *manager)
Process received data from the network buffer.
Definition: packet_manager.c:56
FotaError
FOTA Error code definitions.
Definition: fota_error.h:27
@ PKT_STATE_WAITING_SOF
Definition: packet_manger.h:35
@ PKT_STATE_READING_HEADER
Definition: packet_manger.h:36
@ PKT_STATE_READING_EOF
Definition: packet_manger.h:39
@ PKT_STATE_READING_CRC
Definition: packet_manger.h:38
@ PKT_STATE_READING_PAYLOAD
Definition: packet_manger.h:37
Structure representing datagram.
Definition: fota_datagram.h:58
FOTA Packet structure.
Definition: fota_packet.h:68
struct containing details of circular buffer
Definition: network_buffer.h:36
Packet manager context structure.
Definition: packet_manger.h:48
UART Settings.
Definition: network.h:67