Skip to content

Commit

Permalink
Merge branch 'ms-frequency-list' into ms-rel-v1812
Browse files Browse the repository at this point in the history
  • Loading branch information
tmiw committed Jul 5, 2023
2 parents 69d158d + 21d7d30 commit 05b3bb1
Show file tree
Hide file tree
Showing 34 changed files with 2,209 additions and 1,084 deletions.
5 changes: 5 additions & 0 deletions USER_MANUAL.html
Original file line number Diff line number Diff line change
Expand Up @@ -622,11 +622,16 @@ <h2 data-number="17.1" id="v1.8.12-tbd-2023"><span class="header-section-number"
<li>Set minimum size for Mode box to 250px. (PR #446)</li>
<li>Notify FreeDV Reporter if only capable of RX. (PR #449)</li>
<li>Hamlib: allow frequency and mode changes during TX. (PR #455)</li>
<li>Add support for modifying the drop down frequency list. (PR #460)</li>
</ul></li>
<li>Build system:
<ul>
<li>Bump Codec2 version to v1.1.1. (PR #437)</li>
</ul></li>
<li>Cleanup:
<ul>
<li>Refactor configuration handling in the codebase. (PR #457)</li>
</ul></li>
<li>Miscallenous:
<ul>
<li>Set default FreeDV Reporter hostname to qso.freedv.org. (PR #448)</li>
Expand Down
3 changes: 3 additions & 0 deletions USER_MANUAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -880,8 +880,11 @@ LDPC | Low Density Parity Check Codes - a family of powerful FEC codes
* Set minimum size for Mode box to 250px. (PR #446)
* Notify FreeDV Reporter if only capable of RX. (PR #449)
* Hamlib: allow frequency and mode changes during TX. (PR #455)
* Add support for modifying the drop down frequency list. (PR #460)
3. Build system:
* Bump Codec2 version to v1.1.1. (PR #437)
4. Cleanup:
* Refactor configuration handling in the codebase. (PR #457)
4. Miscallenous:
* Set default FreeDV Reporter hostname to qso.freedv.org. (PR #448)

Expand Down
5 changes: 3 additions & 2 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ set(FREEDV_LINK_LIBS_OSX

# Compile FreeDV components
add_subdirectory(audio)
add_subdirectory(config)
add_subdirectory(pipeline)
add_subdirectory(reporting)
add_subdirectory(sox)
Expand Down Expand Up @@ -80,9 +81,9 @@ endif(APPLE)

# Link imported or build tree targets.
if(APPLE)
target_link_libraries(FreeDV fdv_audio fdv_audio_pipeline fdv_reporting fdv_sox lpcnetfreedv codec2)
target_link_libraries(FreeDV fdv_audio fdv_audio_pipeline fdv_config fdv_reporting fdv_sox lpcnetfreedv codec2)
else(APPLE)
target_link_libraries(freedv fdv_audio fdv_audio_pipeline fdv_reporting fdv_sox lpcnetfreedv codec2)
target_link_libraries(freedv fdv_audio fdv_audio_pipeline fdv_config fdv_reporting fdv_sox lpcnetfreedv codec2)
endif(APPLE)

# Add build dependencies for internally built external libraries.
Expand Down
94 changes: 94 additions & 0 deletions src/config/AudioConfiguration.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
//==========================================================================
// Name: AudioConfiguration.cpp
// Purpose: Implements the audio device configuration for FreeDV
// Created: July 2, 2023
// Authors: Mooneer Salem
//
// License:
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2.1,
// as published by the Free Software Foundation. This program is
// distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
// License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, see <http://www.gnu.org/licenses/>.
//
//==========================================================================

#include "AudioConfiguration.h"

template<>
const char* AudioConfiguration::AudioDeviceConfigName<1, AudioConfiguration::DIR_IN>::GetDeviceNameConfigName()
{
return "/Audio/soundCard1InDeviceName";
}

template<>
const char* AudioConfiguration::AudioDeviceConfigName<1, AudioConfiguration::DIR_OUT>::GetDeviceNameConfigName()
{
return "/Audio/soundCard1OutDeviceName";
}

template<>
const char* AudioConfiguration::AudioDeviceConfigName<2, AudioConfiguration::DIR_IN>::GetDeviceNameConfigName()
{
return "/Audio/soundCard2InDeviceName";
}

template<>
const char* AudioConfiguration::AudioDeviceConfigName<2, AudioConfiguration::DIR_OUT>::GetDeviceNameConfigName()
{
return "/Audio/soundCard2OutDeviceName";
}

template<>
const char* AudioConfiguration::AudioDeviceConfigName<1, AudioConfiguration::DIR_IN>::GetSampleRateConfigName()
{
return "/Audio/soundCard1InSampleRate";
}

template<>
const char* AudioConfiguration::AudioDeviceConfigName<1, AudioConfiguration::DIR_OUT>::GetSampleRateConfigName()
{
return "/Audio/soundCard1OutSampleRate";
}

template<>
const char* AudioConfiguration::AudioDeviceConfigName<2, AudioConfiguration::DIR_IN>::GetSampleRateConfigName()
{
return "/Audio/soundCard2InSampleRate";
}

template<>
const char* AudioConfiguration::AudioDeviceConfigName<2, AudioConfiguration::DIR_OUT>::GetSampleRateConfigName()
{
return "/Audio/soundCard2OutSampleRate";
}

void AudioConfiguration::load(wxConfigBase* config)
{
// Migration -- grab old sample rates from older FreeDV configuration
int oldSoundCard1SampleRate = config->Read(wxT("/Audio/soundCard1SampleRate"), -1);
int oldSoundCard2SampleRate = config->Read(wxT("/Audio/soundCard2SampleRate"), -1);
soundCard1In.sampleRate.setDefaultVal(oldSoundCard1SampleRate);
soundCard1Out.sampleRate.setDefaultVal(oldSoundCard1SampleRate);
soundCard2In.sampleRate.setDefaultVal(oldSoundCard2SampleRate);
soundCard2Out.sampleRate.setDefaultVal(oldSoundCard2SampleRate);

soundCard1In.load(config);
soundCard1Out.load(config);
soundCard2In.load(config);
soundCard2Out.load(config);
}

void AudioConfiguration::save(wxConfigBase* config)
{
soundCard1In.save(config);
soundCard1Out.save(config);
soundCard2In.save(config);
soundCard2Out.save(config);
}
125 changes: 125 additions & 0 deletions src/config/AudioConfiguration.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
//==========================================================================
// Name: AudioConfiguration.h
// Purpose: Implements the audio device configuration for FreeDV
// Created: July 2, 2023
// Authors: Mooneer Salem
//
// License:
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2.1,
// as published by the Free Software Foundation. This program is
// distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
// License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, see <http://www.gnu.org/licenses/>.
//
//==========================================================================

#ifndef AUDIO_CONFIGURATION_H
#define AUDIO_CONFIGURATION_H

#include "WxWidgetsConfigStore.h"
#include "ConfigurationDataElement.h"

class AudioConfiguration : public WxWidgetsConfigStore
{
public:
enum Direction { DIR_IN, DIR_OUT };

template<int DeviceId, AudioConfiguration::Direction AudioDirection>
class AudioDeviceConfigName
{
public:
static const char* GetDeviceNameConfigName();
static const char* GetSampleRateConfigName();
};

template<int DeviceId, AudioConfiguration::Direction AudioDirection>
class SoundDevice : public WxWidgetsConfigStore
{
public:
SoundDevice();
virtual ~SoundDevice() = default;

ConfigurationDataElement<wxString> deviceName;
ConfigurationDataElement<int> sampleRate;

virtual void load(wxConfigBase* config) override;
virtual void save(wxConfigBase* config) override;
};

AudioConfiguration() = default;
virtual ~AudioConfiguration() = default;

SoundDevice<1, Direction::DIR_IN> soundCard1In;
SoundDevice<1, Direction::DIR_OUT> soundCard1Out;
SoundDevice<2, Direction::DIR_IN> soundCard2In;
SoundDevice<2, Direction::DIR_OUT> soundCard2Out;

virtual void load(wxConfigBase* config) override;
virtual void save(wxConfigBase* config) override;
};

template<int DeviceId, AudioConfiguration::Direction AudioDirection>
const char* AudioConfiguration::AudioDeviceConfigName<DeviceId, AudioDirection>::GetDeviceNameConfigName()
{
assert(0);
}

template<>
const char* AudioConfiguration::AudioDeviceConfigName<1, AudioConfiguration::DIR_IN>::GetDeviceNameConfigName();

template<>
const char* AudioConfiguration::AudioDeviceConfigName<1, AudioConfiguration::DIR_OUT>::GetDeviceNameConfigName();

template<>
const char* AudioConfiguration::AudioDeviceConfigName<2, AudioConfiguration::DIR_IN>::GetDeviceNameConfigName();

template<>
const char* AudioConfiguration::AudioDeviceConfigName<2, AudioConfiguration::DIR_OUT>::GetDeviceNameConfigName();

template<int DeviceId, AudioConfiguration::Direction AudioDirection>
const char* AudioConfiguration::AudioDeviceConfigName<DeviceId, AudioDirection>::GetSampleRateConfigName()
{
assert(0);
}

template<>
const char* AudioConfiguration::AudioDeviceConfigName<1, AudioConfiguration::DIR_IN>::GetSampleRateConfigName();

template<>
const char* AudioConfiguration::AudioDeviceConfigName<1, AudioConfiguration::DIR_OUT>::GetSampleRateConfigName();

template<>
const char* AudioConfiguration::AudioDeviceConfigName<2, AudioConfiguration::DIR_IN>::GetSampleRateConfigName();

template<>
const char* AudioConfiguration::AudioDeviceConfigName<2, AudioConfiguration::DIR_OUT>::GetSampleRateConfigName();

template<int DeviceId, AudioConfiguration::Direction AudioDirection>
AudioConfiguration::SoundDevice<DeviceId, AudioDirection>::SoundDevice()
: deviceName(AudioConfiguration::AudioDeviceConfigName<DeviceId, AudioDirection>::GetDeviceNameConfigName(), "none")
, sampleRate(AudioConfiguration::AudioDeviceConfigName<DeviceId, AudioDirection>::GetSampleRateConfigName(), -1)
{
// empty
}

template<int DeviceId, AudioConfiguration::Direction AudioDirection>
void AudioConfiguration::SoundDevice<DeviceId, AudioDirection>::load(wxConfigBase* config)
{
load_(config, deviceName);
load_(config, sampleRate);
}

template<int DeviceId, AudioConfiguration::Direction AudioDirection>
void AudioConfiguration::SoundDevice<DeviceId, AudioDirection>::save(wxConfigBase* config)
{
save_(config, deviceName);
save_(config, sampleRate);
}

#endif // AUDIO_CONFIGURATION_H
16 changes: 16 additions & 0 deletions src/config/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
add_library(fdv_config STATIC
AudioConfiguration.cpp
FilterConfiguration.cpp
FreeDVConfiguration.cpp
ReportingConfiguration.cpp
RigControlConfiguration.cpp
WxWidgetsConfigStore.cpp
)

target_include_directories(fdv_config PRIVATE ${CODEC2_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_BINARY_DIR}/..)

if(BOOTSTRAP_WXWIDGETS)
add_dependencies(fdv_config wx::core wx::base wx::aui wx::html wx::net wx::adv wx::propgrid wx::xrc)
target_compile_definitions(fdv_config PRIVATE ${WXBUILD_BUILD_DEFS})
target_include_directories(fdv_config PRIVATE ${WXBUILD_INCLUDES})
endif(BOOTSTRAP_WXWIDGETS)
Loading

0 comments on commit 05b3bb1

Please sign in to comment.