|
@@ -25,23 +25,23 @@ const char * desc_spdif= "SPDIF Options";
|
|
const char * desc_audio= "General Audio Options";
|
|
const char * desc_audio= "General Audio Options";
|
|
|
|
|
|
|
|
|
|
-#define CODECS_BASE "flac,pcm,mp3,ogg"
|
|
|
|
|
|
+#define CODECS_BASE "flac|pcm|mp3|ogg"
|
|
#if NO_FAAD
|
|
#if NO_FAAD
|
|
#define CODECS_AAC ""
|
|
#define CODECS_AAC ""
|
|
#else
|
|
#else
|
|
-#define CODECS_AAC ",aac"
|
|
|
|
|
|
+#define CODECS_AAC "|aac"
|
|
#endif
|
|
#endif
|
|
#if FFMPEG
|
|
#if FFMPEG
|
|
-#define CODECS_FF ",wma,alac"
|
|
|
|
|
|
+#define CODECS_FF "|wma|alac"
|
|
#else
|
|
#else
|
|
#define CODECS_FF ""
|
|
#define CODECS_FF ""
|
|
#endif
|
|
#endif
|
|
#if DSD
|
|
#if DSD
|
|
-#define CODECS_DSD ",dsd"
|
|
|
|
|
|
+#define CODECS_DSD "|dsd"
|
|
#else
|
|
#else
|
|
#define CODECS_DSD ""
|
|
#define CODECS_DSD ""
|
|
#endif
|
|
#endif
|
|
-#define CODECS_MP3 " (mad,mpg for specific mp3 codec)"
|
|
|
|
|
|
+#define CODECS_MP3 "|mad|mpg"
|
|
|
|
|
|
#define CODECS CODECS_BASE CODECS_AAC CODECS_FF CODECS_DSD CODECS_MP3
|
|
#define CODECS CODECS_BASE CODECS_AAC CODECS_FF CODECS_DSD CODECS_MP3
|
|
#define NOT_OUTPUT "has input capabilities only"
|
|
#define NOT_OUTPUT "has input capabilities only"
|
|
@@ -75,6 +75,8 @@ static struct {
|
|
struct arg_end *end;
|
|
struct arg_end *end;
|
|
} audio_args;
|
|
} audio_args;
|
|
static struct {
|
|
static struct {
|
|
|
|
+ struct arg_str * output_device; // " -d <log>=<level>\tSet logging level, logs: all|slimproto|stream|decode|output|ir, level: info|debug|sdebug\n"
|
|
|
|
+ struct arg_str * name;// " -n <name>\t\tSet the player name\n"
|
|
struct arg_str * server; // -s <server>[:<port>]\tConnect to specified server, otherwise uses autodiscovery to find server\n"
|
|
struct arg_str * server; // -s <server>[:<port>]\tConnect to specified server, otherwise uses autodiscovery to find server\n"
|
|
struct arg_str * buffers;// " -b <stream>:<output>\tSpecify internal Stream and Output buffer sizes in Kbytes\n"
|
|
struct arg_str * buffers;// " -b <stream>:<output>\tSpecify internal Stream and Output buffer sizes in Kbytes\n"
|
|
struct arg_str * codecs;// " -c <codec1>,<codec2>\tRestrict codecs to those specified, otherwise load all available codecs; known codecs: " CODECS "\n"
|
|
struct arg_str * codecs;// " -c <codec1>,<codec2>\tRestrict codecs to those specified, otherwise load all available codecs; known codecs: " CODECS "\n"
|
|
@@ -88,7 +90,6 @@ static struct {
|
|
#if IR
|
|
#if IR
|
|
struct arg_str * log_level_ir;
|
|
struct arg_str * log_level_ir;
|
|
#endif
|
|
#endif
|
|
- struct arg_str * output_device; // " -d <log>=<level>\tSet logging level, logs: all|slimproto|stream|decode|output|ir, level: info|debug|sdebug\n"
|
|
|
|
// " -e <codec1>,<codec2>\tExplicitly exclude native support of one or more codecs; known codecs: " CODECS "\n"
|
|
// " -e <codec1>,<codec2>\tExplicitly exclude native support of one or more codecs; known codecs: " CODECS "\n"
|
|
// " -f <logfile>\t\tWrite debug to logfile\n"
|
|
// " -f <logfile>\t\tWrite debug to logfile\n"
|
|
// #if IR
|
|
// #if IR
|
|
@@ -96,7 +97,6 @@ static struct {
|
|
// #endif
|
|
// #endif
|
|
struct arg_str * mac_addr; // " -m <mac addr>\t\tSet mac address, format: ab:cd:ef:12:34:56\n"
|
|
struct arg_str * mac_addr; // " -m <mac addr>\t\tSet mac address, format: ab:cd:ef:12:34:56\n"
|
|
struct arg_str * model_name;// " -M <modelname>\tSet the squeezelite player model name sent to the server (default: " MODEL_NAME_STRING ")\n"
|
|
struct arg_str * model_name;// " -M <modelname>\tSet the squeezelite player model name sent to the server (default: " MODEL_NAME_STRING ")\n"
|
|
- struct arg_str * name;// " -n <name>\t\tSet the player name\n"
|
|
|
|
struct arg_lit * header_format;// " -W\t\t\tRead wave and aiff format from header, ignore server parameters\n"
|
|
struct arg_lit * header_format;// " -W\t\t\tRead wave and aiff format from header, ignore server parameters\n"
|
|
struct arg_str * rates; // " -r <rates>[:<delay>]\tSample rates supported, allows output to be off when squeezelite is started; rates = <maxrate>|<minrate>-<maxrate>|<rate1>,<rate2>,<rate3>; delay = optional delay switching rates in ms\n"
|
|
struct arg_str * rates; // " -r <rates>[:<delay>]\tSample rates supported, allows output to be off when squeezelite is started; rates = <maxrate>|<minrate>-<maxrate>|<rate1>,<rate2>,<rate3>; delay = optional delay switching rates in ms\n"
|
|
#if RESAMPLE
|
|
#if RESAMPLE
|
|
@@ -160,10 +160,10 @@ static int do_audio_cmd(int argc, char **argv){
|
|
|
|
|
|
if(audio_args.jack_behavior->count>0){
|
|
if(audio_args.jack_behavior->count>0){
|
|
err = ESP_OK; // suppress any error code that might have happened in a previous step
|
|
err = ESP_OK; // suppress any error code that might have happened in a previous step
|
|
- if(strcasecmp(audio_args.jack_behavior->sval[0],"Headphones")){
|
|
|
|
|
|
+ if(strcasecmp(audio_args.jack_behavior->sval[0],"Headphones")==0){
|
|
err = config_set_value(NVS_TYPE_STR, "jack_mutes_amp", "y");
|
|
err = config_set_value(NVS_TYPE_STR, "jack_mutes_amp", "y");
|
|
}
|
|
}
|
|
- else if(strcasecmp(audio_args.jack_behavior->sval[0],"Subwoofer")){
|
|
|
|
|
|
+ else if(strcasecmp(audio_args.jack_behavior->sval[0],"Subwoofer")==0){
|
|
err = config_set_value(NVS_TYPE_STR, "jack_mutes_amp", "n");
|
|
err = config_set_value(NVS_TYPE_STR, "jack_mutes_amp", "n");
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
@@ -382,7 +382,7 @@ cJSON * spdif_cb(){
|
|
cJSON * audio_cb(){
|
|
cJSON * audio_cb(){
|
|
cJSON * values = cJSON_CreateObject();
|
|
cJSON * values = cJSON_CreateObject();
|
|
char * p = config_alloc_get_default(NVS_TYPE_STR, "jack_mutes_amp", "n", 0);
|
|
char * p = config_alloc_get_default(NVS_TYPE_STR, "jack_mutes_amp", "n", 0);
|
|
- cJSON_AddBoolToObject(values,"jack_behavior",(strcmp(p,"1") == 0 ||strcasecmp(p,"y") == 0));
|
|
|
|
|
|
+ cJSON_AddStringToObject(values,"jack_behavior",(strcmp(p,"1") == 0 ||strcasecmp(p,"y") == 0)?"Headphones":"Subwoofer");
|
|
FREE_AND_NULL(p);
|
|
FREE_AND_NULL(p);
|
|
return values;
|
|
return values;
|
|
}
|
|
}
|
|
@@ -561,7 +561,7 @@ static void register_audio_config(void){
|
|
static void register_squeezelite_config(void){
|
|
static void register_squeezelite_config(void){
|
|
squeezelite_args.server = arg_str0("s","server","<server>[:<port>]","Connect to specified server, otherwise uses autodiscovery to find server");
|
|
squeezelite_args.server = arg_str0("s","server","<server>[:<port>]","Connect to specified server, otherwise uses autodiscovery to find server");
|
|
squeezelite_args.buffers = arg_str0("b","buffers","<stream>:<output>","Internal Stream and Output buffer sizes in Kbytes");
|
|
squeezelite_args.buffers = arg_str0("b","buffers","<stream>:<output>","Internal Stream and Output buffer sizes in Kbytes");
|
|
- squeezelite_args.codecs = arg_strn("c","codecs","<codec1>,<codec2>",0,20,"Restrict codecs to those specified, otherwise load all available codecs; known codecs");
|
|
|
|
|
|
+ squeezelite_args.codecs = arg_strn("c","codecs","+" CODECS "+",0,20,"Restrict codecs to those specified, otherwise load all available codecs; known codecs: " CODECS );
|
|
squeezelite_args.timeout = arg_int0("C","timeout","<n>","Close output device when idle after timeout seconds, default is to keep it open while player is 'on");
|
|
squeezelite_args.timeout = arg_int0("C","timeout","<n>","Close output device when idle after timeout seconds, default is to keep it open while player is 'on");
|
|
squeezelite_args.log_level = arg_str0("d","loglevel","log=level","Set logging level, logs: all|slimproto|stream|decode|output|ir, level: info|debug|sdebug"); // " -d <log>=<level>\tSet logging level, logs: all|slimproto|stream|decode|output|ir, level: info|debug|sdebug\n"
|
|
squeezelite_args.log_level = arg_str0("d","loglevel","log=level","Set logging level, logs: all|slimproto|stream|decode|output|ir, level: info|debug|sdebug"); // " -d <log>=<level>\tSet logging level, logs: all|slimproto|stream|decode|output|ir, level: info|debug|sdebug\n"
|
|
// squeezelite_args.log_level_all = arg_str0(NULL,"all",get_log_level_options("all"),"Overall Logging Level");
|
|
// squeezelite_args.log_level_all = arg_str0(NULL,"all",get_log_level_options("all"),"Overall Logging Level");
|
|
@@ -573,10 +573,10 @@ static void register_squeezelite_config(void){
|
|
squeezelite_args.log_level_ir= arg_str0(NULL,"loglevel_ir",get_log_level_options("ir"),"IR Logging Level");
|
|
squeezelite_args.log_level_ir= arg_str0(NULL,"loglevel_ir",get_log_level_options("ir"),"IR Logging Level");
|
|
#endif
|
|
#endif
|
|
|
|
|
|
- squeezelite_args.output_device = arg_str0("o","output_device","<string>","Output device");
|
|
|
|
- squeezelite_args.mac_addr = arg_str0("m","mac_addr","<string>","Mac address, format: ab:cd:ef:12:34:56");
|
|
|
|
- squeezelite_args.model_name = arg_str0("M", "modelname", "<string>","Squeezelite player model name sent to the server");
|
|
|
|
- squeezelite_args.name = arg_str0("n","name","<string>","Player name");
|
|
|
|
|
|
+ squeezelite_args.output_device = arg_str0("o","output_device","<string>","Output device (BT, I2S or SPDIF)");
|
|
|
|
+ squeezelite_args.mac_addr = arg_str0("m","mac_addr","<string>","Mac address, format: ab:cd:ef:12:34:56.");
|
|
|
|
+ squeezelite_args.model_name = arg_str0("M", "modelname", "<string>","Set the squeezelite player model name sent to the server (default: " MODEL_NAME ")");
|
|
|
|
+ squeezelite_args.name = arg_str0("n","name","<string>","Player name, if different from the current host name. Name can alternatively be assigned from the system/device name configuration.");
|
|
squeezelite_args.header_format = arg_lit0("W","header_format","Read wave and aiff format from header, ignore server parameters");
|
|
squeezelite_args.header_format = arg_lit0("W","header_format","Read wave and aiff format from header, ignore server parameters");
|
|
squeezelite_args.rates = arg_str0("r","rates","<rates>[:<delay>]", "Sample rates supported, allows output to be off when squeezelite is started; rates = <maxrate>|<minrate>-<maxrate>|<rate1>,<rate2>,<rate3>; delay = optional delay switching rates in ms\n");
|
|
squeezelite_args.rates = arg_str0("r","rates","<rates>[:<delay>]", "Sample rates supported, allows output to be off when squeezelite is started; rates = <maxrate>|<minrate>-<maxrate>|<rate1>,<rate2>,<rate3>; delay = optional delay switching rates in ms\n");
|
|
#if RESAMPLE
|
|
#if RESAMPLE
|