substantial overhaul of MCU code - no more separate thread, just connect to signals...
[ardour.git] / libs / surfaces / mackie / surface_port.h
index 87419f1bcdb08ae494d250b15a046e5921d1dcb6..86ec8ffd9e38bd72f6283587df3885d552142683 100644 (file)
@@ -18,9 +18,9 @@
 #ifndef surface_port_h
 #define surface_port_h
 
-#include <sigc++/signal.h>
 #include <glibmm/thread.h>
 
+#include "pbd/signals.h"
 #include "midi_byte_array.h"
 #include "types.h"
 
@@ -34,7 +34,7 @@ namespace Mackie
 /**
        Make a relationship between a midi port and a Mackie device.
 */
-class SurfacePort : public sigc::trackable
+class SurfacePort
 {
 public:
        SurfacePort( MIDI::Port & port, int number );
@@ -48,35 +48,35 @@ public:
 
        /// read bytes from the port. They'll either end up in the
        /// parser, or if that's not active they'll be returned
-       MidiByteArray read();
+       virtual MidiByteArray read();
        
        /// an easier way to output bytes via midi
-       void write( const MidiByteArray & );
+       virtual void write( const MidiByteArray & );
        
        /// write a sysex message
        void write_sysex( const MidiByteArray & mba );
        void write_sysex( MIDI::byte msg );
 
-       // return the correct sysex header for this port
+       /// return the correct sysex header for this port
        virtual const MidiByteArray & sysex_hdr() const = 0;
 
-       MIDI::Port & port() { return _port; }
-       const MIDI::Port & port() const { return _port; }
+       MIDI::Port & port() { return *_port; }
+       const MIDI::Port & port() const { return *_port; }
        
        // all control notofications are sent from here
-       sigc::signal<void, SurfacePort &, Control &, const ControlState &> control_event;
+       PBD::Signal3<void,SurfacePort &, Control &, const ControlState &> control_event;
        
        // emitted just before the port goes into initialisation
        // where it tries to establish that its device is connected
-       sigc::signal<void> init_event;
+       PBD::Signal0<void> init_event;
        
        // emitted when the port completes initialisation successfully
-       sigc::signal<void> active_event;
+       PBD::Signal0<void> active_event;
 
        // emitted when the port goes inactive (ie a read or write failed)
-       sigc::signal<void> inactive_event;
+       PBD::Signal0<void> inactive_event;
        
-       // the port number - master is 0, extenders are 1,2,3,4
+       // the port number - master is 0(extenders are 1((,4
        virtual int number() const { return _number; }
        
        // number of strips handled by this port. Usually 8.
@@ -85,8 +85,12 @@ public:
        virtual bool active() const { return _active; }
        virtual void active( bool yn ) { _active = yn; }
        
+protected:
+       /// Only for use by DummyPort
+       SurfacePort();
+       
 private:
-       MIDI::Port & _port;
+       MIDI::Port * _port;
        int _number;
        bool _active;