|  | @@ -46,13 +46,12 @@ bool spkfault_svc(void);
 | 
	
		
			
				|  |  |  /****************************************************************************************
 | 
	
		
			
				|  |  |   * 
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -static void task_stats( void ) {
 | 
	
		
			
				|  |  | +static void task_stats( cJSON* top ) {
 | 
	
		
			
				|  |  |  #ifdef CONFIG_FREERTOS_USE_TRACE_FACILITY 
 | 
	
		
			
				|  |  |  	static struct {
 | 
	
		
			
				|  |  |  		TaskStatus_t *tasks;
 | 
	
		
			
				|  |  |  		uint32_t total, n;
 | 
	
		
			
				|  |  |  	} current, previous;
 | 
	
		
			
				|  |  | -	cJSON * top=cJSON_CreateObject();
 | 
	
		
			
				|  |  |  	cJSON * tlist=cJSON_CreateArray();
 | 
	
		
			
				|  |  |  	current.n = uxTaskGetNumberOfTasks();
 | 
	
		
			
				|  |  |  	current.tasks = malloc( current.n * sizeof( TaskStatus_t ) );
 | 
	
	
		
			
				|  | @@ -80,11 +79,6 @@ static void task_stats( void ) {
 | 
	
		
			
				|  |  |  				cJSON_AddNumberToObject(t,"st",current.tasks[i].eCurrentState);
 | 
	
		
			
				|  |  |  				cJSON_AddNumberToObject(t,"num",current.tasks[i].xTaskNumber);
 | 
	
		
			
				|  |  |  				cJSON_AddItemToArray(tlist,t);
 | 
	
		
			
				|  |  | -				char * topsts = cJSON_PrintUnformatted(t);
 | 
	
		
			
				|  |  | -				if(topsts){
 | 
	
		
			
				|  |  | -					ESP_LOGI(TAG,"task detail: %s",topsts);
 | 
	
		
			
				|  |  | -					FREE_AND_NULL(topsts);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  |  				if (i % 3 == 2 || i == current.n - 1) {
 | 
	
		
			
				|  |  |  					ESP_LOGI(TAG, "%s", scratch);
 | 
	
		
			
				|  |  |  					n = 0;
 | 
	
	
		
			
				|  | @@ -104,11 +98,6 @@ static void task_stats( void ) {
 | 
	
		
			
				|  |  |  		cJSON_AddStringToObject(t,"st",current.tasks[i].eCurrentState);
 | 
	
		
			
				|  |  |  		cJSON_AddNumberToObject(t,"num",current.tasks[i].xTaskNumber);
 | 
	
		
			
				|  |  |  		cJSON_AddItemToArray(tlist,t);
 | 
	
		
			
				|  |  | -		char * topsts = cJSON_PrintUnformatted(t);
 | 
	
		
			
				|  |  | -		if(topsts){
 | 
	
		
			
				|  |  | -			ESP_LOGI(TAG,"task detail: %s",topsts);
 | 
	
		
			
				|  |  | -			FREE_AND_NULL(topsts);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  |  		if (i % 3 == 2 || i == current.n - 1) {
 | 
	
		
			
				|  |  |  			ESP_LOGI(TAG, "%s", scratch);
 | 
	
		
			
				|  |  |  			n = 0;
 | 
	
	
		
			
				|  | @@ -116,12 +105,6 @@ static void task_stats( void ) {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  #endif	
 | 
	
		
			
				|  |  |  	cJSON_AddItemToObject(top,"tasks",tlist);
 | 
	
		
			
				|  |  | -	char * top_a= cJSON_PrintUnformatted(top);
 | 
	
		
			
				|  |  | -	if(top_a){
 | 
	
		
			
				|  |  | -		messaging_post_message(MESSAGING_INFO, MESSAGING_CLASS_STATS,top_a);
 | 
	
		
			
				|  |  | -		FREE_AND_NULL(top_a);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	cJSON_free(top);
 | 
	
		
			
				|  |  |  	if (previous.tasks) free(previous.tasks);
 | 
	
		
			
				|  |  |  	previous = current;
 | 
	
		
			
				|  |  |  #endif	
 | 
	
	
		
			
				|  | @@ -131,13 +114,26 @@ static void task_stats( void ) {
 | 
	
		
			
				|  |  |   * 
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  static void monitor_callback(TimerHandle_t xTimer) {
 | 
	
		
			
				|  |  | +	cJSON * top=cJSON_CreateObject();
 | 
	
		
			
				|  |  | +	cJSON_AddNumberToObject(top,"free_iram",heap_caps_get_free_size(MALLOC_CAP_INTERNAL));
 | 
	
		
			
				|  |  | +	cJSON_AddNumberToObject(top,"min_free_iram",heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL));
 | 
	
		
			
				|  |  | +	cJSON_AddNumberToObject(top,"free_spiram",heap_caps_get_free_size(MALLOC_CAP_SPIRAM));
 | 
	
		
			
				|  |  | +	cJSON_AddNumberToObject(top,"min_free_spiram",heap_caps_get_minimum_free_size(MALLOC_CAP_SPIRAM));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	ESP_LOGI(TAG, "Heap internal:%zu (min:%zu) external:%zu (min:%zu)", 
 | 
	
		
			
				|  |  |  			heap_caps_get_free_size(MALLOC_CAP_INTERNAL),
 | 
	
		
			
				|  |  |  			heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL),
 | 
	
		
			
				|  |  |  			heap_caps_get_free_size(MALLOC_CAP_SPIRAM),
 | 
	
		
			
				|  |  |  			heap_caps_get_minimum_free_size(MALLOC_CAP_SPIRAM));
 | 
	
		
			
				|  |  |  			
 | 
	
		
			
				|  |  | -	task_stats();
 | 
	
		
			
				|  |  | +	task_stats(top);
 | 
	
		
			
				|  |  | +	char * top_a= cJSON_PrintUnformatted(top);
 | 
	
		
			
				|  |  | +	if(top_a){
 | 
	
		
			
				|  |  | +		messaging_post_message(MESSAGING_INFO, MESSAGING_CLASS_STATS,top_a);
 | 
	
		
			
				|  |  | +		FREE_AND_NULL(top_a);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	cJSON_free(top);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /****************************************************************************************
 | 
	
	
		
			
				|  | @@ -145,6 +141,7 @@ static void monitor_callback(TimerHandle_t xTimer) {
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  static void jack_handler_default(void *id, button_event_e event, button_press_e mode, bool long_press) {
 | 
	
		
			
				|  |  |  	ESP_LOGD(TAG, "Jack %s", event == BUTTON_PRESSED ? "inserted" : "removed");
 | 
	
		
			
				|  |  | +	messaging_post_message(MESSAGING_INFO, MESSAGING_CLASS_SYSTEM,"jack is %s",BUTTON_PRESSED ? "inserted" : "removed");
 | 
	
		
			
				|  |  |  	if (jack_handler_svc) (*jack_handler_svc)(event == BUTTON_PRESSED);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |