Static packet pool manager. More...
#include "spp/core/packet.h"#include "spp/core/returnTypes.h"#include "spp/core/types.h"#include "spp/util/macros.h"Go to the source code of this file.
Data Structures | |
| struct | SPP_Databank_t |
| Internal databank control structure. More... | |
Functions | |
| SPP_RetVal_t | SPP_SERVICES_DATABANK_init (void) |
| Initialise the packet pool. | |
| SPP_Packet_t * | SPP_SERVICES_DATABANK_getPacket (void) |
| Acquire a free packet from the pool. | |
| SPP_RetVal_t | SPP_SERVICES_DATABANK_returnPacket (SPP_Packet_t *p_packet) |
| Return a packet to the pool after processing. | |
| spp_uint32_t | SPP_SERVICES_DATABANK_freeCount (void) |
| Return the number of free packets currently available. | |
| SPP_RetVal_t | SPP_SERVICES_DATABANK_packetData (SPP_Packet_t *p_packet, spp_uint16_t apid, spp_uint16_t seq, const void *p_data, spp_uint16_t dataLen) |
| Fill a packet with data and compute its CRC. | |
Static packet pool manager.
The databank maintains a fixed pool of SPP_Packet_t objects. Producers call SPP_SERVICES_DATABANK_getPacket() to acquire a free packet, fill it, and pass it to the db_flow FIFO. Consumers return packets via SPP_SERVICES_DATABANK_returnPacket() after processing.
The pool size is controlled by K_SPP_DATABANK_SIZE (default 5).
Naming conventions used in this file:
Definition in file databank.h.
| SPP_RetVal_t SPP_SERVICES_DATABANK_init | ( | void | ) |
Initialise the packet pool.
Zeroes all packets and rebuilds the free stack. Safe to call multiple times; subsequent calls are no-ops and return K_SPP_ERROR_ALREADY_INITIALIZED.
Definition at line 33 of file databank.c.
References SPP_Databank_t::freeCount, K_SPP_DATABANK_SIZE, K_SPP_ERROR_ALREADY_INITIALIZED, K_SPP_OK, SPP_Databank_t::p_freePackets, s_databank, s_initialized, s_packets, and SPP_SERVICES_DATABANK_init().
Referenced by SPP_CORE_init(), and SPP_SERVICES_DATABANK_init().
| SPP_Packet_t * SPP_SERVICES_DATABANK_getPacket | ( | void | ) |
Acquire a free packet from the pool.
The returned packet is removed from the free list until returned via SPP_SERVICES_DATABANK_returnPacket().
Definition at line 53 of file databank.c.
References SPP_Databank_t::freeCount, SPP_Databank_t::p_freePackets, s_databank, s_initialized, SPP_Packet_t, and SPP_SERVICES_DATABANK_getPacket().
Referenced by action_emitTelemetry(), SPP_SERVICES_BMP390_acquireData(), SPP_SERVICES_BMP390_DUMMY_acquireData(), SPP_SERVICES_DATABANK_getPacket(), and SPP_SERVICES_ICM20948_acquireData().
| SPP_RetVal_t SPP_SERVICES_DATABANK_returnPacket | ( | SPP_Packet_t * | p_packet | ) |
Return a packet to the pool after processing.
| [in] | p_packet | Pointer previously returned by SPP_SERVICES_DATABANK_getPacket(). |
p_packet is NULL. p_packet is not a valid pool address (double-return guard). Definition at line 64 of file databank.c.
References SPP_Databank_t::freeCount, K_SPP_DATABANK_SIZE, K_SPP_ERROR, K_SPP_ERROR_ALREADY_INITIALIZED, K_SPP_ERROR_NULL_POINTER, K_SPP_OK, SPP_Databank_t::p_freePackets, s_databank, s_packets, SPP_Packet_t, and SPP_SERVICES_DATABANK_returnPacket().
Referenced by SPP_SERVICES_BMP390_acquireData(), SPP_SERVICES_BMP390_DUMMY_acquireData(), SPP_SERVICES_DATABANK_returnPacket(), SPP_SERVICES_ICM20948_acquireData(), and SPP_SERVICES_PUBSUB_publish().
| spp_uint32_t SPP_SERVICES_DATABANK_freeCount | ( | void | ) |
Return the number of free packets currently available.
Definition at line 96 of file databank.c.
References SPP_Databank_t::freeCount, s_databank, and SPP_SERVICES_DATABANK_freeCount().
Referenced by SPP_SERVICES_DATABANK_freeCount().
| SPP_RetVal_t SPP_SERVICES_DATABANK_packetData | ( | SPP_Packet_t * | p_packet, |
| spp_uint16_t | apid, | ||
| spp_uint16_t | seq, | ||
| const void * | p_data, | ||
| spp_uint16_t | dataLen ) |
Fill a packet with data and compute its CRC.
Zeroes the entire packet (including any struct padding), writes all header fields, copies p_data into the payload, and computes a CRC-16/CCITT checksum over every byte of the packet except the crc field itself.
The timestamp is captured automatically via SPP_HAL_TIME_getTimeMs().
| [out] | p_packet | Packet previously acquired from SPP_SERVICES_DATABANK_getPacket(). |
| [in] | apid | Application Process Identifier. |
| [in] | seq | Packet sequence counter (maintained by the caller). |
| [in] | p_data | Pointer to the payload data to copy. |
| [in] | dataLen | Number of bytes to copy (must be ≤ K_SPP_PKT_PAYLOAD_MAX). |
p_packet or p_data is NULL. dataLen exceeds K_SPP_PKT_PAYLOAD_MAX. Definition at line 117 of file databank.c.
References K_SPP_ERROR_INVALID_PARAMETER, K_SPP_ERROR_NULL_POINTER, K_SPP_OK, K_SPP_PKT_PAYLOAD_MAX, K_SPP_PKT_VERSION, packetCrc(), SPP_HAL_TIME_getTimeMs(), SPP_Packet_t, and SPP_SERVICES_DATABANK_packetData().
Referenced by action_emitTelemetry(), SPP_SERVICES_BMP390_acquireData(), SPP_SERVICES_BMP390_DUMMY_acquireData(), SPP_SERVICES_DATABANK_packetData(), and SPP_SERVICES_ICM20948_acquireData().