added trackcolors to X-Touch, added _is_xtouch to device info as condition for trackcolors
This commit is contained in:
parent
bc1ed2e256
commit
777c7c6c03
@ -62,6 +62,7 @@ DeviceInfo::DeviceInfo()
|
|||||||
, _is_qcon(false)
|
, _is_qcon(false)
|
||||||
, _is_platformMp(false)
|
, _is_platformMp(false)
|
||||||
, _is_proG2(false)
|
, _is_proG2(false)
|
||||||
|
, _is_xtouch(false)
|
||||||
, _has_qcon_second_lcd(false)
|
, _has_qcon_second_lcd(false)
|
||||||
, _has_qcon_master_meters(false)
|
, _has_qcon_master_meters(false)
|
||||||
, _has_meters (true)
|
, _has_meters (true)
|
||||||
@ -341,6 +342,12 @@ DeviceInfo::set_state (const XMLNode& node, int /* version */)
|
|||||||
_is_qcon = false;
|
_is_qcon = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((child = node.child ("IsXTouch")) != 0) {
|
||||||
|
child->get_property ("value", _is_xtouch);
|
||||||
|
} else {
|
||||||
|
_is_xtouch = false;
|
||||||
|
}
|
||||||
|
|
||||||
if ((child = node.child ("IsPlatformMp")) != 0) {
|
if ((child = node.child ("IsPlatformMp")) != 0) {
|
||||||
child->get_property ("value", _is_platformMp);
|
child->get_property ("value", _is_platformMp);
|
||||||
} else {
|
} else {
|
||||||
@ -523,6 +530,11 @@ bool DeviceInfo::is_proG2 () const
|
|||||||
return _is_proG2;
|
return _is_proG2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DeviceInfo::is_xtouch () const
|
||||||
|
{
|
||||||
|
return _is_xtouch;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
DeviceInfo::has_qcon_second_lcd () const
|
DeviceInfo::has_qcon_second_lcd () const
|
||||||
{
|
{
|
||||||
|
@ -83,6 +83,7 @@ class DeviceInfo
|
|||||||
bool is_qcon() const;
|
bool is_qcon() const;
|
||||||
bool is_platformMp() const;
|
bool is_platformMp() const;
|
||||||
bool is_proG2() const;
|
bool is_proG2() const;
|
||||||
|
bool is_xtouch() const;
|
||||||
bool has_qcon_second_lcd() const;
|
bool has_qcon_second_lcd() const;
|
||||||
bool has_qcon_master_meters() const;
|
bool has_qcon_master_meters() const;
|
||||||
bool has_meters() const;
|
bool has_meters() const;
|
||||||
@ -118,6 +119,7 @@ class DeviceInfo
|
|||||||
bool _is_qcon;
|
bool _is_qcon;
|
||||||
bool _is_platformMp;
|
bool _is_platformMp;
|
||||||
bool _is_proG2;
|
bool _is_proG2;
|
||||||
|
bool _is_xtouch;
|
||||||
bool _has_qcon_second_lcd;
|
bool _has_qcon_second_lcd;
|
||||||
bool _has_qcon_master_meters;
|
bool _has_qcon_master_meters;
|
||||||
bool _has_meters;
|
bool _has_meters;
|
||||||
|
@ -1190,6 +1190,11 @@ Surface::map_stripables (const vector<boost::shared_ptr<Stripable> >& stripables
|
|||||||
|
|
||||||
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("Mapping %1 stripables to %2 strips\n", stripables.size(), strips.size()));
|
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("Mapping %1 stripables to %2 strips\n", stripables.size(), strips.size()));
|
||||||
|
|
||||||
|
|
||||||
|
bool xtouch = _mcp.device_info().is_xtouch();
|
||||||
|
XTouchColors colors[] { Off, Off, Off, Off, Off, Off, Off, Off };
|
||||||
|
uint8_t i = 0;
|
||||||
|
|
||||||
for (r = stripables.begin(); r != stripables.end() && s != strips.end(); ++s) {
|
for (r = stripables.begin(); r != stripables.end() && s != strips.end(); ++s) {
|
||||||
|
|
||||||
/* don't try to assign stripables to a locked strip. it won't
|
/* don't try to assign stripables to a locked strip. it won't
|
||||||
@ -1198,15 +1203,21 @@ Surface::map_stripables (const vector<boost::shared_ptr<Stripable> >& stripables
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (!(*s)->locked()) {
|
if (!(*s)->locked()) {
|
||||||
|
if(xtouch){
|
||||||
|
colors[i] = static_cast<XTouchColors>(convert_color_to_xtouch_value((*r)->presentation_info().color()));
|
||||||
|
++i;
|
||||||
|
}
|
||||||
(*s)->set_stripable (*r);
|
(*s)->set_stripable (*r);
|
||||||
++r;
|
++r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; s != strips.end(); ++s) {
|
for (; s != strips.end(); ++s) {
|
||||||
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("strip %1 being set to null stripable\n", (*s)->index()));
|
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("strip %1 being set to null stripable\n", (*s)->index()));
|
||||||
(*s)->set_stripable (boost::shared_ptr<Stripable>());
|
(*s)->set_stripable (boost::shared_ptr<Stripable>());
|
||||||
}
|
}
|
||||||
|
if(xtouch){
|
||||||
|
_port->write(display_colors_on_xtouch(colors)); //write colors to strips for xtouch
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char
|
static char
|
||||||
@ -1623,3 +1634,68 @@ Surface::display_message_for (string const& msg, uint64_t msecs)
|
|||||||
(*s)->block_screen_display_for (msecs);
|
(*s)->block_screen_display_for (msecs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** display @p color_values on the 8 scribble strips of the X-Touch
|
||||||
|
*
|
||||||
|
* @param color_values is assumed to be an array with a color value for each of the 8 scribble strips
|
||||||
|
*/
|
||||||
|
MidiByteArray
|
||||||
|
Surface::display_colors_on_xtouch(const XTouchColors color_values[]) const
|
||||||
|
{
|
||||||
|
MidiByteArray midi_msg;
|
||||||
|
midi_msg << sysex_hdr ();
|
||||||
|
midi_msg << 0x72;
|
||||||
|
|
||||||
|
uint8_t displaycount = 8;
|
||||||
|
|
||||||
|
for(uint8_t i = 0; i < displaycount; ++i){
|
||||||
|
midi_msg << color_values[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
midi_msg << MIDI::eox;
|
||||||
|
|
||||||
|
return midi_msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** takes trackcolor in 0xRRGGBBAA (Red, Green, Blue, Alpha) and converts it to suitable xtouch colors
|
||||||
|
* return value can be casted to enum XTouchColor
|
||||||
|
*/
|
||||||
|
uint8_t
|
||||||
|
Surface::convert_color_to_xtouch_value(uint32_t color) const
|
||||||
|
{
|
||||||
|
uint8_t red = color >> 24;
|
||||||
|
uint8_t green = (color >> 16) & 0xff;
|
||||||
|
uint8_t blue = (color >> 8) & 0xff;
|
||||||
|
|
||||||
|
uint8_t max = red;
|
||||||
|
if(max < green){
|
||||||
|
max = green;
|
||||||
|
}
|
||||||
|
if(max < blue){
|
||||||
|
max = blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(max != 0){
|
||||||
|
//set the highest value to 0xFF to be brightness independent
|
||||||
|
|
||||||
|
float norm = 255.0/max;
|
||||||
|
red = static_cast<uint8_t>(red*norm);
|
||||||
|
green = static_cast<uint8_t>(green*norm);
|
||||||
|
blue = static_cast<uint8_t>(blue*norm);
|
||||||
|
|
||||||
|
uint8_t xcolor = 0;
|
||||||
|
if(red > 0x7f){
|
||||||
|
xcolor = xcolor | 0b001; //lowest bit is red
|
||||||
|
}
|
||||||
|
if(green > 0x7f){
|
||||||
|
xcolor = xcolor | 0b010; //second bit is green
|
||||||
|
}
|
||||||
|
if(blue > 0x7f){
|
||||||
|
xcolor = xcolor | 0b100; //third bit is blue
|
||||||
|
}
|
||||||
|
return xcolor;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return White; //if it would be black (color = 0x000000) return white, because black means off
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -68,6 +68,17 @@ class Led;
|
|||||||
class Surface : public PBD::ScopedConnectionList, public sigc::trackable
|
class Surface : public PBD::ScopedConnectionList, public sigc::trackable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
enum XTouchColors {
|
||||||
|
Off,
|
||||||
|
Red,
|
||||||
|
Green,
|
||||||
|
Yellow,
|
||||||
|
Blue,
|
||||||
|
Purple,
|
||||||
|
Cyan,
|
||||||
|
White,
|
||||||
|
};
|
||||||
|
|
||||||
Surface (MackieControlProtocol&, const std::string& name, uint32_t number, surface_type_t stype);
|
Surface (MackieControlProtocol&, const std::string& name, uint32_t number, surface_type_t stype);
|
||||||
virtual ~Surface();
|
virtual ~Surface();
|
||||||
|
|
||||||
@ -245,6 +256,8 @@ public:
|
|||||||
bool is_qcon;
|
bool is_qcon;
|
||||||
|
|
||||||
MidiByteArray display_line (std::string const& msg, int line_num);
|
MidiByteArray display_line (std::string const& msg, int line_num);
|
||||||
|
MidiByteArray display_colors_on_xtouch(const XTouchColors color_values[]) const;
|
||||||
|
uint8_t convert_color_to_xtouch_value(uint32_t color) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/* IP MIDI devices need to keep a handle on this and destroy it */
|
/* IP MIDI devices need to keep a handle on this and destroy it */
|
||||||
|
@ -12,4 +12,5 @@
|
|||||||
<JogWheel value="yes"/>
|
<JogWheel value="yes"/>
|
||||||
<TouchSenseFaders value="yes"/>
|
<TouchSenseFaders value="yes"/>
|
||||||
<HasSeparateMeters value="yes"/>
|
<HasSeparateMeters value="yes"/>
|
||||||
|
<IsXTouch value="yes"/>
|
||||||
</MackieProtocolDevice>
|
</MackieProtocolDevice>
|
||||||
|
Loading…
Reference in New Issue
Block a user