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();
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();
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();
}
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;
}
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
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);
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.
/// 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,
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();
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();
{
}
- 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))
{
}
+ 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();
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();
return new ::FreeDV::AudioOutALSA(parameter);
}
+ ostream &
+ Enumerator::AudioOutALSA(ostream & stream)
+ {
+ return stream;
+ }
+
std::size_t
AudioOutALSA::ready()
{
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();
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();
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();
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();