Manage protocol framers.
authorbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 6 Mar 2014 23:14:30 +0000 (23:14 +0000)
committerbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 6 Mar 2014 23:14:30 +0000 (23:14 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1408 01035d8c-6547-0410-b346-abe4f91aad63

freedv-server/source/big_main.cpp
freedv-server/source/driver_manager.cpp
freedv-server/source/drivers.h

index b60cc0e005b03c38fc18d982813981f00ef4bce6..7123ed3d6a3861f0682f0f380943f6b9cf009481 100644 (file)
@@ -74,6 +74,7 @@ static const struct option options[] = {
   { "config",          no_argument,       0, 'C' },
   { "drivers",         no_argument,       0, 'd' },
   { "default",         no_argument,       0, 'D' },
+  { "framer",          required_argument, 0, 'f' },
   { "gui",             required_argument, 0, 'g' },
   { "help",            no_argument,       0, 'h' },
   { "interface",       required_argument, 0, 'i' },
@@ -100,6 +101,7 @@ main(int argc, char * * argv)
   if ( argc > 1 ) {
     while ((command = getopt_long(argc, argv, "c:dhi:k:l:m:M:n:p:r:t:x:", options, NULL)) != -1) {
       switch (command) {
+      case 'f':
       case 'g':
       case 'i':
       case 'k':
@@ -133,6 +135,9 @@ main(int argc, char * * argv)
       case 'D':
         i.fill_in();
         break;
+      case 'f':
+        i.framer = driver_manager.framer(driver, parameter);
+        break;
       case 'g':
         i.user_interface = driver_manager.user_interface(driver, parameter, &i);
         break;
index 1ac0e3dcdf6fb4770ba8b78ad48553b8036ba282..dbd5ad62bc85a22af4f91868ce3ea82f1eb81525 100644 (file)
@@ -27,34 +27,47 @@ namespace FreeDV {
     for (auto i = audio_input_drivers.begin(); i != audio_input_drivers.end(); i++ )
       s << i->first << " ";
     s << endl;
+
     s << "AudioOutput: ";
     for (auto i = audio_output_drivers.begin(); i != audio_output_drivers.end(); i++ )
       s << i->first << " ";
     s << endl;
+
     s << "Codec: ";
     for (auto i = codecs.begin(); i != codecs.end(); i++ )
       s << i->first << " ";
     s << endl;
+
+    s << "Framer: ";
+    for (auto i = framers.begin(); i != framers.end(); i++ )
+      s << i->first << " ";
+    s << endl;
+
     s << "KeyingOutput: ";
     for (auto i = keying_output_drivers.begin(); i != keying_output_drivers.end(); i++ )
       s << i->first << " ";
     s << endl;
+
     s << "Modem: ";
     for (auto i = modems.begin(); i != modems.end(); i++ )
       s << i->first << " ";
     s << endl;
+
     s << "PTTInput: ";
     for (auto i = ptt_input_drivers.begin(); i != ptt_input_drivers.end(); i++ )
       s << i->first << " ";
     s << endl;
+
     s << "TextInput: ";
     for (auto i = text_input_drivers.begin(); i != text_input_drivers.end(); i++ )
       s << i->first << " ";
     s << endl;
+
     s << "UserInterface: ";
     for (auto i = user_interface_drivers.begin(); i != user_interface_drivers.end(); i++ )
       s << i->first << " ";
     s << endl;
+
     return s;
   }
 
@@ -85,6 +98,17 @@ namespace FreeDV {
       return 0;
   }
  
+  Framer *
+  DriverManager::framer(const char * driver, const char * parameter)
+  {
+    Framer * (* const creator)(const char * parameter) = framers[driver];
+
+    if(creator)
+      return creator(parameter);
+    else
+      return 0;
+  }
   KeyingOutput *
   DriverManager::keying_output(const char * driver, const char * parameter)
   {
@@ -158,6 +182,12 @@ namespace FreeDV {
     codecs[driver] = creator;
   }
 
+  void
+  DriverManager::register_framer(const char * driver, Framer * (*creator)(const char *))
+  {
+    framers[driver] = creator;
+  }
+
   void
   DriverManager::register_keying_output(const char * driver, KeyingOutput * (*creator)(const char *))
   {
index 3560a3bb89557df14c39b9fedc20758a1c5dcc41..52e6a0f2d29864644519fee50d1b380c91b83612 100644 (file)
@@ -816,6 +816,11 @@ namespace FreeDV {
     /// \param creator The coroutine that will instantiate the driver.
     void               register_codec(const char * driver, Codec * (*creator)(const char *));
 
+    /// 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 *));
+
     /// Register a keying output driver.
     /// \param driver The name of the driver.
     /// \param creator The coroutine that will instantiate the driver.