+void
+MIDIControllable::rpn_value_change (Parser&, uint16_t rpn, float val)
+{
+ if (control_rpn == rpn) {
+ if (controllable) {
+ controllable->set_value (val, Controllable::UseGroup);
+ }
+ }
+}
+
+void
+MIDIControllable::nrpn_value_change (Parser&, uint16_t nrpn, float val)
+{
+ if (control_nrpn == nrpn) {
+ if (controllable) {
+ controllable->set_value (val, Controllable::UseGroup);
+ }
+ }
+}
+
+void
+MIDIControllable::rpn_change (Parser&, uint16_t rpn, int dir)
+{
+ if (control_rpn == rpn) {
+ if (controllable) {
+ /* XXX how to increment/decrement ? */
+ // controllable->set_value (val);
+ }
+ }
+}
+
+void
+MIDIControllable::nrpn_change (Parser&, uint16_t nrpn, int dir)
+{
+ if (control_nrpn == nrpn) {
+ if (controllable) {
+ /* XXX how to increment/decrement ? */
+ // controllable->set_value (val);
+ }
+ }
+}
+
+void
+MIDIControllable::bind_rpn_value (channel_t chn, uint16_t rpn)
+{
+ int chn_i = chn;
+ drop_external_control ();
+ control_rpn = rpn;
+ control_channel = chn;
+ _parser.channel_rpn[chn_i].connect_same_thread (midi_sense_connection[0], boost::bind (&MIDIControllable::rpn_value_change, this, _1, _2, _3));
+}
+
+void
+MIDIControllable::bind_nrpn_value (channel_t chn, uint16_t nrpn)
+{
+ int chn_i = chn;
+ drop_external_control ();
+ control_nrpn = nrpn;
+ control_channel = chn;
+ _parser.channel_nrpn[chn_i].connect_same_thread (midi_sense_connection[0], boost::bind (&MIDIControllable::rpn_value_change, this, _1, _2, _3));
+}
+
+void
+MIDIControllable::bind_nrpn_change (channel_t chn, uint16_t nrpn)
+{
+ int chn_i = chn;
+ drop_external_control ();
+ control_nrpn = nrpn;
+ control_channel = chn;
+ _parser.channel_nrpn_change[chn_i].connect_same_thread (midi_sense_connection[0], boost::bind (&MIDIControllable::rpn_change, this, _1, _2, _3));
+}
+
+void
+MIDIControllable::bind_rpn_change (channel_t chn, uint16_t rpn)
+{
+ int chn_i = chn;
+ drop_external_control ();
+ control_rpn = rpn;
+ control_channel = chn;
+ _parser.channel_rpn_change[chn_i].connect_same_thread (midi_sense_connection[0], boost::bind (&MIDIControllable::nrpn_change, this, _1, _2, _3));
+}
+