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
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;
}
}
}
Kommentit
Tämän blogin kommentit tarkistetaan ennen julkaisua.