diff --git a/src/main/sdvxio-kfca/config-kfca.c b/src/main/sdvxio-kfca/config-kfca.c index a2d8e62..94da472 100644 --- a/src/main/sdvxio-kfca/config-kfca.c +++ b/src/main/sdvxio-kfca/config-kfca.c @@ -6,9 +6,15 @@ #define SDVXIO_KFCA_CONFIG_KFCA_PORT_KEY "kfca.port" #define SDVXIO_KFCA_CONFIG_KFCA_BAUD_KEY "kfca.baud" +#define SDVXIO_KFCA_CONFIG_MAIN_AMP_VOLUME_KEY "kfca.main_override" +#define SDVXIO_KFCA_CONFIG_HEADPHONE_AMP_VOLUME_KEY "kfca.headphone_override" +#define SDVXIO_KFCA_CONFIG_SUBWOOFER_AMP_VOLUME_KEY "kfca.subwoofer_override" #define SDVXIO_KFCA_CONFIG_KFCA_DEFAULT_PORT_VALUE "COM3" #define SDVXIO_KFCA_CONFIG_KFCA_DEFAULT_BAUD_VALUE 57600 +#define SDVXIO_KFCA_CONFIG_DEFAULT_MAIN_AMP_VOLUME_VALUE -1 +#define SDVXIO_KFCA_CONFIG_DEFAULT_HEADPHONE_AMP_VOLUME_VALUE -1 +#define SDVXIO_KFCA_CONFIG_DEFAULT_SUBWOOFER_AMP_VOLUME_VALUE -1 void sdvxio_kfca_config_kfca_init(struct cconfig *config) { @@ -23,6 +29,24 @@ void sdvxio_kfca_config_kfca_init(struct cconfig *config) SDVXIO_KFCA_CONFIG_KFCA_BAUD_KEY, SDVXIO_KFCA_CONFIG_KFCA_DEFAULT_BAUD_VALUE, "KFCA ACIO bus baudrate (real devices expect 57600)"); + + cconfig_util_set_int( + config, + SDVXIO_KFCA_CONFIG_MAIN_AMP_VOLUME_KEY, + SDVXIO_KFCA_CONFIG_DEFAULT_MAIN_AMP_VOLUME_VALUE, + "SDVXIO digital amp main volume (0-96) 0 is high, 96 is low. -1 is no override."); + + cconfig_util_set_int( + config, + SDVXIO_KFCA_CONFIG_HEADPHONE_AMP_VOLUME_KEY, + SDVXIO_KFCA_CONFIG_DEFAULT_HEADPHONE_AMP_VOLUME_VALUE, + "SDVXIO digital amp headphone volume (0-96) 0 is high, 96 is low. -1 is no override."); + + cconfig_util_set_int( + config, + SDVXIO_KFCA_CONFIG_SUBWOOFER_AMP_VOLUME_KEY, + SDVXIO_KFCA_CONFIG_DEFAULT_SUBWOOFER_AMP_VOLUME_VALUE, + "SDVXIO digital amp subwoofer volume (0-96) 0 is high, 96 is low. -1 is no override."); } void sdvxio_kfca_config_kfca_get( @@ -52,4 +76,40 @@ void sdvxio_kfca_config_kfca_get( SDVXIO_KFCA_CONFIG_KFCA_BAUD_KEY, SDVXIO_KFCA_CONFIG_KFCA_DEFAULT_BAUD_VALUE); } + + if (!cconfig_util_get_int( + config, + SDVXIO_KFCA_CONFIG_MAIN_AMP_VOLUME_KEY, + &config_kfca->override_main_volume, + SDVXIO_KFCA_CONFIG_DEFAULT_MAIN_AMP_VOLUME_VALUE)) { + log_warning( + "Invalid value for key '%s' specified, fallback " + "to default '%d'", + SDVXIO_KFCA_CONFIG_MAIN_AMP_VOLUME_KEY, + SDVXIO_KFCA_CONFIG_DEFAULT_MAIN_AMP_VOLUME_VALUE); + } + + if (!cconfig_util_get_int( + config, + SDVXIO_KFCA_CONFIG_HEADPHONE_AMP_VOLUME_KEY, + &config_kfca->override_headphone_volume, + SDVXIO_KFCA_CONFIG_DEFAULT_HEADPHONE_AMP_VOLUME_VALUE)) { + log_warning( + "Invalid value for key '%s' specified, fallback " + "to default '%d'", + SDVXIO_KFCA_CONFIG_HEADPHONE_AMP_VOLUME_KEY, + SDVXIO_KFCA_CONFIG_DEFAULT_HEADPHONE_AMP_VOLUME_VALUE); + } + + if (!cconfig_util_get_int( + config, + SDVXIO_KFCA_CONFIG_SUBWOOFER_AMP_VOLUME_KEY, + &config_kfca->override_sub_volume, + SDVXIO_KFCA_CONFIG_DEFAULT_SUBWOOFER_AMP_VOLUME_VALUE)) { + log_warning( + "Invalid value for key '%s' specified, fallback " + "to default '%d'", + SDVXIO_KFCA_CONFIG_SUBWOOFER_AMP_VOLUME_KEY, + SDVXIO_KFCA_CONFIG_DEFAULT_SUBWOOFER_AMP_VOLUME_VALUE); + } } diff --git a/src/main/sdvxio-kfca/config-kfca.h b/src/main/sdvxio-kfca/config-kfca.h index 36d8b1d..f212882 100644 --- a/src/main/sdvxio-kfca/config-kfca.h +++ b/src/main/sdvxio-kfca/config-kfca.h @@ -8,6 +8,9 @@ struct sdvxio_kfca_config_kfca { char port[64]; int32_t baud; + int32_t override_main_volume; + int32_t override_headphone_volume; + int32_t override_sub_volume; }; void sdvxio_kfca_config_kfca_init(struct cconfig *config); diff --git a/src/main/sdvxio-kfca/sdvxio.c b/src/main/sdvxio-kfca/sdvxio.c index cf02c07..a4eb255 100644 --- a/src/main/sdvxio-kfca/sdvxio.c +++ b/src/main/sdvxio-kfca/sdvxio.c @@ -120,9 +120,24 @@ bool sdvx_io_init( if (kfca_node_id != -1) { log_warning("Using KFCA on node: %d", kfca_node_id); - bool init_result = aciodrv_kfca_init( + uint8_t primary = 0; + uint8_t headphone = 0; + uint8_t subwoofer = 0; + + if (config_kfca.override_main_volume >= 0) { + primary = config_kfca.override_main_volume; + } + if (config_kfca.override_headphone_volume >= 0) { + headphone = config_kfca.override_headphone_volume; + } + if (config_kfca.override_sub_volume >= 0) { + subwoofer = config_kfca.override_sub_volume; + } + + bool init_result = aciodrv_kfca_amp( aciomgr_port_checkout(acio_manager_ctx), - kfca_node_id); + kfca_node_id, + primary, headphone, 0, subwoofer); aciomgr_port_checkin(acio_manager_ctx); if (!init_result) { @@ -240,7 +255,7 @@ bool sdvx_io_set_amp_volume( bool amp_result = aciodrv_kfca_amp( aciomgr_port_checkout(acio_manager_ctx), kfca_node_id, - primary, 96, headphone, subwoofer); + primary, headphone, 96, subwoofer); aciomgr_port_checkin(acio_manager_ctx); if (!amp_result) {