arduino-audio-tools
Loading...
Searching...
No Matches
src
AudioTools
Concurrency
RTOS
Task.h
Go to the documentation of this file.
1
#pragma once
2
3
#ifdef ESP32
4
#include "freertos/FreeRTOS.h"
5
#include "freertos/task.h"
6
#elif defined(__linux__)
7
#else
8
#include "FreeRTOS.h"
9
#include "task.h"
10
#endif
11
#include <functional>
12
13
namespace
audio_tools
{
14
21
class
Task
{
22
public
:
24
Task
(
const
char
* name,
int
stackSize
,
int
priority
= 1,
int
core = -1) {
25
create
(name,
stackSize
,
priority
, core);
26
}
27
28
Task
() =
default
;
29
~Task
() {
remove
(); }
30
32
bool
create
(
const
char
* name,
int
stackSize
,
int
priority
= 1,
33
int
core = -1) {
34
if
(
xHandle
!= 0)
return
false
;
35
#ifdef ESP32
36
if
(core >= 0)
37
xTaskCreatePinnedToCore
(
task_loop
, name,
stackSize
,
this
,
priority
,
38
&
xHandle
, core);
39
else
40
xTaskCreate
(
task_loop
, name,
stackSize
,
this
,
priority
, &
xHandle
);
41
#else
42
xTaskCreate
(
task_loop
, name,
stackSize
,
this
,
priority
, &
xHandle
);
43
#endif
44
suspend
();
45
return
true
;
46
}
47
49
void
remove
() {
50
if
(
xHandle
!=
nullptr
) {
51
suspend
();
52
vTaskDelete
(
xHandle
);
53
xHandle
=
nullptr
;
54
}
55
}
56
57
bool
begin
(std::function<
void
()> process) {
58
LOGI
(
"staring task"
);
59
loop_code
= process;
60
resume
();
61
return
true
;
62
}
63
65
void
end
() {
suspend
(); }
66
67
void
suspend
() {
vTaskSuspend
(
xHandle
); }
68
69
void
resume
() {
vTaskResume
(
xHandle
); }
70
71
TaskHandle_t
&
getTaskHandle
() {
72
return
xHandle
;
73
}
74
75
void
setReference
(
void
*
r
){
76
ref
=
r
;
77
}
78
79
void
*
getReference
(){
80
return
ref
;
81
}
82
83
#ifdef ESP32
84
int
getCoreID
() {
85
return
xPortGetCoreID
();
86
}
87
#endif
88
89
protected
:
90
TaskHandle_t
xHandle
=
nullptr
;
91
std::function<
void
()>
loop_code
=
nop
;
92
void
*
ref
;
93
94
static
void
nop
() {
delay
(100); }
95
96
static
void
task_loop
(
void
*
arg
) {
97
Task
* self = (
Task
*)
arg
;
98
while
(
true
) {
99
self->
loop_code
();
100
}
101
}
102
};
103
104
}
// namespace audio_tools
105
LOGI
#define LOGI(...)
Definition
AudioLoggerIDF.h:28
audio_tools::Task
FreeRTOS task.
Definition
Task.h:21
audio_tools::Task::xHandle
TaskHandle_t xHandle
Definition
Task.h:90
audio_tools::Task::getReference
void * getReference()
Definition
Task.h:79
audio_tools::Task::create
bool create(const char *name, int stackSize, int priority=1, int core=-1)
If you used the empty constructor, you need to call create!
Definition
Task.h:32
audio_tools::Task::ref
void * ref
Definition
Task.h:92
audio_tools::Task::~Task
~Task()
Definition
Task.h:29
audio_tools::Task::getTaskHandle
TaskHandle_t & getTaskHandle()
Definition
Task.h:71
audio_tools::Task::remove
void remove()
deletes the FreeRTOS task
Definition
Task.h:49
audio_tools::Task::Task
Task()=default
audio_tools::Task::suspend
void suspend()
Definition
Task.h:67
audio_tools::Task::resume
void resume()
Definition
Task.h:69
audio_tools::Task::nop
static void nop()
Definition
Task.h:94
audio_tools::Task::getCoreID
int getCoreID()
Definition
Task.h:84
audio_tools::Task::Task
Task(const char *name, int stackSize, int priority=1, int core=-1)
Defines and creates a FreeRTOS task.
Definition
Task.h:24
audio_tools::Task::task_loop
static void task_loop(void *arg)
Definition
Task.h:96
audio_tools::Task::end
void end()
suspends the task
Definition
Task.h:65
audio_tools::Task::loop_code
std::function< void()> loop_code
Definition
Task.h:91
audio_tools::Task::begin
bool begin(std::function< void()> process)
Definition
Task.h:57
audio_tools::Task::setReference
void setReference(void *r)
Definition
Task.h:75
audio_tools
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition
AudioCodecsBase.h:10
audio_tools::delay
void delay(unsigned long ms)
Definition
Time.h:23
audio_tools::writeData
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition
AudioTypes.h:512
Generated by
1.9.8