@@ -85,6 +85,11 @@ void fileLog(duk_context *ctx, log_level_t level, char *message)
8585
8686void jslog (log_level_t level , const char * msg , ...)
8787{
88+ if (level < (5 - LOG_LOCAL_LEVEL ))
89+ {
90+ return ;
91+ }
92+
8893 char * my_string ;
8994 va_list argp ;
9095
@@ -115,25 +120,21 @@ void jslog(log_level_t level, const char *msg, ...)
115120 duk_eval (ctx ); /* -> [ ... func ] */
116121 duk_push_string (ctx , my_string );
117122 duk_call (ctx , 1 );
123+ //clear stack
124+ duk_pop (ctx );
118125 }
119126 else
120127 {
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 );
137138 }
138139 free (my_string );
139140}
@@ -171,7 +172,7 @@ void IRAM_ATTR el_add_event(js_eventlist_t *events, js_event_t *event)
171172{
172173 if (events -> events_len >= MAX_EVENTS )
173174 {
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 );
175176 abort ();
176177 }
177178 events -> events [events -> events_len ] = * event ;
@@ -182,17 +183,28 @@ void IRAM_ATTR el_fire_events(js_eventlist_t *events)
182183{
183184 if (DISABLE_EVENTS )
184185 {
185- jslog ( WARN , "Events are disabled. They will never be fired." );
186+ ESP_LOGW ( tag , "Events are disabled. They will never be fired." );
186187 }
187188 else
188189 {
189190 if (events -> events_len > 0 )
190191 {
191- jslog ( DEBUG , "Send %d events to queue..." , events -> events_len );
192+ ESP_LOGD ( tag , "Send %d events to queue..." , events -> events_len );
192193 int ret = xQueueSendFromISR (el_event_queue , events , NULL );
193194 if (ret != pdTRUE )
194195 {
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+
196208 abort ();
197209 }
198210 }
@@ -401,26 +413,30 @@ static duk_ret_t el_suspend(duk_context *ctx)
401413 js_eventlist_t events ;
402414
403415 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-
409416 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 )
411420 {
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 );
413425
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" );
420432
421- duk_put_prop_index (ctx , arr_idx , i );
433+ duk_put_prop_index (ctx , arr_idx , arrsize );
434+ arrsize ++ ;
435+ }
422436 }
423437
438+ jslog (DEBUG , "Received %d events." , arrsize );
439+
424440 return 1 ;
425441}
426442
@@ -788,6 +804,14 @@ duk_ret_t el_partition_write(duk_context *ctx)
788804 }
789805}
790806
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+
791815void duktape_task (void * ignore )
792816{
793817 spiramAvailable = spiramAvail ();
@@ -901,6 +925,15 @@ void duktape_task(void *ignore)
901925 duk_push_c_function (ctx , el_find_partition , 1 /*nargs*/ );
902926 duk_put_global_string (ctx , "el_find_partition" );
903927
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+
904937 loadUrlPolyfill (ctx );
905938
906939#define ESP32_JAVASCRIPT_EXTERN ESP32_JAVASCRIPT_EXTERN_REGISTER
@@ -924,7 +957,7 @@ int esp32_javascript_init()
924957 esp_log_level_set ("*" , ESP_LOG_ERROR );
925958 esp_log_level_set ("wifi" , ESP_LOG_WARN );
926959 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 );
928961
929962 nvs_flash_init ();
930963 tcpip_adapter_init ();
0 commit comments