1 #ifndef ardour_tranzport_control_protocol_h
2 #define ardour_tranzport_control_protocol_h
7 #include <pbd/lockmonitor.h>
10 #include <ardour/control_protocol.h>
11 #include <ardour/types.h>
13 #include <pbd/abstract_ui.h>
15 extern BaseUI::RequestType LEDChange;
16 extern BaseUI::RequestType Print;
17 extern BaseUI::RequestType SetCurrentTrack;
19 struct TranzportRequest : public BaseUI::BaseRequestObject {
27 class TranzportControlProtocol : public ARDOUR::ControlProtocol, public AbstractUI<TranzportRequest>
30 TranzportControlProtocol (ARDOUR::Session&);
31 virtual ~TranzportControlProtocol();
33 int set_active (bool yn);
35 bool caller_is_ui_thread();
38 static const int VENDORID = 0x165b;
39 static const int PRODUCTID = 0x8101;
40 static const int READ_ENDPOINT = 0x81;
41 static const int WRITE_ENDPOINT = 0x02;
42 const static int STATUS_OFFLINE = 0xff;
43 const static int STATUS_ONLINE = 0x01;
44 const static uint8_t WheelDirectionThreshold = 0x3f;
57 ButtonBattery = 0x00004000,
58 ButtonBacklight = 0x00008000,
59 ButtonTrackLeft = 0x04000000,
60 ButtonTrackRight = 0x40000000,
61 ButtonTrackRec = 0x00040000,
62 ButtonTrackMute = 0x00400000,
63 ButtonTrackSolo = 0x00000400,
64 ButtonUndo = 0x80000000,
65 ButtonIn = 0x02000000,
66 ButtonOut = 0x20000000,
67 ButtonPunch = 0x00800000,
68 ButtonLoop = 0x00080000,
69 ButtonPrev = 0x00020000,
70 ButtonAdd = 0x00200000,
71 ButtonNext = 0x00000200,
72 ButtonRewind = 0x01000000,
73 ButtonFastForward = 0x10000000,
74 ButtonStop = 0x00010000,
75 ButtonPlay = 0x00100000,
76 ButtonRecord = 0x00000100,
77 ButtonShift = 0x08000000
101 uint8_t _device_status;
102 usb_dev_handle* udev;
104 ARDOUR::Route* current_route;
105 uint32_t current_track_id;
106 WheelMode wheel_mode;
107 WheelShiftMode wheel_shift_mode;
108 DisplayMode display_mode;
109 ARDOUR::gain_t gain_fraction;
111 void do_request (TranzportRequest*);
113 PBD::Lock update_lock;
114 char current_screen[2][20];
115 char pending_screen[2][20];
117 bool pending_lights[7];
123 uint32_t last_frames;
124 jack_nframes_t last_where;
125 ARDOUR::gain_t last_track_gain;
126 uint32_t last_meter_fill;
127 struct timeval last_wheel_motion;
133 int read (uint32_t timeout_override = 0);
134 int write (uint8_t* cmd, uint32_t timeout_override = 0);
137 int open_core (struct usb_device*);
140 void print (int row, int col, const char* text);
141 int light_on (LightID);
142 int light_off (LightID);
145 void enter_big_meter_mode ();
146 void enter_normal_display_mode ();
148 void next_display_mode ();
150 void normal_update ();
152 void show_current_track ();
153 void show_track_gain ();
154 void show_transport_time ();
155 void show_wheel_mode ();
165 void next_wheel_mode ();
166 void next_wheel_shift_mode ();
168 void set_current_track (ARDOUR::Route*);
171 void step_gain_up ();
172 void step_gain_down ();
173 void step_pan_right ();
174 void step_pan_left ();
176 static void* _monitor_work (void* arg);
177 void* monitor_work ();
179 void button_event_battery_press (bool shifted);
180 void button_event_battery_release (bool shifted);
181 void button_event_backlight_press (bool shifted);
182 void button_event_backlight_release (bool shifted);
183 void button_event_trackleft_press (bool shifted);
184 void button_event_trackleft_release (bool shifted);
185 void button_event_trackright_press (bool shifted);
186 void button_event_trackright_release (bool shifted);
187 void button_event_trackrec_press (bool shifted);
188 void button_event_trackrec_release (bool shifted);
189 void button_event_trackmute_press (bool shifted);
190 void button_event_trackmute_release (bool shifted);
191 void button_event_tracksolo_press (bool shifted);
192 void button_event_tracksolo_release (bool shifted);
193 void button_event_undo_press (bool shifted);
194 void button_event_undo_release (bool shifted);
195 void button_event_in_press (bool shifted);
196 void button_event_in_release (bool shifted);
197 void button_event_out_press (bool shifted);
198 void button_event_out_release (bool shifted);
199 void button_event_punch_press (bool shifted);
200 void button_event_punch_release (bool shifted);
201 void button_event_loop_press (bool shifted);
202 void button_event_loop_release (bool shifted);
203 void button_event_prev_press (bool shifted);
204 void button_event_prev_release (bool shifted);
205 void button_event_add_press (bool shifted);
206 void button_event_add_release (bool shifted);
207 void button_event_next_press (bool shifted);
208 void button_event_next_release (bool shifted);
209 void button_event_rewind_press (bool shifted);
210 void button_event_rewind_release (bool shifted);
211 void button_event_fastforward_press (bool shifted);
212 void button_event_fastforward_release (bool shifted);
213 void button_event_stop_press (bool shifted);
214 void button_event_stop_release (bool shifted);
215 void button_event_play_press (bool shifted);
216 void button_event_play_release (bool shifted);
217 void button_event_record_press (bool shifted);
218 void button_event_record_release (bool shifted);
220 int process (uint8_t *);
225 #endif // ardour_tranzport_control_protocol_h