Midnight Sun Firmware
Loading...
Searching...
No Matches
packet_manager.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.h"
24#include "network_buffer.h"
25
33#define FOTA_MAX_ACTIVE_DATAGRAMS 2U
34
35typedef void (*FotaDatagramCompleteCb)(FotaDatagram *datagram);
36
40typedef enum {
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 */
61 bool datagram_active[FOTA_MAX_ACTIVE_DATAGRAMS];
62
63 /* Callback for completed datagrams */
64 FotaDatagramCompleteCb datagram_complete_callback;
66
75FotaError packet_manager_init(PacketManager *manager, UartPort uart, UartSettings *uart_settings, FotaDatagramCompleteCb callback);
76
86
94FotaError packet_manager_send_datagram(PacketManager *manager, FotaDatagram *datagram, FotaError (*send_func)(int8_t *data, uint32_t length));
95
105FotaError packet_manager_create_datagram(PacketManager *manager, FotaDatagramType type, uint8_t *data, uint32_t length, FotaDatagram **datagram);
106
114FotaError packet_manager_get_datagram(PacketManager *manager, uint32_t datagram_id, FotaDatagram **datagram);
115
122FotaError packet_manager_free_datagram(PacketManager *manager, uint32_t datagram_id);
123
UartPort
UART Port selection.
Definition: network.h:30
FotaDatagramType
Datagram types corresponding to different FOTA operations.
Definition: fota_datagram.h:39
PacketReceiverState
State machine states for packet receiving.
Definition: packet_manager.h:40
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:122
FotaError packet_manager_free_datagram(PacketManager *manager, uint32_t datagram_id)
Free a datagram slot.
Definition: packet_manager.c:190
#define FOTA_MAX_ACTIVE_DATAGRAMS
Maximum number of datagrams that can be processed simultaneously.
Definition: packet_manager.h:33
FotaError packet_manager_init(PacketManager *manager, UartPort uart, UartSettings *uart_settings, FotaDatagramCompleteCb callback)
Initialize the packet manager.
Definition: packet_manager.c:23
FotaError packet_manager_get_datagram(PacketManager *manager, uint32_t datagram_id, FotaDatagram **datagram)
Get a pointer to a completed datagram.
Definition: packet_manager.c:174
FotaError packet_manager_process(PacketManager *manager)
Process received data from the network buffer.
Definition: packet_manager.c:44
FotaError
FOTA Error code definitions.
Definition: fota_error.h:27
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:153
@ PKT_STATE_WAITING_SOF
Definition: packet_manager.h:41
@ PKT_STATE_READING_PACKET
Definition: packet_manager.h:42
Structure representing datagram.
Definition: fota_datagram.h:78
FOTA Packet structure.
Definition: fota_packet.h:69
struct containing details of circular buffer
Definition: network_buffer.h:36
Packet manager context structure.
Definition: packet_manager.h:48
UART Settings.
Definition: network.h:67