MIDI Remote API. makeActionBinding, CC vs NRPN. Possible issue?

I can’t find it in the documentation, and nobody appears to have posted anything similar. Is there a reason why this works

var btnNextTrack = surface.makeButton(0.25, 0.5, 0.25, 0.25)
btnNextTrack.mSurfaceValue.mMidiBinding
.setInputPort(midiInput)
.bindToControlChange14BitNRPN(nrpnChannel, nrpnAddress)
.setValueRange(0, 0x3fff);
page.makeCommandBinding(btnNextTrack.mSurfaceValue, "Project", "Select Track: Next");
updateNrpnAddress();

var btnNextBank = surface.makeButton(0.25, 1.0, 0.25, 0.25)
btnNextBank.mSurfaceValue.mMidiBinding
.setInputPort(midiInput)
.bindToControlChange(ccChannel, ccNumber)
.setValueRange(0, 0x7f);
page.makeActionBinding(btnNextBank.mSurfaceValue, mixerBankZone.mAction.mNextBank);
updateCcNumber();

and this doesn’t?

var btnNextTrack = surface.makeButton(0.25, 0.5, 0.25, 0.25)
btnNextTrack.mSurfaceValue.mMidiBinding
.setInputPort(midiInput)
.bindToControlChange14BitNRPN(nrpnChannel, nrpnAddress)
.setValueRange(0, 0x3fff);
page.makeCommandBinding(btnNextTrack.mSurfaceValue, "Project", "Select Track: Next");
updateNrpnAddress();

var btnNextBank = surface.makeButton(0.25, 1.0, 0.25, 0.25)
btnNextBank.mSurfaceValue.mMidiBinding
.setInputPort(midiInput)
.bindToControlChange14BitNRPN(nrpnChannel, nrpnAddress)
.setValueRange(0, 0x3fff);
page.makeActionBinding(btnNextBank.mSurfaceValue, mixerBankZone.mAction.mNextBank);
updateNrpnAddress();

I am definitely sending the correct MIDI messages for both options. Next bank is the one that refuses to work with 14bit NRPN. The updateX functions change to the next available CC channel + controller number or NRPN channel + address, and work for other CCs/NRPNs added in the same way in the same script, before, between and after these.

Cubase Pro 12.0.52.

Thanks in advance.
Sam

For avoidance of doubt on the JS side

function updateNrpnAddress() {
	nrpnAddress++;
	if (nrpnAddress == 0x4000) {
		nrpnAddress = 0;
		nrpnChannel++;
	}
}

function updateCcNumber() {
	ccNumber++;
	if (ccNumber == 0x80) {
		ccNumber = 0;
		ccChannel++;
	}
}

Not that I’m ever expecting to need to change channel. I’m not sure the UI could deal with that many controls. :slight_smile:

Turns out it’s not just makeActionBinding. makeCommandBinding seemingly randomly doesn’t work as well.

This works

var btnPlay = surface.makeButton(0.25, 0.5, 0.25, 0.25);
btnPlay.mSurfaceValue.mMidiBinding
.setInputPort(midiInput)
.bindToControlChange(ccChannel, ccNumber)
.setValueRange(0, 0x7f);
page.makeCommandBinding(btnPlay.mSurfaceValue, "Transport", "Start");
updateCcNumber();

and this doesn’t

var btnPlay = surface.makeButton(0.25, 0.5, 0.25, 0.25);
btnPlay.mSurfaceValue.mMidiBinding
.setInputPort(midiInput)
.bindToControlChange14BitNRPN(nrpnChannel, nrpnAddress)
.setValueRange(0, 0x3fff);
page.makeCommandBinding(btnPlay.mSurfaceValue, "Transport", "Start");
updateNrpnAddress();

What’s really confusing is that some actions/commands work with NRPN and others don’t.