25#ifndef PW_TRACE_GET_TIME_DELTA
31#include "pw_status/status.h"
32#include "pw_tokenizer/tokenize.h"
33#include "pw_trace_tokenized/config.h"
34#include "pw_trace_tokenized/internal/trace_tokenized_internal.h"
40using EventType = pw_trace_EventType;
45template <
size_t kSize>
63 const void* data_buffer,
71 event_queue_[head_].trace_token = trace_token;
72 event_queue_[head_].event_type = event_type;
73 event_queue_[head_].module = module;
74 event_queue_[head_].trace_id = trace_id;
75 event_queue_[head_].flags = flags;
76 event_queue_[head_].data_size = data_size;
77 for (
size_t i = 0; i < data_size; i++) {
78 event_queue_[head_].data_buffer[i] =
79 reinterpret_cast<const std::byte*
>(data_buffer)[i];
81 head_ = (head_ + 1) % kSize;
86 const volatile QueueEventBlock* PeekFront()
const {
90 return &event_queue_[tail_];
95 tail_ = (tail_ + 1) % kSize;
96 is_empty_ = (tail_ == head_);
106 bool IsEmpty()
const {
return is_empty_; }
107 bool IsFull()
const {
return !is_empty_ && (head_ == tail_); }
110 std::array<volatile QueueEventBlock, kSize> event_queue_;
111 volatile size_t head_ = 0;
112 volatile size_t tail_ = 0;
113 volatile bool is_empty_ =
127 void Enable(
bool enable) {
128 if (enable != enabled_ && enable) {
129 event_queue_.Clear();
130 last_trace_time_ = 0;
134 bool IsEnabled()
const {
return enabled_; }
136 void HandleTraceEvent(uint32_t trace_token,
137 EventType event_type,
141 const void* data_buffer,
147 bool enabled_ =
false;
151 void HandleNextItemInQueue(
152 const volatile TraceQueue::QueueEventBlock* event_block);
168#define PW_TRACE_SET_ENABLED(enabled) pw_trace_Enable(enabled)
211#define PW_TRACE_REF(event_type, module, label, flags, group) \
212 PW_TOKENIZE_STRING_DOMAIN("trace", \
213 PW_STRINGIFY(event_type) "|" PW_STRINGIFY( \
214 flags) "|" module "|" group "|" label)
216#define PW_TRACE_REF_DATA(event_type, module, label, flags, group, type) \
217 PW_TOKENIZE_STRING_DOMAIN( \
219 PW_STRINGIFY(event_type) "|" PW_STRINGIFY(flags) "|" module "|" group \
static constexpr Status InvalidArgument()
Definition: status.h:164
static constexpr Status ResourceExhausted()
Definition: status.h:230
Definition: trace_callback.h:135
Definition: trace_tokenized.h:124
Definition: trace_tokenized.h:46
constexpr Status OkStatus()
Definition: status.h:450
#define PW_TRACE_TIME_TYPE
The type for trace time.
Definition: config.h:37
#define PW_TRACE_BUFFER_MAX_DATA_SIZE_BYTES
Definition: config.h:93
TokenizedTracer & GetTokenizedTracer()
The Pigweed namespace.
Definition: alignment.h:27
pw::InlineBasicString and pw::InlineString are safer alternatives to std::basic_string and std::strin...
Definition: trace_tokenized.h:48