@@ -85,6 +85,11 @@ void fileLog(duk_context *ctx, log_level_t level, char *message)
85
85
86
86
void jslog (log_level_t level , const char * msg , ...)
87
87
{
88
+ if (level < (5 - LOG_LOCAL_LEVEL ))
89
+ {
90
+ return ;
91
+ }
92
+
88
93
char * my_string ;
89
94
va_list argp ;
90
95
@@ -115,25 +120,21 @@ void jslog(log_level_t level, const char *msg, ...)
115
120
duk_eval (ctx ); /* -> [ ... func ] */
116
121
duk_push_string (ctx , my_string );
117
122
duk_call (ctx , 1 );
123
+ //clear stack
124
+ duk_pop (ctx );
118
125
}
119
126
else
120
127
{
121
- if (level == DEBUG )
122
- {
123
- ESP_LOGD (tag , "No ctx present: %s" , my_string );
124
- }
125
- else if (level == INFO )
126
- {
127
- ESP_LOGI (tag , "No ctx present: %s" , my_string );
128
- }
129
- else if (level == WARN )
130
- {
131
- ESP_LOGW (tag , "No ctx present: %s" , my_string );
132
- }
133
- else
134
- {
135
- ESP_LOGE (tag , "No ctx present: %s" , my_string );
136
- }
128
+ char * message = malloc (strlen (my_string ) + 1 );
129
+ strcpy (message , my_string );
130
+
131
+ js_event_t event ;
132
+ js_eventlist_t events ;
133
+ events .events_len = 0 ;
134
+
135
+ el_create_event (& event , EL_LOG_EVENT_TYPE , level , message );
136
+ el_add_event (& events , & event );
137
+ el_fire_events (& events );
137
138
}
138
139
free (my_string );
139
140
}
@@ -171,7 +172,7 @@ void IRAM_ATTR el_add_event(js_eventlist_t *events, js_event_t *event)
171
172
{
172
173
if (events -> events_len >= MAX_EVENTS )
173
174
{
174
- jslog ( ERROR , "Event queue full. Max event number : %d => aborting." , MAX_EVENTS );
175
+ ESP_LOGE ( tag , "Event list is full. Max event list size : %d => aborting." , MAX_EVENTS );
175
176
abort ();
176
177
}
177
178
events -> events [events -> events_len ] = * event ;
@@ -182,17 +183,28 @@ void IRAM_ATTR el_fire_events(js_eventlist_t *events)
182
183
{
183
184
if (DISABLE_EVENTS )
184
185
{
185
- jslog ( WARN , "Events are disabled. They will never be fired." );
186
+ ESP_LOGW ( tag , "Events are disabled. They will never be fired." );
186
187
}
187
188
else
188
189
{
189
190
if (events -> events_len > 0 )
190
191
{
191
- jslog ( DEBUG , "Send %d events to queue..." , events -> events_len );
192
+ ESP_LOGD ( tag , "Send %d events to queue..." , events -> events_len );
192
193
int ret = xQueueSendFromISR (el_event_queue , events , NULL );
193
194
if (ret != pdTRUE )
194
195
{
195
- jslog (ERROR , "Event queue is full... is something blocking the event loop?...aborting." );
196
+ ESP_LOGE (tag , "Event queue is full... is something blocking the event loop?...aborting." );
197
+ js_eventlist_t devents ;
198
+ int num = 0 ;
199
+ while (xQueueReceive (el_event_queue , & devents , 0 ))
200
+ {
201
+ for (int i = 0 ; i < devents .events_len ; i ++ )
202
+ {
203
+ ESP_LOGE (tag , "Events num %i, event idx %i, type %i, status %i" , num , i , devents .events [i ].type , devents .events [i ].status );
204
+ }
205
+ num ++ ;
206
+ }
207
+
196
208
abort ();
197
209
}
198
210
}
@@ -401,26 +413,30 @@ static duk_ret_t el_suspend(duk_context *ctx)
401
413
js_eventlist_t events ;
402
414
403
415
jslog (DEBUG , "Waiting for events..." );
404
-
405
- xQueueReceive (el_event_queue , & events , portMAX_DELAY );
406
-
407
- jslog (DEBUG , "Receiving %d events." , events .events_len );
408
-
409
416
int arr_idx = duk_push_array (ctx );
410
- for (int i = 0 ; i < events .events_len ; i ++ )
417
+ int arrsize = 0 ;
418
+ TickType_t timeout = portMAX_DELAY ;
419
+ while (xQueueReceive (el_event_queue , & events , timeout ) == pdTRUE )
411
420
{
412
- duk_idx_t obj_idx = duk_push_object (ctx );
421
+ timeout = 0 ; // set timeout to 0 to not wait in while loop if there are no more events available
422
+ for (int i = 0 ; i < events .events_len ; i ++ )
423
+ {
424
+ duk_idx_t obj_idx = duk_push_object (ctx );
413
425
414
- duk_push_int (ctx , events .events [i ].type );
415
- duk_put_prop_string (ctx , obj_idx , "type" );
416
- duk_push_int (ctx , events .events [i ].status );
417
- duk_put_prop_string (ctx , obj_idx , "status" );
418
- duk_push_int (ctx , (int )events .events [i ].fd );
419
- duk_put_prop_string (ctx , obj_idx , "fd" );
426
+ duk_push_int (ctx , events .events [i ].type );
427
+ duk_put_prop_string (ctx , obj_idx , "type" );
428
+ duk_push_int (ctx , events .events [i ].status );
429
+ duk_put_prop_string (ctx , obj_idx , "status" );
430
+ duk_push_int (ctx , (int )events .events [i ].fd );
431
+ duk_put_prop_string (ctx , obj_idx , "fd" );
420
432
421
- duk_put_prop_index (ctx , arr_idx , i );
433
+ duk_put_prop_index (ctx , arr_idx , arrsize );
434
+ arrsize ++ ;
435
+ }
422
436
}
423
437
438
+ jslog (DEBUG , "Received %d events." , arrsize );
439
+
424
440
return 1 ;
425
441
}
426
442
@@ -788,6 +804,14 @@ duk_ret_t el_partition_write(duk_context *ctx)
788
804
}
789
805
}
790
806
807
+ duk_ret_t el_readAndFreeString (duk_context * ctx )
808
+ {
809
+ char * str = duk_to_int (ctx , 0 );
810
+ duk_push_string (ctx , str );
811
+ free (str );
812
+ return 1 ;
813
+ }
814
+
791
815
void duktape_task (void * ignore )
792
816
{
793
817
spiramAvailable = spiramAvail ();
@@ -901,6 +925,15 @@ void duktape_task(void *ignore)
901
925
duk_push_c_function (ctx , el_find_partition , 1 /*nargs*/ );
902
926
duk_put_global_string (ctx , "el_find_partition" );
903
927
928
+ duk_push_int (ctx , EL_TIMER_EVENT_TYPE );
929
+ duk_put_global_string (ctx , "EL_TIMER_EVENT_TYPE" );
930
+
931
+ duk_push_int (ctx , EL_LOG_EVENT_TYPE );
932
+ duk_put_global_string (ctx , "EL_LOG_EVENT_TYPE" );
933
+
934
+ duk_push_c_function (ctx , el_readAndFreeString , 1 /*nargs*/ );
935
+ duk_put_global_string (ctx , "el_readAndFreeString" );
936
+
904
937
loadUrlPolyfill (ctx );
905
D63B
938
906
939
#define ESP32_JAVASCRIPT_EXTERN ESP32_JAVASCRIPT_EXTERN_REGISTER
@@ -924,7 +957,7 @@ int esp32_javascript_init()
924
957
esp_log_level_set ("*" , ESP_LOG_ERROR );
925
958
esp_log_level_set ("wifi" , ESP_LOG_WARN );
926
959
esp_log_level_set ("dhcpc" , ESP_LOG_WARN );
927
- esp_log_level_set (tag , ESP_LOG_DEBUG );
960
+ esp_log_level_set (tag , LOG_LOCAL_LEVEL );
928
961
929
962
nvs_flash_init ();
930
963
tcpip_adapter_init ();
0 commit comments