|
|
@ -0,0 +1,42 @@ |
|
|
|
#pragma once
|
|
|
|
#include "cmsis_os.h"
|
|
|
|
#include "basic/zlog.h"
|
|
|
|
namespace iflytop { |
|
|
|
template <typename T> |
|
|
|
class ZQueue { |
|
|
|
private: |
|
|
|
int32_t m_num = 0; |
|
|
|
int32_t m_eachsize = 0; |
|
|
|
QueueHandle_t xQueue; |
|
|
|
|
|
|
|
public: |
|
|
|
void initialize(int32_t num, int32_t eachsize) { |
|
|
|
xQueue = xQueueCreate(num, eachsize); |
|
|
|
ZASSERT(xQueue); |
|
|
|
} |
|
|
|
void clear() { xQueueReset(xQueue); } |
|
|
|
|
|
|
|
bool send(T *data, int32_t overtime) { return _send((uint8_t *)data, sizeof(T), overtime); } |
|
|
|
bool receive(T *data, int32_t overtime) { return _receive((uint8_t *)data, overtime); } |
|
|
|
|
|
|
|
bool isFull() { |
|
|
|
BaseType_t xStatus = xQueueIsQueueFullFromISR(xQueue); |
|
|
|
return xStatus == pdTRUE; |
|
|
|
} |
|
|
|
bool isEmpty() { |
|
|
|
BaseType_t xStatus = xQueueIsQueueEmptyFromISR(xQueue); |
|
|
|
return xStatus == pdTRUE; |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
bool _send(uint8_t *data, int32_t len, int32_t overtime) { |
|
|
|
BaseType_t xStatus = xQueueSend(xQueue, data, overtime); |
|
|
|
return xStatus == pdPASS; |
|
|
|
} |
|
|
|
bool _receive(uint8_t *data, int32_t overtime) { |
|
|
|
BaseType_t xStatus = xQueueReceive(xQueue, data, overtime); |
|
|
|
return xStatus == pdPASS; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
} // namespace iflytop
|