Add enumerators.
authorbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 8 Mar 2014 02:21:49 +0000 (02:21 +0000)
committerbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 8 Mar 2014 02:21:49 +0000 (02:21 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1418 01035d8c-6547-0410-b346-abe4f91aad63

13 files changed:
freedv-server/source/audio_sink.cpp
freedv-server/source/blank_panel.cpp
freedv-server/source/codec_noop.cpp
freedv-server/source/driver_manager.cpp
freedv-server/source/drivers.h
freedv-server/source/framer_noop.cpp
freedv-server/source/keying_sink.cpp
freedv-server/source/libevent.cpp
freedv-server/source/modem_noop.cpp
freedv-server/source/platform/linux/audio_out_alsa.cpp
freedv-server/source/ptt_constant.cpp
freedv-server/source/text_constant.cpp
freedv-server/source/tone.cpp

index 1715ae20db726038c07b74caf7e16e9c79d27de9..6059605ad50fe444425b52418d401dd91f549d23 100644 (file)
@@ -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();
index cf87b7596127473aa2ee83b8fce1e0eea52ed1cc..086f514bcefa56955760112358de0ac82576b8ca 100644 (file)
@@ -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();
index b0c6fd3b4a21ca2e43d38ed458b25926274d2b54..f50db6d300838e36536cbc4c4bc874e96fce9297 100644 (file)
@@ -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();
index f9623b721afb67ab5951cda0645c4fe36f6aa95d..b0cb1cf75a375a4baf021de97ca2ef607524b3f5 100644 (file)
@@ -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
index f5f5f78b8effcd304c1f75ad73ca5d5ac9d04a55..13fae2d448129e2f36968ce29e9060e2e8c34629 100644 (file)
@@ -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,
index 1c67e5c5b40f6d80a1dc24356309955ac94ef334..ac8c6c098f49b76ae426347d08c427afdfa1d48f 100644 (file)
@@ -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();
index f100801362c6581fcc9cb49500ef82a3866a6db7..91a74dec3ae2bc7deb5a7c43b9d5c1b083b68f93 100644 (file)
@@ -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();
index 7bf1b8ceacc04c9e99a27ab4fcddc94ef9c85adf..6103c7cf4499021f72fe06003a4e99f43a00857a 100644 (file)
@@ -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();
index a87ba6673f294f7ab3b24813fb56fd56a2cd0e76..d418370964559cd772be8cb844263be14c0f6acc 100644 (file)
@@ -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();
index b2a78ab6cb7be7f60bee6bbba742f30854811f99..345b4ef38319c63b6a11e9c0fe87f6772052bf35 100644 (file)
@@ -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();
index cf3ca4de529d3d6d04f49419a75b4a88dba46cba..a2a556bbcc7f2bde9ff311bed7d5fc841fcb93c0 100644 (file)
@@ -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();
index 8acbb3f395b7e00feff8a6589510dc136166bc72..25e57ad96a9c760d26715ee1d4d8dcdacbf022d5 100644 (file)
@@ -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();
index bfb6951150f47f0ac916cc6a0d36ec4611f3b965..e444a0dd3e3f00d79051f30176da39e2242a0ff4 100644 (file)
@@ -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();