@@ -44,6 +44,7 @@ class SnapProcessor {
44
44
resizeData ();
45
45
}
46
46
header_received = false ;
47
+ loop_status = LoopStart;
47
48
48
49
return result;
49
50
}
@@ -70,7 +71,12 @@ class SnapProcessor {
70
71
void setStartTask (bool flag) { http_task_start = flag; }
71
72
72
73
// / Call via SnapClient in Arduino Loop!
73
- virtual void doLoop () { processLoopStep (); }
74
+ virtual void doLoop () {
75
+ if (is_fast_loop)
76
+ processLoopStepFast ();
77
+ else
78
+ processLoopStep ();
79
+ }
74
80
75
81
// / Defines the output class
76
82
void setOutput (AudioOutput &output) { p_snap_output->setOutput (output); }
@@ -96,6 +102,11 @@ class SnapProcessor {
96
102
p_snap_output->setAudioInfo (info);
97
103
}
98
104
105
+ // Select loop processing with minimum delays
106
+ void setFastLoop (bool flag){
107
+ is_fast_loop = flag;
108
+ }
109
+
99
110
protected:
100
111
const char *TAG = " SnapProcessor" ;
101
112
// WiFiClient default_client;
@@ -124,6 +135,53 @@ class SnapProcessor {
124
135
bool header_received = false ;
125
136
bool is_time_set = false ;
126
137
SnapTime &snap_time = SnapTime::instance();
138
+ bool is_fast_loop = false ;
139
+ enum loop_status_enum { LoopStart, LoopStep, LoopEnd };
140
+ loop_status_enum loop_status = LoopStart;
141
+
142
+ bool processLoopStepFast () {
143
+ switch (loop_status) {
144
+ case LoopStart: {
145
+ if (connectClient ()) {
146
+ ESP_LOGI (TAG, " ... connected" );
147
+ } else {
148
+ delay (10 );
149
+ return true ;
150
+ }
151
+
152
+ now = snap_time.time ();
153
+ if (!writeHallo ()) {
154
+ ESP_LOGI (TAG, " writeHallo" );
155
+ return false ;
156
+ }
157
+ loop_status = LoopStep;
158
+ return true ;
159
+ }
160
+
161
+ case LoopStep: {
162
+ if (!processMessageLoop ()) {
163
+ loop_status = LoopEnd;
164
+ }
165
+ // some additional processing while we wait for data
166
+ processExt ();
167
+ // logHeap();
168
+ checkHeap ();
169
+ return true ;
170
+ }
171
+
172
+ case LoopEnd: {
173
+ loop_status = LoopStart;
174
+ if (id_counter % 100 == 0 ) {
175
+ logHeap ();
176
+ }
177
+ // For rtos, give audio output some space
178
+ delay (1 );
179
+ return true ;
180
+ }
181
+ }
182
+ // we should not get here
183
+ return false ;
184
+ }
127
185
128
186
bool processLoopStep () {
129
187
if (connectClient ()) {
0 commit comments