adjustments to build nascent push2 surface support
[ardour.git] / libs / surfaces / push2 / push2.h
1 /*
2     Copyright (C) 2016 Paul Davis
3
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.
8
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.
13
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.
17 */
18
19 #ifndef __ardour_push2_h__
20 #define __ardour_push2_h__
21
22 #include <vector>
23 #include <map>
24 #include <list>
25 #include <set>
26
27 #include <libusb.h>
28
29 #define ABSTRACT_UI_EXPORTS
30 #include "pbd/abstract_ui.h"
31 #include "midi++/types.h"
32 #include "ardour/types.h"
33 #include "control_protocol/control_protocol.h"
34
35 #define ABLETON 0x2982
36 #define PUSH2   0x1967
37
38 namespace ArdourSurface {
39
40 struct Push2Request : public BaseUI::BaseRequestObject {
41 public:
42         Push2Request () {}
43         ~Push2Request () {}
44 };
45
46 class Push2 : public ARDOUR::ControlProtocol
47             , public AbstractUI<Push2Request>
48 {
49    public:
50         Push2 (ARDOUR::Session&);
51         ~Push2 ();
52
53         static bool probe ();
54         static void* request_factory (uint32_t);
55
56    private:
57         libusb_device_handle *handle;
58         void do_request (Push2Request*);
59         int stop ();
60 };
61
62
63 } /* namespace */
64
65 #endif /* __ardour_push2_h__ */