RUTX50 - Locking 5G-NSA CA bands manually

Hey @Daumantas, got lots of updates to share!

I experimented with using QNWLOCK, there’s a few things to point out.

  1. In your post, the example command you shared had slightly incorrect syntax gsmctl -A '+QNWLOCK: "common/4g",2,6400,354,6400,348'. It’s actually supposed to be gsmctl -A '+QNWLOCK="common/4g",2,6400,354,6400,348'.

  2. Additionally, you mentioned that I should remove my locked bands via the WebUI when apply this command. When I removed the locks, the command did seem like it was locking the cell I wanted as a primary carrier, (which was the B7 band I wanted), however it still connected with B1 and B3 for CA. I observed that using a Band lock in the WebUI with B7 and N78 and using QNWLOCK allowed me to lock the configuration B7+B7+N78 as reliably as possible.

  3. Your hypothesis was completely correct. After watching the logs, I observed that I was connecting to a B7 from a different cell, which although had very high RSSI, it doesn’t support 5G ENDC. Locking to my preferred cell with QNWLOCK has so far proved successful. I’m really happy about this.

  4. When there’s a reboot, the lock is always removed, so I set it up to be applied on system init in the Custom Script as you advised. Sometimes even when there’s no reboot, the lock seems to be removed. One can assess which lock is currently active on the modem by running gsmctl -A 'AT+QNWLOCK="common/4g"'. Since the Custom Script is executing Bash, I wrote a while loop which every hour after system initialisation checks the cell lock on the modem. If the returned string is not what I expect, I simply apply it again. Otherwise, the script does nothing.

For reference, here is the code I wrote:

gsmctl -A 'AT+QNWLOCK="common/4g",2,6400,354,6400,348'
sleep 5

while true
OUTPUT=$(gsmctl -A 'AT+QNWLOCK="common/4g"')
if [[ $OUTPUT != '+QNWLOCK: "common/4g",2,6400,354,6400,348' ]]; then
gsmctl -A 'AT+QNWLOCK="common/4g",2,6400,354,6400,348'
sleep 3600
) &

exit 0

I’ve supplied the example cells you shared in the example above. Logs suggest that this is working well, and using the & operator I run it in a shell subprocess so that the init script can exit successfully.

Overall, I’m happy!

Will be testing this more and report back within a week or so. If 5G remains consistent I will consider this solved. Hopefully the code above and the details will help future lurkers looking to do the same thing.