midway snapshot of work done on managing Region & Source lifetimes correctly. may...
[ardour.git] / libs / midi++2 / fd_midiport.cc
index ef387e7c49745cf477baf06ebd7bbd11ea5267f2..9736d2b4da11cec7f39b3395075bb1cef50e7019 100644 (file)
 
 #include <fcntl.h>
 #include <cerrno>
+#include <cstring>
 
-#include <pbd/error.h>
-#include <pbd/pathscanner.h>
+#include "pbd/error.h"
+#include "pbd/pathscanner.h"
 
-#include <midi++/types.h>
-#include <midi++/fd_midiport.h>
+#include "midi++/types.h"
+#include "midi++/fd_midiport.h"
 
 using namespace std;
 using namespace MIDI;
+using namespace PBD;
 
 string *FD_MidiPort::midi_dirpath = 0;
 string *FD_MidiPort::midi_filename_pattern = 0;
 
-FD_MidiPort::FD_MidiPort (PortRequest &req, 
+FD_MidiPort::FD_MidiPort (const XMLNode& node,
                          const string &dirpath,
                          const string &pattern) 
-       : Port (req)
+       : Port (node)
 {      
-       open (req);
+       Descriptor desc (node);
+
+       open (desc);
 
        if (_fd < 0) {
                switch (errno) {
                case EBUSY:
                        error << "MIDI: port device in use" << endmsg;
-                       req.status = PortRequest::Busy;
                        break;
                case ENOENT:
                        error << "MIDI: no such port device" << endmsg;
-                       req.status = PortRequest::NoSuchFile;
                        break;
                case EACCES:
                        error << "MIDI: access to port denied" << endmsg;
-                       req.status = PortRequest::NotAllowed;
                        break;
                default:
-                       req.status = PortRequest::Unknown;
+                       break;
                } 
        } else {
                _ok = true;
-               req.status = PortRequest::OK;
 
                if (midi_dirpath == 0) {
                        midi_dirpath = new string (dirpath);
                        midi_filename_pattern = new string (pattern);
                }
 
-               if (req.mode & O_NONBLOCK == 0) {
+               if ((desc.mode & O_NONBLOCK) == 0) {
                        /* we unconditionally set O_NONBLOCK during
                           open, but the request didn't ask for it,
                           so remove it.
@@ -79,11 +79,11 @@ FD_MidiPort::FD_MidiPort (PortRequest &req,
 }
 
 void
-FD_MidiPort::open (PortRequest &req)
+FD_MidiPort::open (const Descriptor& desc)
 
 {
-       int mode = req.mode | O_NONBLOCK;
-       _fd = ::open (req.devname, mode);
+       int mode = desc.mode | O_NONBLOCK;
+       _fd = ::open (desc.device.c_str(), mode);
 }
 
 vector<string *> *
@@ -92,7 +92,7 @@ FD_MidiPort::list_devices ()
 {
        PathScanner scanner;
 
-       return scanner (*midi_dirpath, *midi_filename_pattern, false, true);
+       return scanner (*midi_dirpath, *midi_filename_pattern, false, true, false);
 }      
 
 int
@@ -135,7 +135,7 @@ FD_MidiPort::do_slow_write (byte *msg, unsigned int msglen)
                }
 
                bytes_written++;
-               for (i = 0; i < slowdown * 10000; i++);
+               for (i = 0; i < slowdown * 10000; i++) {}
        }
 
 
@@ -151,7 +151,7 @@ FD_MidiPort::do_slow_write (byte *msg, unsigned int msglen)
 }
 
 int
-FD_MidiPort::read (byte* buf, size_t max, timestamp_t timestamp)
+FD_MidiPort::read (byte* buf, size_t max)
 {
        int nread;