QueueManager & Master: Base for queues.

This commit is contained in:
RedHawk
2023-04-25 23:57:18 +03:00
parent d589a8734d
commit 98e9e11355
5 changed files with 81 additions and 4 deletions

View File

@@ -0,0 +1,32 @@
/*
* QueueManager.cpp
*
* Created on: 24 Apr 2023
* Author: tylen
*/
#include "ThreadCommon.h"
ThreadCommon::QueueManager::QueueManager() {}
bool ThreadCommon::QueueManager::createQueue(size_t queue_length, size_t item_size, Queue_id qid)
{
QueueHandle_t queue_to_create;
if ((queue_to_create = xQueueCreate(queue_length, item_size)))
{
queues.insert({qid, queue_to_create});
return true;
}
return false;
}
QueueHandle_t ThreadCommon::QueueManager::getQueue(Queue_id qid)
{
const auto pos = queues.find(qid);
if (pos == queues.end())
return nullptr;
return pos->second;
//return queues.at(qid);
}

View File

@@ -11,6 +11,7 @@
#include "board.h"
#include "FreeRTOS.h"
#include <string>
#include <map>
#include "queue.h"
#include "task.h"
#include <assert.h>
@@ -19,6 +20,7 @@ namespace ThreadCommon
{
typedef enum EventType
{
Null,
Rotary,
Temperature,
Manager
@@ -61,12 +63,31 @@ namespace ThreadCommon
private:
};
class QueueManager
{
public:
enum Queue_id {
master_event_all,
relay_event_master,
manager_event_master,
ui_event_manager
};
QueueManager();
~QueueManager() = default;
bool createQueue(size_t queue_length, size_t item_size, Queue_id qid);
QueueHandle_t getQueue(Queue_id qid);
private:
std::map <Queue_id, QueueHandle_t> queues;
};
/* global variables */
/* 'receiver'_'what'_'sender'_q */
/*
extern QueueHandle_t master_event_all_q;
extern QueueHandle_t relay_event_master_q;
extern QueueHandle_t manager_event_master_q;
extern QueueHandle_t ui_event_manager_q;
*/
}
#endif /*__THREAD_COMMON_H_*/