From: bruceperens Date: Thu, 6 Mar 2014 23:14:30 +0000 (+0000) Subject: Manage protocol framers. X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=8a9782eaef56a7b89750b0b9a70edc56bd67c282;p=freetel-svn-tracking.git Manage protocol framers. git-svn-id: https://svn.code.sf.net/p/freetel/code@1408 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/freedv-server/source/big_main.cpp b/freedv-server/source/big_main.cpp index b60cc0e0..7123ed3d 100644 --- a/freedv-server/source/big_main.cpp +++ b/freedv-server/source/big_main.cpp @@ -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; diff --git a/freedv-server/source/driver_manager.cpp b/freedv-server/source/driver_manager.cpp index 1ac0e3dc..dbd5ad62 100644 --- a/freedv-server/source/driver_manager.cpp +++ b/freedv-server/source/driver_manager.cpp @@ -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 *)) { diff --git a/freedv-server/source/drivers.h b/freedv-server/source/drivers.h index 3560a3bb..52e6a0f2 100644 --- a/freedv-server/source/drivers.h +++ b/freedv-server/source/drivers.h @@ -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.