From 1660f00ff3777b2bd52a4c73fe9aa43050f8ad34 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 23 Apr 2012 15:29:45 +0000 Subject: libmidi++: split apart "base-y" aspects of MIDI::Port into MIDI::PortBase and make MIDI::Port derive from it. This actually makes MIDI::Port effectively into MIDI::JackPort, but i'm not interested in the name changing at that level at this moment in time git-svn-id: svn://localhost/ardour2/branches/3.0@12064 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/midi++2/midi++/port.h | 100 +++------------------------------------------ 1 file changed, 6 insertions(+), 94 deletions(-) (limited to 'libs/midi++2/midi++/port.h') diff --git a/libs/midi++2/midi++/port.h b/libs/midi++2/midi++/port.h index 6b4381d496..e7b532013e 100644 --- a/libs/midi++2/midi++/port.h +++ b/libs/midi++2/midi++/port.h @@ -34,98 +34,30 @@ #include "midi++/types.h" #include "midi++/parser.h" +#include "midi++/port_base.h" namespace MIDI { class Channel; class PortRequest; -class Port { +class Port : public PortBase { public: - enum Flags { - IsInput = JackPortIsInput, - IsOutput = JackPortIsOutput, - }; - - Port (std::string const &, Flags, jack_client_t *); + Port (std::string const &, PortBase::Flags, jack_client_t *); Port (const XMLNode&, jack_client_t *); ~Port (); XMLNode& get_state () const; void set_state (const XMLNode&); - // FIXME: make Manager a friend of port so these can be hidden? - - /* Only for use by MidiManager. Don't ever call this. */ void cycle_start (pframes_t nframes); - /* Only for use by MidiManager. Don't ever call this. */ void cycle_end (); - /** Write a message to port. - * @param msg Raw MIDI message to send - * @param msglen Size of @a msg - * @param timestamp Time stamp in frames of this message (relative to cycle start) - * @return number of bytes successfully written - */ + void parse (framecnt_t timestamp); int write (byte *msg, size_t msglen, timestamp_t timestamp); - - /** Read raw bytes from a port. - * @param buf memory to store read data in - * @param bufsize size of @a buf - * @return number of bytes successfully read, negative if error - */ int read (byte *buf, size_t bufsize); - - void parse (framecnt_t timestamp); - - /** Write a message to port. - * @return true on success. - * FIXME: describe semantics here - */ - int midimsg (byte *msg, size_t len, timestamp_t timestamp) { - return !(write (msg, len, timestamp) == (int) len); - } - - bool clock (timestamp_t timestamp); - - /* select(2)/poll(2)-based I/O */ - - /** Get the file descriptor for port. - * @return File descriptor, or -1 if not selectable. - */ - int selectable () const { - return xthread.selectable(); - } - - Channel *channel (channel_t chn) { - return _channel[chn&0x7F]; - } - - Parser* parser () { - return _parser; - } - - const char *name () const { return _tagname.c_str(); } - bool ok () const { return _ok; } - - bool centrally_parsed() const { return _centrally_parsed; } - void set_centrally_parsed(bool yn) { _centrally_parsed = yn; } - - bool receives_input () const { - return _flags == IsInput; - } - - bool sends_output () const { - return _flags == IsOutput; - } - - struct Descriptor { - std::string tag; - Flags flags; - - Descriptor (const XMLNode&); - XMLNode& get_state(); - }; + void drain (int check_interval_usecs); + int selectable () const { return xthread.selectable(); } pframes_t nframes_this_cycle() const { return _nframes_this_cycle; } @@ -136,30 +68,19 @@ class Port { static pthread_t get_process_thread () { return _process_thread; } static bool is_process_thread(); - static std::string state_node_name; - static PBD::Signal0 MakeConnections; static PBD::Signal0 JackHalted; private: - bool _ok; bool _currently_in_cycle; pframes_t _nframes_this_cycle; - std::string _tagname; - size_t _number; - Channel* _channel[16]; - Parser* _parser; jack_client_t* _jack_client; jack_port_t* _jack_port; - framecnt_t _last_read_index; timestamp_t _last_write_timestamp; RingBuffer< Evoral::Event > output_fifo; Evoral::EventRingBuffer input_fifo; Glib::Mutex output_fifo_lock; CrossThreadChannel xthread; - Flags _flags; - bool _centrally_parsed; - int create_port (); @@ -177,15 +98,6 @@ private: }; -struct PortSet { - PortSet (std::string str) : owner (str) { } - - std::string owner; - std::list ports; -}; - -std::ostream & operator << ( std::ostream & os, const Port & port ); - } // namespace MIDI #endif // __libmidi_port_h__ -- cgit v1.2.3