From 4268c4afca82a608c78cf1eca6c396f0974d736a Mon Sep 17 00:00:00 2001 From: bruceperens Date: Sat, 8 Mar 2014 02:21:49 +0000 Subject: [PATCH] Add enumerators. git-svn-id: https://svn.code.sf.net/p/freetel/code@1418 01035d8c-6547-0410-b346-abe4f91aad63 --- freedv-server/source/audio_sink.cpp | 14 +++++-- freedv-server/source/blank_panel.cpp | 8 +++- freedv-server/source/codec_noop.cpp | 8 +++- freedv-server/source/driver_manager.cpp | 38 +++++++++---------- freedv-server/source/drivers.h | 35 ++++++++++++----- freedv-server/source/framer_noop.cpp | 8 +++- freedv-server/source/keying_sink.cpp | 8 +++- freedv-server/source/libevent.cpp | 20 ++++++---- freedv-server/source/modem_noop.cpp | 8 +++- .../source/platform/linux/audio_out_alsa.cpp | 11 +++++- freedv-server/source/ptt_constant.cpp | 8 +++- freedv-server/source/text_constant.cpp | 8 +++- freedv-server/source/tone.cpp | 8 +++- 13 files changed, 134 insertions(+), 48 deletions(-) diff --git a/freedv-server/source/audio_sink.cpp b/freedv-server/source/audio_sink.cpp index 1715ae20..6059605a 100644 --- a/freedv-server/source/audio_sink.cpp +++ b/freedv-server/source/audio_sink.cpp @@ -37,22 +37,28 @@ namespace FreeDV { return length; } + std::size_t + AudioSink::ready() + { + return SIZE_MAX; + } + AudioOutput * Driver::AudioSink(const char * parameter) { return new ::FreeDV::AudioSink(parameter); } - std::size_t - AudioSink::ready() + std::ostream & + Enumerator::AudioSink(std::ostream & stream) { - return SIZE_MAX; + return stream; } static bool initializer() { - driver_manager()->register_audio_output("sink", Driver::AudioSink); + driver_manager()->register_audio_output("sink", Driver::AudioSink, Enumerator::AudioSink); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/blank_panel.cpp b/freedv-server/source/blank_panel.cpp index cf87b759..086f514b 100644 --- a/freedv-server/source/blank_panel.cpp +++ b/freedv-server/source/blank_panel.cpp @@ -37,10 +37,16 @@ namespace FreeDV { return new ::FreeDV::BlankPanel(parameter, interfaces); } + std::ostream & + Enumerator::BlankPanel(std::ostream & stream) + { + return stream; + } + static bool initializer() { - driver_manager()->register_user_interface("blank-panel", Driver::BlankPanel); + driver_manager()->register_user_interface("blank-panel", Driver::BlankPanel, Enumerator::BlankPanel); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/codec_noop.cpp b/freedv-server/source/codec_noop.cpp index b0c6fd3b..f50db6d3 100644 --- a/freedv-server/source/codec_noop.cpp +++ b/freedv-server/source/codec_noop.cpp @@ -108,10 +108,16 @@ namespace FreeDV { return new ::FreeDV::CodecNoOp(parameter); } + std::ostream & + Enumerator::CodecNoOp(std::ostream & stream) + { + return stream; + } + static bool initializer() { - driver_manager()->register_codec("no-op", Driver::CodecNoOp); + driver_manager()->register_codec("no-op", Driver::CodecNoOp, Enumerator::CodecNoOp); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/driver_manager.cpp b/freedv-server/source/driver_manager.cpp index f9623b72..b0cb1cf7 100644 --- a/freedv-server/source/driver_manager.cpp +++ b/freedv-server/source/driver_manager.cpp @@ -46,7 +46,7 @@ namespace FreeDV { } static void - place(const char * const key, FreeDV::Base * (*value)(const char *), DriverList * * const list) + place(const char * const key, FreeDV::Base * (*value)(const char *), std::ostream & (*enumerator)(std::ostream &), DriverList * * const list) { DriverList * next; @@ -171,58 +171,58 @@ namespace FreeDV { } void - DriverManager::register_audio_input(const char * key, AudioInput * (*creator)(const char *)) + DriverManager::register_audio_input(const char * key, AudioInput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)) { - place(key, (base_creator)creator, &audio_input_drivers); + place(key, (base_creator)creator, enumerator, &audio_input_drivers); } void - DriverManager::register_audio_output(const char * key, AudioOutput * (*creator)(const char *)) + DriverManager::register_audio_output(const char * key, AudioOutput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)) { - place(key, (base_creator)creator, &audio_output_drivers); + place(key, (base_creator)creator, enumerator, &audio_output_drivers); } void - DriverManager::register_codec(const char * key, Codec * (*creator)(const char *)) + DriverManager::register_codec(const char * key, Codec * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)) { - place(key, (base_creator)creator, &codecs); + place(key, (base_creator)creator, enumerator, &codecs); } void - DriverManager::register_framer(const char * key, Framer * (*creator)(const char *)) + DriverManager::register_framer(const char * key, Framer * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)) { - place(key, (base_creator)creator, &framers); + place(key, (base_creator)creator, enumerator, &framers); } void - DriverManager::register_keying_output(const char * key, KeyingOutput * (*creator)(const char *)) + DriverManager::register_keying_output(const char * key, KeyingOutput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)) { - place(key, (base_creator)creator, &keying_output_drivers); + place(key, (base_creator)creator, enumerator, &keying_output_drivers); } void - DriverManager::register_modem(const char * key, Modem * (*creator)(const char *)) + DriverManager::register_modem(const char * key, Modem * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)) { - place(key, (base_creator)creator, &modems); + place(key, (base_creator)creator, enumerator, &modems); } void - DriverManager::register_ptt_input(const char * key, PTTInput * (*creator)(const char *)) + DriverManager::register_ptt_input(const char * key, PTTInput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)) { - place(key, (base_creator)creator, &ptt_input_drivers); + place(key, (base_creator)creator, enumerator, &ptt_input_drivers); } void - DriverManager::register_text_input(const char * key, TextInput * (*creator)(const char *)) + DriverManager::register_text_input(const char * key, TextInput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)) { - place(key, (base_creator)creator, &text_input_drivers); + place(key, (base_creator)creator, enumerator, &text_input_drivers); } void - DriverManager::register_user_interface(const char * key, UserInterface * (*creator)(const char *, Interfaces *)) + DriverManager::register_user_interface(const char * key, UserInterface * (*creator)(const char *, Interfaces *), std::ostream & (*enumerator)(std::ostream &)) { - place(key, (base_creator)creator, &user_interface_drivers); + place(key, (base_creator)creator, enumerator, &user_interface_drivers); } DriverManager * const diff --git a/freedv-server/source/drivers.h b/freedv-server/source/drivers.h index f5f5f78b..13fae2d4 100644 --- a/freedv-server/source/drivers.h +++ b/freedv-server/source/drivers.h @@ -696,6 +696,10 @@ namespace FreeDV { return interfaces.print(stream); } + // The functions in the Driver and Enumerator namespaces are normally + // registered with the driver manager at run-time. There isn't a reason + // to reference them directly unless it's in a custom main for an embedded + // program. namespace Driver { AudioInput * Tone(const char * parameter); AudioOutput * AudioSink(const char * parameter); @@ -708,6 +712,19 @@ namespace FreeDV { TextInput * TextConstant(const char * parameter); UserInterface * BlankPanel(const char * parameter, Interfaces *); } + + namespace Enumerator { + std::ostream & Tone(std::ostream &); + std::ostream & AudioSink(std::ostream &); + std::ostream & CodecNoOp(std::ostream &); + std::ostream & FramerNoOp(std::ostream &); + std::ostream & KeyingSink(std::ostream &); + std::ostream & LibEvent(std::ostream &); + std::ostream & ModemNoOp(std::ostream &); + std::ostream & PTTConstant(std::ostream &); + std::ostream & TextConstant(std::ostream &); + std::ostream & BlankPanel(std::ostream &); + } } /// Namespace used for the entire program. @@ -797,47 +814,47 @@ namespace FreeDV { /// Register an audio input driver. /// \param driver The name of the driver. /// \param creator The coroutine that will instantiate the driver. - void register_audio_input(const char * driver, AudioInput * (*creator)(const char *)); + void register_audio_input(const char * driver, AudioInput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)); /// Register an audio input driver. /// \param driver The name of the driver. /// \param creator The coroutine that will instantiate the driver. - void register_audio_output(const char * driver, AudioOutput * (*creator)(const char *)); + void register_audio_output(const char * driver, AudioOutput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)); /// Register a codec. /// \param driver The name of the driver. /// \param creator The coroutine that will instantiate the driver. - void register_codec(const char * driver, Codec * (*creator)(const char *)); + void register_codec(const char * driver, Codec * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)); /// Register a protocol framer. /// \param driver The name of the driver. /// \param creator The coroutine that will instantiate the driver. - void register_framer(const char * driver, Framer * (*creator)(const char *)); + void register_framer(const char * driver, Framer * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)); /// Register a keying output driver. /// \param driver The name of the driver. /// \param creator The coroutine that will instantiate the driver. - void register_keying_output(const char * driver, KeyingOutput * (*creator)(const char *)); + void register_keying_output(const char * driver, KeyingOutput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)); /// Register a modem driver. /// \param driver The name of the driver. /// \param creator The coroutine that will instantiate the driver. - void register_modem(const char * driver, Modem * (*creator)(const char *)); + void register_modem(const char * driver, Modem * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)); /// Register a PTT input driver. /// \param driver The name of the driver. /// \param creator The coroutine that will instantiate the driver. - void register_ptt_input(const char * driver, PTTInput * (*creator)(const char *)); + void register_ptt_input(const char * driver, PTTInput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)); /// Register a text input driver. /// \param driver The name of the driver. /// \param creator The coroutine that will instantiate the driver. - void register_text_input(const char * driver, TextInput * (*creator)(const char *)); + void register_text_input(const char * driver, TextInput * (*creator)(const char *), std::ostream & (*enumerator)(std::ostream &)); /// Register a user interface driver. /// \param driver The name of the driver. /// \param creator The coroutine that will instantiate the driver. - void register_user_interface(const char * driver, UserInterface * (*creator)(const char *, Interfaces *)); + void register_user_interface(const char * driver, UserInterface * (*creator)(const char *, Interfaces *), std::ostream & (*enumerator)(std::ostream &)); }; /// Write the driver information from the DriverManager object onto a stream, diff --git a/freedv-server/source/framer_noop.cpp b/freedv-server/source/framer_noop.cpp index 1c67e5c5..ac8c6c09 100644 --- a/freedv-server/source/framer_noop.cpp +++ b/freedv-server/source/framer_noop.cpp @@ -149,10 +149,16 @@ namespace FreeDV { return new ::FreeDV::FramerNoOp(parameter); } + std::ostream & + Enumerator::FramerNoOp(std::ostream & stream) + { + return stream; + } + static bool initializer() { - driver_manager()->register_framer("no-op", Driver::FramerNoOp); + driver_manager()->register_framer("no-op", Driver::FramerNoOp, Enumerator::FramerNoOp); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/keying_sink.cpp b/freedv-server/source/keying_sink.cpp index f1008013..91a74dec 100644 --- a/freedv-server/source/keying_sink.cpp +++ b/freedv-server/source/keying_sink.cpp @@ -50,10 +50,16 @@ namespace FreeDV { return new ::FreeDV::KeyingSink(parameter); } + std::ostream & + Enumerator::KeyingSink(std::ostream & stream) + { + return stream; + } + static bool initializer() { - driver_manager()->register_keying_output("sink", Driver::KeyingSink); + driver_manager()->register_keying_output("sink", Driver::KeyingSink, Enumerator::KeyingSink); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/libevent.cpp b/freedv-server/source/libevent.cpp index 7bf1b8ce..6103c7cf 100644 --- a/freedv-server/source/libevent.cpp +++ b/freedv-server/source/libevent.cpp @@ -52,12 +52,6 @@ namespace FreeDV { { } - EventHandler * - Driver::LibEvent(const char * parameter) - { - return new ::FreeDV::LibEvent(parameter); - } - void LibEvent::monitor(int fd, unsigned int type, void * private_data, void (*event)(int fd, unsigned int type, void * private_data)) @@ -69,10 +63,22 @@ namespace FreeDV { { } + EventHandler * + Driver::LibEvent(const char * parameter) + { + return new ::FreeDV::LibEvent(parameter); + } + + std::ostream & + Enumerator::LibEvent(std::ostream & stream) + { + return stream; + } + static bool initializer() { - driver_manager()->register_codec("no-op", Driver::CodecNoOp); + driver_manager()->register_codec("no-op", Driver::CodecNoOp, Enumerator::LibEvent); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/modem_noop.cpp b/freedv-server/source/modem_noop.cpp index a87ba667..d4183709 100644 --- a/freedv-server/source/modem_noop.cpp +++ b/freedv-server/source/modem_noop.cpp @@ -116,10 +116,16 @@ namespace FreeDV { return new ::FreeDV::ModemNoOp(parameter); } + std::ostream & + Enumerator::ModemNoOp(std::ostream & stream) + { + return stream; + } + static bool initializer() { - driver_manager()->register_modem("no-op", Driver::ModemNoOp); + driver_manager()->register_modem("no-op", Driver::ModemNoOp, Enumerator::ModemNoOp); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/platform/linux/audio_out_alsa.cpp b/freedv-server/source/platform/linux/audio_out_alsa.cpp index b2a78ab6..345b4ef3 100644 --- a/freedv-server/source/platform/linux/audio_out_alsa.cpp +++ b/freedv-server/source/platform/linux/audio_out_alsa.cpp @@ -61,6 +61,12 @@ namespace FreeDV { return new ::FreeDV::AudioOutALSA(parameter); } + ostream & + Enumerator::AudioOutALSA(ostream & stream) + { + return stream; + } + std::size_t AudioOutALSA::ready() { @@ -70,7 +76,10 @@ namespace FreeDV { static bool initializer() { - driver_manager()->register_audio_output("alsa", Driver::AudioOutALSA); + driver_manager()->register_audio_output( + "alsa", + Driver::AudioOutALSA, + Enumerator::AudioOutALSA); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/ptt_constant.cpp b/freedv-server/source/ptt_constant.cpp index cf3ca4de..a2a556bb 100644 --- a/freedv-server/source/ptt_constant.cpp +++ b/freedv-server/source/ptt_constant.cpp @@ -69,10 +69,16 @@ namespace FreeDV { return new ::FreeDV::PTTConstant(parameter); } + std::ostream & + Enumerator::PTTConstant(std::ostream & stream) + { + return stream; + } + static bool initializer() { - driver_manager()->register_ptt_input("constant", Driver::PTTConstant); + driver_manager()->register_ptt_input("constant", Driver::PTTConstant, Enumerator::PTTConstant); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/text_constant.cpp b/freedv-server/source/text_constant.cpp index 8acbb3f3..25e57ad9 100644 --- a/freedv-server/source/text_constant.cpp +++ b/freedv-server/source/text_constant.cpp @@ -64,10 +64,16 @@ namespace FreeDV { return new ::FreeDV::TextConstant(parameter); } + std::ostream & + Enumerator::TextConstant(std::ostream & stream) + { + return stream; + } + static bool initializer() { - driver_manager()->register_text_input("constant", Driver::TextConstant); + driver_manager()->register_text_input("constant", Driver::TextConstant, Enumerator::TextConstant); return true; } static const bool initialized = initializer(); diff --git a/freedv-server/source/tone.cpp b/freedv-server/source/tone.cpp index bfb69511..e444a0dd 100644 --- a/freedv-server/source/tone.cpp +++ b/freedv-server/source/tone.cpp @@ -152,10 +152,16 @@ namespace FreeDV { return new ::FreeDV::Tone(parameter); } + std::ostream & + Enumerator::Tone(std::ostream & stream) + { + return stream; + } + static bool initializer() { - driver_manager()->register_audio_input("tone", Driver::Tone); + driver_manager()->register_audio_input("tone", Driver::Tone, Enumerator::Tone); return true; } static const bool initialized = initializer(); -- 2.25.1