mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-27 15:35:10 +00:00
c7568a8db0
Instead of overloading getOutboundCount() with a magic sentinel value, add a dedicated getOutboundTotal() method to the PacketManager interface that returns the total queue size without time filtering. This eliminates the fragile convention that caused the regression and makes the two operations — time-filtered count vs total count — explicitly separate in the API.
38 lines
1.2 KiB
C++
38 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <Dispatcher.h>
|
|
|
|
class PacketQueue {
|
|
mesh::Packet** _table;
|
|
uint8_t* _pri_table;
|
|
uint32_t* _schedule_table;
|
|
int _size, _num;
|
|
|
|
public:
|
|
PacketQueue(int max_entries);
|
|
mesh::Packet* get(uint32_t now);
|
|
bool add(mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for);
|
|
int count() const { return _num; }
|
|
int countBefore(uint32_t now) const;
|
|
mesh::Packet* itemAt(int i) const { return _table[i]; }
|
|
mesh::Packet* removeByIdx(int i);
|
|
};
|
|
|
|
class StaticPoolPacketManager : public mesh::PacketManager {
|
|
PacketQueue unused, send_queue, rx_queue;
|
|
|
|
public:
|
|
StaticPoolPacketManager(int pool_size);
|
|
|
|
mesh::Packet* allocNew() override;
|
|
void free(mesh::Packet* packet) override;
|
|
void queueOutbound(mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for) override;
|
|
mesh::Packet* getNextOutbound(uint32_t now) override;
|
|
int getOutboundCount(uint32_t now) const override;
|
|
int getOutboundTotal() const override;
|
|
int getFreeCount() const override;
|
|
mesh::Packet* getOutboundByIdx(int i) override;
|
|
mesh::Packet* removeOutboundByIdx(int i) override;
|
|
void queueInbound(mesh::Packet* packet, uint32_t scheduled_for) override;
|
|
mesh::Packet* getNextInbound(uint32_t now) override;
|
|
}; |