#include "fp8_controls.h"
-using namespace ArdourSurface;
-using namespace ArdourSurface::FP8Types;
+using namespace ArdourSurface::FP_NAMESPACE;
+using namespace ArdourSurface::FP_NAMESPACE::FP8Types;
bool FP8ButtonInterface::force_change = false;
FP8Controls::FP8Controls (FP8Base& b)
: _fadermode (ModeTrack)
+#ifdef FADERPORT2
+ , _navmode (NavScroll)
+#else
, _navmode (NavMaster)
+#endif
, _mixmode (MixAll)
, _display_timecode (false)
{
NEWBUTTON (0x5e, BtnPlay, false);
NEWBUTTON (0x5f, BtnRecord, false);
+#ifdef FADERPORT2
+
+ NEWSHIFTBUTTON (0x4a, BtnARead, BtnAOff, true);
+ NEWSHIFTBUTTON (0x4b, BtnAWrite, BtnATrim, true);
+ NEWSHIFTBUTTON (0x4d, BtnATouch, BtnALatch, true);
+
+ NEWSHIFTBUTTON (0x2e, BtnPrev, BtnUndo, false);
+ NEWSHIFTBUTTON (0x2f, BtnNext, BtnRedo, false);
+
+ NEWSHIFTBUTTON (0x2a, BtnPan, BtnFlip, true); //TODO: Flip Pan knob to fader ...?
+
+ NEWSHIFTBUTTON (0x36, BtnChannel, BtnChanLock, true);
+
+ NEWSHIFTBUTTON (0x38, BtnScroll, BtnZoom, true);
+
+ NEWSHIFTBUTTON (0x3a, BtnMaster, BtnF1, false);
+ NEWSHIFTBUTTON (0x3b, BtnClick, BtnF2, false);
+ NEWSHIFTBUTTON (0x3c, BtnSection, BtnF3, false);
+ NEWSHIFTBUTTON (0x3d, BtnMarker, BtnF4, false);
+
+ //these buttons do not exist in FP2, but they need to exist in the ctrlmap:
+ NEWBUTTON (0x71, BtnBank, false);
+ NEWBUTTON (0x72, BtnF5, false);
+ NEWBUTTON (0x73, BtnF6, false);
+ NEWBUTTON (0x74, BtnF7, false);
+ NEWBUTTON (0x75, BtnF8, false);
+ NEWBUTTON (0x76, BtnUser1, false);
+ NEWBUTTON (0x77, BtnUser2, false);
+ NEWBUTTON (0x78, BtnUser3, false);
+ NEWBUTTON (0x79, BtnSave, false);
+
+#else
NEWSHIFTBUTTON (0x4a, BtnARead, BtnUser3, true);
NEWSHIFTBUTTON (0x4b, BtnAWrite, BtnUser2, true);
NEWSHIFTBUTTON (0x4c, BtnATrim, BtnRedo, true);
NEWSHIFTBUTTON (0x3c, BtnSection, BtnF7, false);
NEWSHIFTBUTTON (0x3d, BtnMarker, BtnF8, false);
+ NEWBUTTON (0x2a, BtnPan, false);
+#endif
+
NEWSHIFTBUTTON (0x28, BtnTrack, BtnTimecode, false);
NEWBUTTON (0x2b, BtnPlugins, false);
NEWBUTTON (0x29, BtnSend, false);
- NEWBUTTON (0x2a, BtnPan, false);
NEWSHIFTBUTTON (0x00, BtnArm, BtnArmAll, false);
NEWBUTTON (0x01, BtnSoloClear, false);
BindNav (BtnMaster, NavMaster);
BindNav (BtnSection, NavSection);
BindNav (BtnMarker, NavMarker);
+#ifdef FADERPORT2
+ BindNav (BtnPan, NavPan);
+#endif
#define BindFader(BTN, MODE)\
button (BTN).released.connect_same_thread (button_connections, boost::bind (&FP8Controls::set_fader_mode, this, MODE))
BindFader (BtnTrack, ModeTrack);
BindFader (BtnPlugins, ModePlugins);
BindFader (BtnSend, ModeSend);
+#ifndef FADERPORT2
BindFader (BtnPan, ModePan);
+#endif
#define BindMix(BTN, MODE)\
BindMix (BtnMUser, MixUser);
/* create channelstrips */
- for (uint8_t id = 0; id < 8; ++id) {
+ for (uint8_t id = 0; id < N_STRIPS; ++id) {
chanstrip[id] = new FP8Strip (b, id);
- _midimap_strip[0x08 + id] = &(chanstrip[id]->solo_button());
- _midimap_strip[0x10 + id] = &(chanstrip[id]->mute_button());
- _midimap_strip[0x18 + id] = &(chanstrip[id]->selrec_button());
+ _midimap_strip[FP8Strip::midi_ctrl_id (FP8Strip::BtnSolo, id)] = &(chanstrip[id]->solo_button());
+ _midimap_strip[FP8Strip::midi_ctrl_id (FP8Strip::BtnMute, id)] = &(chanstrip[id]->mute_button());
+ _midimap_strip[FP8Strip::midi_ctrl_id (FP8Strip::BtnSelect, id)] = &(chanstrip[id]->selrec_button());
}
/* set User button names */
_user_enum_to_str[ID] = #ID; \
_user_buttons[ID] = NAME;
+#ifdef FADERPORT2
+ REGISTER_ENUM (BtnF1 , "F1");
+ REGISTER_ENUM (BtnF2 , "F2");
+ REGISTER_ENUM (BtnF3 , "F3");
+ REGISTER_ENUM (BtnF4 , "F4");
+ REGISTER_ENUM (BtnFootswitch, "Footswitch");
+#else
REGISTER_ENUM (BtnFootswitch, "Footswitch");
REGISTER_ENUM (BtnUser1 , "User 1");
REGISTER_ENUM (BtnUser2 , "User 2");
REGISTER_ENUM (BtnF6 , "F6");
REGISTER_ENUM (BtnF7 , "F7");
REGISTER_ENUM (BtnF8 , "F8");
+#endif
+
#undef REGISTER_ENUM
}
for (MidiButtonMap::const_iterator i = _midimap.begin (); i != _midimap.end (); ++i) {
delete i->second;
}
- for (uint8_t id = 0; id < 8; ++id) {
+ for (uint8_t id = 0; id < N_STRIPS; ++id) {
delete chanstrip[id];
}
_midimap_strip.clear ();
button (BtnARead).set_color (0x00ff00ff);
button (BtnAWrite).set_color (0xff0000ff);
button (BtnATouch).set_color (0xff8800ff);
+ button (BtnALatch).set_color (0xffff00ff);
button (BtnUser1).set_color (0x0000ffff);
button (BtnUser2).set_color (0x0000ffff);
button (BtnUser3).set_color (0x0000ffff);
- button (BtnALatch).set_color (0x0000ffff);
-
button (BtnBypass).set_color (0x888888ff);
button (BtnBypassAll).set_color (0xffffffff);
button (BtnMFX).set_color (0x0000ffff);
button (BtnMUser).set_color (0x0000ffff);
- for (uint8_t id = 0; id < 8; ++id) {
+#ifdef FADERPORT2
+ /* encoder mode-switches are orange, to match the Master switch physical color */
+ button (BtnLink).set_color (0x000000ff);
+ button (BtnChannel).set_color (0x0000ffff);
+ button (BtnScroll).set_color (0x0000ffff);
+ button (BtnPan).set_color (0xffffffff);
+#endif
+
+ for (uint8_t id = 0; id < N_STRIPS; ++id) {
chanstrip[id]->initialize ();
}
/* initally turn all lights off */
- for (CtrlButtonMap::const_iterator i = _ctrlmap.begin (); i != _ctrlmap.end (); ++i) {
- i->second->set_active (false);
- }
+ all_lights_off ();
/* default modes */
+#ifdef FADERPORT2
+ button (BtnScroll).set_active (true);
+#else
button (BtnMaster).set_active (true);
+#endif
button (BtnTrack).set_active (true);
button (BtnMAll).set_active (true);
button (BtnTimecode).set_active (_display_timecode);
FP8ButtonInterface::force_change = false;
}
+void
+FP8Controls::all_lights_off () const
+{
+ for (CtrlButtonMap::const_iterator i = _ctrlmap.begin (); i != _ctrlmap.end (); ++i) {
+ i->second->set_active (false);
+ }
+}
+
FP8ButtonInterface&
FP8Controls::button (ButtonId id)
{
FP8Strip&
FP8Controls::strip (uint8_t id)
{
- assert (id < 8);
+ assert (id < N_STRIPS);
return *chanstrip[id];
}
bool
FP8Controls::midi_touch (uint8_t id, uint8_t val)
{
- assert (id < 8);
+ assert (id < N_STRIPS);
return chanstrip[id]->midi_touch (val > 0x40);
}
bool
FP8Controls::midi_fader (uint8_t id, unsigned short val)
{
- assert (id < 8);
+ assert (id < N_STRIPS);
return chanstrip[id]->midi_fader ((val >> 4) / 1023.f);
}
button (BtnMaster).set_active (m == NavMaster);
button (BtnSection).set_active (m == NavSection);
button (BtnMarker).set_active (m == NavMarker);
+#ifdef FADERPORT2
+ button (BtnPan).set_active (m == NavPan);
+#endif
_navmode = m;
}