summaryrefslogtreecommitdiff
path: root/libs/midi++2/midi++/port.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-04-23 15:29:45 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-04-23 15:29:45 +0000
commit1660f00ff3777b2bd52a4c73fe9aa43050f8ad34 (patch)
tree83ab8e6b2ee51302372fadb4d7ffe98340cde61f /libs/midi++2/midi++/port.h
parent4bfdcc18bd5284879d02a4ed9f44905ba84058d4 (diff)
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
Diffstat (limited to 'libs/midi++2/midi++/port.h')
-rw-r--r--libs/midi++2/midi++/port.h100
1 files changed, 6 insertions, 94 deletions
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<void> MakeConnections;
static PBD::Signal0<void> 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<double> > output_fifo;
Evoral::EventRingBuffer<timestamp_t> 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<XMLNode> ports;
-};
-
-std::ostream & operator << ( std::ostream & os, const Port & port );
-
} // namespace MIDI
#endif // __libmidi_port_h__