2 Copyright (C) 2016 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 #ifndef __ardour_push2_h__
20 #define __ardour_push2_h__
29 #include <cairomm/refptr.h>
30 #include <glibmm/threads.h>
32 #define ABSTRACT_UI_EXPORTS
33 #include "pbd/abstract_ui.h"
34 #include "midi++/types.h"
35 #include "ardour/types.h"
36 #include "control_protocol/control_protocol.h"
38 #include "midi_byte_array.h"
54 namespace ArdourSurface {
56 struct Push2Request : public BaseUI::BaseRequestObject {
62 class Push2 : public ARDOUR::ControlProtocol
63 , public AbstractUI<Push2Request>
66 Push2 (ARDOUR::Session&);
70 static void* request_factory (uint32_t);
72 int set_active (bool yn);
75 libusb_device_handle *handle;
76 Glib::Threads::Mutex fb_lock;
77 uint8_t frame_header[16];
78 uint16_t* device_frame_buffer[2];
80 Cairo::RefPtr<Cairo::ImageSurface> frame_buffer;
81 sigc::connection vblank_connection;
83 static const int cols;
84 static const int rows;
85 static const int pixels_per_row;
87 void do_request (Push2Request*);
130 LED (uint8_t i, Type t, uint8_t e) : id (i), type (t), extra (e), color_index (0), state (Off) {}
131 LED () : id (0), type (Pad), extra (0), color_index (0), state (Off) {}
133 MidiByteArray update ();
135 void set_color (uint8_t color_index);
136 void set_state (State state);
139 std::map<int,LED> leds;
140 void set_led_color (uint32_t id, uint8_t color_index);
141 void set_led_state (uint32_t id, LED::State);
142 void build_led_map ();
144 MIDI::Port* _input_port[2];
145 MIDI::Port* _output_port[2];
146 boost::shared_ptr<ARDOUR::Port> _async_in[2];
147 boost::shared_ptr<ARDOUR::Port> _async_out[2];
149 void write (int port, const MidiByteArray&);
155 #endif /* __ardour_push2_h__ */