{ "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' },
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':
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;
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;
}
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)
{
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 *))
{
/// \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.