diff options
Diffstat (limited to 'libs/midi++2/midifactory.cc')
-rw-r--r-- | libs/midi++2/midifactory.cc | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libs/midi++2/midifactory.cc b/libs/midi++2/midifactory.cc index 0912c8ae7b..cb8846214e 100644 --- a/libs/midi++2/midifactory.cc +++ b/libs/midi++2/midifactory.cc @@ -17,25 +17,39 @@ $Id$ */ +#include <fcntl.h> + #include <pbd/error.h> +#include <pbd/convert.h> #include <midi++/types.h> #include <midi++/factory.h> #include <midi++/nullmidi.h> #include <midi++/fifomidi.h> +std::string MIDI::Null_MidiPort::typestring = "null"; +std::string MIDI::FIFO_MidiPort::typestring = "fifo"; + #ifdef WITH_ALSA #include <midi++/alsa_sequencer.h> #include <midi++/alsa_rawmidi.h> + +std::string MIDI::ALSA_SequencerMidiPort::typestring = "alsa/sequencer"; +std::string MIDI::ALSA_RawMidiPort::typestring = "alsa/raw"; + #endif // WITH_ALSA #ifdef WITH_COREMIDI #include <midi++/coremidi_midiport.h> + +std::string MIDI::CoreMidi_MidiPort::typestring = "coremidi"; + #endif // WITH_COREMIDI using namespace std; using namespace MIDI; +using namespace PBD; Port * PortFactory::create_port (PortRequest &req) @@ -132,3 +146,50 @@ PortFactory::default_port_type () PBD::fatal << "programming error: no default port type defined in midifactory.cc" << endmsg; } + +Port::Type +PortFactory::string_to_type (const string& xtype) +{ + if (0){ +#ifdef WITH_ALSA + } else if (strings_equal_ignore_case (xtype, ALSA_RawMidiPort::typestring)) { + return Port::ALSA_RawMidi; + } else if (strings_equal_ignore_case (xtype, ALSA_SequencerMidiPort::typestring)) { + return Port::ALSA_Sequencer; +#endif +#ifdef WITH_COREMIDI + } else if (strings_equal_ignore_case (xtype, CoreMidi_MidiPort::typestring)) { + return Port::CoreMidi_MidiPort; +#endif + } else if (strings_equal_ignore_case (xtype, Null_MidiPort::typestring)) { + return Port::Null; + } else if (strings_equal_ignore_case (xtype, FIFO_MidiPort::typestring)) { + return Port::FIFO; + } + + return Port::Unknown; +} + +string +PortFactory::mode_to_string (int mode) +{ + if (mode == O_RDONLY) { + return "input"; + } else if (mode == O_WRONLY) { + return "output"; + } + + return "duplex"; +} + +int +PortFactory::string_to_mode (const string& str) +{ + if (strings_equal_ignore_case (str, "output") || strings_equal_ignore_case (str, "out")) { + return O_WRONLY; + } else if (strings_equal_ignore_case (str, "input") || strings_equal_ignore_case (str, "in")) { + return O_RDONLY; + } + + return O_RDWR; +} |