UBC-3300XLT remote control protocol could notify host when squelch is open. Command QU = inspect/set squelch notify mode. In the UBC-3500XLT remote control protocol there's no command for squelch notify. Similar function is possible by using STS or GLG command.

<COMMAND STS>
Get Current Status
=====================================================================================
Controller → Radio
① STS[\r]
Radio → Controller
① STS,[DSP_FORM],[L1_CHAR],[L1_MODE],[L2_CHAR],[L2_MODE],[L3_CHAR],[L3_MODE],
[L4_CHAR],[L4_MODE],・・・・,[L8_CHAR],[L8_MODE],[SQL],[MUT],[BAT],[WAT][\r]
[DSP_FORM] : Display Form (4 - 8dight:########)
(each # is 0 or 1)
0 means Small Font
1 means Large Font
[L1_CHAR] : Line1 Characters 16char (fixed length)
[L1_MODE] : Line1 Display Mode 16char
[L2_CHAR] : Line2 Characters 16char (fixed length)
[L2_MODE] : Line2 Display Mode 16char
[L3_CHAR] : Line3 Characters 16char (fixed length)
[L3_MODE] : Line3 Display Mode 16char
[L4_CHAR] : Line4 Characters 16char (fixed length)
[L4_MODE] : Line4 Display Mode 16char
:
:
[L8_CHAR] : Line8 Characters 16char (fixed length)
[L8_MODE] : Line8 Display Mode 16char
[SQL] : Squelch Status (0:CLOSE / 1:OPEN)
[MUT] : Mute Status (0:OFF / 1:ON)
[BAT] : Battery Low Status (0:No Alert / 1:Alert)
[WAT] : Weather Alert Status (0:No Alert / 1: Alert)
$$$: Alert SAME CODE (SAME EVENT CODE)

<COMMAND GLG>
Get Reception Status
=====================================================================================
Controller → Radio
① GLG[\r]
Radio → Controller
① GLG,[FRQ/TGID],[MOD],[ATT],[CTCSS/DCS],[NAME1],[NAME2],[NAME3],[SQL],[MUT][\r]
GLG,,,,,,,,,[\r]
[FRQ/TGID] : Frequency or TGID
[MOD] : Modulation (AM/FM/NFM/WFM)
[ATT] : Attenuation (0:OFF / 1:ON)
[CTCSS/DCS] : CTCSS/DCS Status (0-231: see CTCSS/DCS Code List)
[NAME1] : System or Search Name
[NAME2] : Group Name
[NAME3] : Channel Name
[SQL] : Squelch Status (0:CLOSE / 1:OPEN)
[MUT] : Mute Status (0:OFF / 1:ON)
Get reception status.
The Scanner returns GLG,,,,,,,,,[\r] until it detects a frequency or a TGID.

C# code for STS continuous polling

uniden3500-sts.jpg

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        string dataRX = string.Empty;
        const string CMD_STS = "STS\r";
        bool rx = false;

        private delegate void SetTextDeleg(string text);

        public Form1()
        {
            InitializeComponent();
        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            dataRX = dataRX + serialPort1.ReadExisting();
            if (rx)
            {
                if (dataRX.Contains('\r'))
                {
                    this.BeginInvoke(new SetTextDeleg(ser_DataReceived), new object[] { dataRX });
                }
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                rx = false;
                serialPort1.DiscardInBuffer();
                serialPort1.DataReceived -= serialPort1_DataReceived;
            }
        }

        private void ser_DataReceived(string data)
        {
            textBoxScr.Text = string.Empty;
            if (rx)
            {
                string[] lines = data.Split(',');
                foreach (var line in lines)
                {
                    if (line.Trim().Length > 0)
                    {
                        textBoxScr.Text = textBoxScr.Text + line + Environment.NewLine;
                    }
                }
                dataRX = string.Empty;
                serialPort1.Write(CMD_STS);
            }
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            textBoxScr.Text = string.Empty;
            dataRX = string.Empty;
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
            }
            rx = true;
            serialPort1.DiscardInBuffer();
            serialPort1.Write(CMD_STS);
        }

        private void buttonStop_Click(object sender, EventArgs e)
        {
            rx = false;
            textBoxScr.Text = string.Empty;
        }
    }
}