mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-08 12:37:01 +03:00
misc changes (see PR) (#340)
* misc changes (see PR) * macro only parsing
This commit is contained in:
@@ -77,7 +77,7 @@ void Batch::push() {
|
||||
|
||||
char* json_str = to_json_str();
|
||||
ESP_LOGV(TAG, "Metrics payload: %s", json_str);
|
||||
time_t start_time = millis();
|
||||
uint32_t start_time = gettime_ms();
|
||||
|
||||
status_code = metrics_http_post_request(json_str, _url);
|
||||
|
||||
@@ -85,7 +85,7 @@ void Batch::push() {
|
||||
_events.clear();
|
||||
}
|
||||
FREE_AND_NULL(json_str)
|
||||
ESP_LOGD(TAG, "Total duration for metrics call: %lu. ", millis() - start_time);
|
||||
ESP_LOGD(TAG, "Total duration for metrics call: %lu. ", gettime_ms() - start_time);
|
||||
}
|
||||
|
||||
void Batch::build_guid() {
|
||||
|
||||
@@ -45,7 +45,7 @@ class Event {
|
||||
}
|
||||
private:
|
||||
char* _name = nullptr;
|
||||
time_t _time;
|
||||
uint32_t _time;
|
||||
cJSON* _json = nullptr;
|
||||
};
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ extern bool is_network_connected();
|
||||
#define MAX_HTTP_RECV_BUFFER 512
|
||||
|
||||
static bool metrics_usage_gen = false;
|
||||
static time_t metrics_usage_gen_time = 0;
|
||||
static uint32_t metrics_usage_gen_time = 0;
|
||||
#ifndef METRICS_API_KEY
|
||||
#pragma message "Metrics API key needs to be passed from the environment"
|
||||
#define METRICS_API_KEY "ZZZ"
|
||||
@@ -56,7 +56,7 @@ static void metrics_timer_cb(void* timer_id) {
|
||||
batch.push();
|
||||
}
|
||||
}
|
||||
if (millis() > metrics_usage_gen_time && !metrics_usage_gen) {
|
||||
if (gettime_ms() > metrics_usage_gen_time && !metrics_usage_gen) {
|
||||
metrics_usage_gen = true;
|
||||
ESP_LOGV(TAG, "Generate command list to pull features");
|
||||
cJSON* cmdlist = get_cmd_list();
|
||||
@@ -75,7 +75,7 @@ void metrics_init() {
|
||||
}
|
||||
// set a 20 seconds delay before generating the
|
||||
// features so the system has time to boot
|
||||
metrics_usage_gen_time = millis() + 20000;
|
||||
metrics_usage_gen_time = gettime_ms() + 20000;
|
||||
}
|
||||
|
||||
void metrics_event_playback(const char* source) {
|
||||
|
||||
@@ -538,7 +538,7 @@ bool config_set_group_bit(int bit_num,bool flag){
|
||||
return result;
|
||||
}
|
||||
|
||||
void config_set_default(nvs_type_t type, const char *key, void * default_value, size_t blob_size) {
|
||||
void config_set_default(nvs_type_t type, const char *key, const void * default_value, size_t blob_size) {
|
||||
if(!config_lock(LOCK_MAX_WAIT/portTICK_PERIOD_MS)){
|
||||
ESP_LOGE(TAG, "Unable to lock config");
|
||||
return;
|
||||
@@ -791,43 +791,6 @@ cJSON* cjson_update_number(cJSON** root, const char* key, int value) {
|
||||
}
|
||||
return *root;
|
||||
}
|
||||
bool config_parse_param_int(const char * config,const char * param, char delimiter,int * value){
|
||||
const char *p;
|
||||
if(!value){
|
||||
return false;
|
||||
}
|
||||
if ((p = strcasestr(config, param)) && (p = strchr(p, delimiter))) {
|
||||
*value = atoi(p+1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool config_parse_param_float(const char * config,const char * param, char delimiter,double * value){
|
||||
const char *p;
|
||||
if(!value){
|
||||
return false;
|
||||
}
|
||||
if ((p = strcasestr(config, param)) && (p = strchr(p, delimiter))) {
|
||||
*value = atof(p+1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool config_parse_param_str(const char *source, const char *param, char delimiter, char *value, size_t value_size) {
|
||||
char *p;
|
||||
if ((p = strstr(source, param)) && (p = strchr(p, delimiter))) {
|
||||
while (*++p == ' '); // Skip spaces
|
||||
// Read the value into the buffer, making sure not to overflow
|
||||
snprintf(value, value_size, "%s", p);
|
||||
char *end = strchr(value, ',');
|
||||
if (end) {
|
||||
*end = '\0'; // Null-terminate at the comma, if found
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
IMPLEMENT_SET_DEFAULT(uint8_t,NVS_TYPE_U8);
|
||||
IMPLEMENT_SET_DEFAULT(int8_t,NVS_TYPE_I8);
|
||||
|
||||
@@ -9,11 +9,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef PARSE_WITH_FUNC
|
||||
#define PARSE_PARAM(S,P,C,V) config_parse_param_int(S,P,C,(int*)&V)
|
||||
#define PARSE_PARAM_STR(S,P,C,V,I) config_parse_param_str(S,P,C,V,I)
|
||||
#define PARSE_PARAM_FLOAT(S,P,C,V) config_parse_param_float(S,P,C,&V)
|
||||
#else
|
||||
#define PARSE_PARAM(S,P,C,V) do { \
|
||||
char *__p; \
|
||||
if ((__p = strcasestr(S, P)) && (__p = strchr(__p, C))) V = atoi(__p+1); \
|
||||
@@ -31,7 +26,7 @@ extern "C" {
|
||||
sscanf(__p,"%" #I "[^,]", V); \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#define DECLARE_SET_DEFAULT(t) void config_set_default_## t (const char *key, t value);
|
||||
#define DECLARE_GET_NUM(t) esp_err_t config_get_## t (const char *key, t * value);
|
||||
#ifndef FREE_RESET
|
||||
@@ -55,9 +50,6 @@ bool config_has_changes();
|
||||
void config_commit_to_nvs();
|
||||
void config_start_timer();
|
||||
void config_init();
|
||||
bool config_parse_param_int(const char * config,const char * param, char delimiter,int * value);
|
||||
bool config_parse_param_float(const char * config,const char * param, char delimiter,double * value);
|
||||
bool config_parse_param_str(const char *source, const char *param, char delimiter, char *value, size_t value_size);
|
||||
void * config_alloc_get_default(nvs_type_t type, const char *key, void * default_value, size_t blob_size);
|
||||
void * config_alloc_get_str(const char *key, char *lead, char *fallback);
|
||||
cJSON * config_alloc_get_cjson(const char *key);
|
||||
@@ -65,7 +57,7 @@ esp_err_t config_set_cjson_str_and_free(const char *key, cJSON *value);
|
||||
esp_err_t config_set_cjson(const char *key, cJSON *value, bool free_cjson);
|
||||
void config_get_uint16t_from_str(const char *key, uint16_t *value, uint16_t default_value);
|
||||
void config_delete_key(const char *key);
|
||||
void config_set_default(nvs_type_t type, const char *key, void * default_value, size_t blob_size);
|
||||
void config_set_default(nvs_type_t type, const char *key, const void * default_value, size_t blob_size);
|
||||
void * config_alloc_get(nvs_type_t nvs_type, const char *key) ;
|
||||
bool wait_for_commit();
|
||||
char * config_alloc_get_json(bool bFormatted);
|
||||
|
||||
@@ -61,11 +61,13 @@ static struct {
|
||||
struct arg_end* end;
|
||||
} i2cset_args;
|
||||
|
||||
#if CONFIG_WITH_CONFIG_UI
|
||||
static struct {
|
||||
struct arg_int* chip_address;
|
||||
struct arg_int* size;
|
||||
struct arg_end* end;
|
||||
} i2cdump_args;
|
||||
#endif
|
||||
|
||||
static struct {
|
||||
struct arg_int* port;
|
||||
@@ -560,12 +562,13 @@ static int do_i2cconfig_cmd(int argc, char** argv) {
|
||||
nerrors += is_output_gpio(i2cconfig_args.sda, f, &conf.sda_io_num, true);
|
||||
nerrors += is_output_gpio(i2cconfig_args.scl, f, &conf.scl_io_num, true);
|
||||
|
||||
#ifdef CONFIG_SQUEEZEAMP
|
||||
#ifdef CONFIG_I2C_LOCKED
|
||||
if (i2c_port == I2C_NUM_0) {
|
||||
i2c_port = I2C_NUM_1;
|
||||
fprintf(f, "can't use i2c port 0 on SqueezeAMP. Changing to port 1.\n");
|
||||
fprintf(f, "can't use i2c port 0 when locked by config. Changing to port 1.\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!nerrors) {
|
||||
fprintf(f, "Uninstalling i2c driver from port %u if needed\n", i2c_port);
|
||||
if (is_i2c_started(i2c_port)) {
|
||||
@@ -601,6 +604,7 @@ static int do_i2cconfig_cmd(int argc, char** argv) {
|
||||
return nerrors;
|
||||
}
|
||||
|
||||
#if CONFIG_WITH_CONFIG_UI
|
||||
static int do_i2cdump_cmd(int argc, char** argv) {
|
||||
int nerrors = arg_parse_msg(argc, argv, (struct arg_hdr**)&i2cdump_args);
|
||||
if (nerrors != 0) {
|
||||
@@ -690,7 +694,7 @@ static int do_i2cdump_cmd(int argc, char** argv) {
|
||||
FREE_AND_NULL(buf);
|
||||
return 0;
|
||||
}
|
||||
#if CONFIG_WITH_CONFIG_UI
|
||||
|
||||
static int do_i2cset_cmd(int argc, char** argv) {
|
||||
int nerrors = arg_parse_msg(argc, argv, (struct arg_hdr**)&i2cset_args);
|
||||
if (nerrors != 0) {
|
||||
@@ -738,6 +742,7 @@ static int do_i2cset_cmd(int argc, char** argv) {
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int do_i2cget_cmd(int argc, char** argv) {
|
||||
int nerrors = arg_parse_msg(argc, argv, (struct arg_hdr**)&i2cget_args);
|
||||
if (nerrors != 0) {
|
||||
@@ -811,7 +816,9 @@ static int do_i2cget_cmd(int argc, char** argv) {
|
||||
return 0;
|
||||
}
|
||||
esp_err_t cmd_i2ctools_scan_bus(FILE* f, int sda, int scl) {
|
||||
#ifdef CONFIG_WITH_CONFIG_UI
|
||||
uint8_t matches[128] = {};
|
||||
#endif
|
||||
int last_match = 0;
|
||||
esp_err_t ret = ESP_OK;
|
||||
|
||||
@@ -861,8 +868,9 @@ esp_err_t cmd_i2ctools_scan_bus(FILE* f, int sda, int scl) {
|
||||
if (ret == ESP_OK) {
|
||||
#ifndef CONFIG_WITH_CONFIG_UI
|
||||
fprintf(f, "%02x ", i);
|
||||
#endif
|
||||
#else
|
||||
matches[++last_match - 1] = i;
|
||||
#endif
|
||||
}
|
||||
#ifndef CONFIG_WITH_CONFIG_UI
|
||||
else if (ret == ESP_ERR_TIMEOUT) {
|
||||
@@ -888,8 +896,10 @@ esp_err_t cmd_i2ctools_scan_bus(FILE* f, int sda, int scl) {
|
||||
return 0;
|
||||
}
|
||||
static int do_i2cdetect_cmd(int argc, char** argv) {
|
||||
#ifdef CONFIG_WITH_CONFIG_UI
|
||||
uint8_t matches[128] = {};
|
||||
int last_match = 0;
|
||||
#endif
|
||||
esp_err_t ret = ESP_OK;
|
||||
i2c_port_t loc_i2c_port = i2c_port;
|
||||
// if (i2cset_args.port->count && i2c_get_port(i2cset_args.port->ival[0], &loc_i2c_port) !=
|
||||
@@ -925,7 +935,9 @@ static int do_i2cdetect_cmd(int argc, char** argv) {
|
||||
i2c_cmd_link_delete(cmd);
|
||||
if (ret == ESP_OK) {
|
||||
fprintf(f, "%02x ", address);
|
||||
#ifdef CONFIG_WITH_CONFIG_UI
|
||||
matches[++last_match - 1] = address;
|
||||
#endif
|
||||
} else if (ret == ESP_ERR_TIMEOUT) {
|
||||
fprintf(f, "UU ");
|
||||
} else {
|
||||
@@ -1082,7 +1094,7 @@ static void register_i2cset(void) {
|
||||
cmd_to_json(&i2cset_cmd);
|
||||
ESP_ERROR_CHECK(esp_console_cmd_register(&i2cset_cmd));
|
||||
}
|
||||
#endif
|
||||
|
||||
static void register_i2cdump(void) {
|
||||
i2cdump_args.chip_address =
|
||||
arg_int1("c", "chip", "<chip_addr>", "Specify the address of the chip on that bus");
|
||||
@@ -1096,6 +1108,7 @@ static void register_i2cdump(void) {
|
||||
cmd_to_json(&i2cdump_cmd);
|
||||
ESP_ERROR_CHECK(esp_console_cmd_register(&i2cdump_cmd));
|
||||
}
|
||||
#endif
|
||||
|
||||
cJSON* i2config_cb() {
|
||||
cJSON* values = cJSON_CreateObject();
|
||||
|
||||
@@ -67,8 +67,10 @@ static void register_heap();
|
||||
static void register_dump_heap();
|
||||
static void register_version();
|
||||
static void register_restart();
|
||||
#if CONFIG_WITH_CONFIG_UI
|
||||
static void register_deep_sleep();
|
||||
static void register_light_sleep();
|
||||
#endif
|
||||
static void register_factory_boot();
|
||||
static void register_restart_ota();
|
||||
static void register_set_services();
|
||||
@@ -556,6 +558,7 @@ static void register_tasks()
|
||||
|
||||
/** 'deep_sleep' command puts the chip into deep sleep mode */
|
||||
|
||||
#if CONFIG_WITH_CONFIG_UI
|
||||
static struct {
|
||||
struct arg_int *wakeup_time;
|
||||
struct arg_int *wakeup_gpio_num;
|
||||
@@ -619,6 +622,8 @@ static void register_deep_sleep()
|
||||
};
|
||||
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
||||
}
|
||||
#endif
|
||||
|
||||
static int enable_disable(FILE * f,char * nvs_name, struct arg_lit *arg){
|
||||
esp_err_t err = config_set_value(NVS_TYPE_STR, nvs_name, arg->count>0?"Y":"N");
|
||||
const char * name = arg->hdr.longopts?arg->hdr.longopts:arg->hdr.glossary;
|
||||
@@ -737,6 +742,8 @@ static void register_set_services(){
|
||||
cmd_to_json_with_cb(&cmd,&set_services_cb);
|
||||
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
||||
}
|
||||
|
||||
#if CONFIG_WITH_CONFIG_UI
|
||||
static struct {
|
||||
struct arg_int *wakeup_time;
|
||||
struct arg_int *wakeup_gpio_num;
|
||||
@@ -828,4 +835,4 @@ static void register_light_sleep()
|
||||
};
|
||||
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_task.h"
|
||||
#include "esp_tls.h"
|
||||
#include "esp_http_client.h"
|
||||
@@ -24,7 +22,6 @@
|
||||
#error CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS must be at least 2
|
||||
#endif
|
||||
|
||||
#include "cJSON.h"
|
||||
const static char TAG[] = "tools";
|
||||
|
||||
/****************************************************************************************
|
||||
@@ -328,13 +325,6 @@ static esp_err_t http_event_handler(esp_http_client_event_t *evt) {
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
|
||||
time_t millis() {
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
return (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
|
||||
}
|
||||
|
||||
void dump_json_content(const char* prefix, cJSON* json, int level) {
|
||||
if (!json) {
|
||||
ESP_LOG_LEVEL(level,TAG, "%s: empty!", prefix);
|
||||
|
||||
@@ -9,10 +9,9 @@
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "cJSON.h"
|
||||
#include "time.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "cJSON.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -56,6 +55,13 @@ void* clone_obj_psram(void * source, size_t source_sz);
|
||||
char* strdup_psram(const char * source);
|
||||
const char* str_or_unknown(const char * str);
|
||||
const char* str_or_null(const char * str);
|
||||
void dump_json_content(const char* prefix, cJSON* json, int level);
|
||||
|
||||
#ifndef gettime_ms
|
||||
// body is provided somewhere else...
|
||||
uint32_t _gettime_ms_(void);
|
||||
#define gettime_ms _gettime_ms_
|
||||
#endif
|
||||
|
||||
typedef void (*http_download_cb_t)(uint8_t* data, size_t len, void *context);
|
||||
void http_download(char *url, size_t max, http_download_cb_t callback, void *context);
|
||||
@@ -74,9 +80,6 @@ void vTaskDeleteEXTRAM(TaskHandle_t xTask);
|
||||
|
||||
extern const char unknown_string_placeholder[];
|
||||
|
||||
time_t millis();
|
||||
void dump_json_content(const char* prefix, cJSON* json, int level);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user