SmartSDR v4.1.5 | SmartSDR v4.1.5 Release Notes
SmartSDR v3.10.15 | SmartSDR v3.10.15 Release Notes
The latest 4O3A Genius Product Software:
The latest 4O3A Genius Product Software and Firmware
If you are needing assistance with FlexRadio products, please refer to the product documentation or check the Help Center for known solutions. Need technical support from FlexRadio? It's as simple as creating a HelpDesk ticket.
remote software CW keyer with ASIO side tone
Hi folks,
I'm just working on a remote cw keyer for my Flex-6300. The cw key is attached to the PC via USB-RS-232. The side tone is generated via low latency ASIO audio. This already works just fine.
Based on the information given from KE5DTO and NQ6N here
I want to key the radio via network.
I have already download the FlexAPI v3.1.8. I was able to connect to the radio according the example ComPortPTT from the FlexAPI. This is my Forms1.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Flex.Smoothlake.FlexLib;
using Flex.UiWpfFramework.Utils;
namespace Iambic2
{
public partial class Form1 : Form
{
private Radio _radio;
public Form1()
{
InitializeComponent();
WindowPlacement.SetPlacement(this.Handle, Properties.Settings.Default.WindowPlacement);
API.ProgramName = "ComPortPTT";
API.RadioAdded += new API.RadioAddedEventHandler(API_RadioAdded);
API.RadioRemoved += new API.RadioRemovedEventHandler(API_RadioRemoved);
API.Init();
}
void API_RadioAdded(Radio radio)
{
if (_radio == null)
{
_radio = radio;
_radio.Connect();
//UpdateMox();
//_radio.CWPitch = 650;
}
}
void API_RadioRemoved(Radio radio)
{
if (radio == _radio)
_radio = null;
}
public void RadioTriggerOn(double timeStamp)
{
//Console.WriteLine("On - " + ((int)Math.Round(timeStamp)).ToString("X4"));
_radio.CWPTT(true, ((int)Math.Round(timeStamp)).ToString("X4"));
_radio.CWKey(true, ((int)Math.Round(timeStamp)).ToString("X4"));
}
public void RadioTriggerOff(double timeStamp)
{
//Console.WriteLine("Off - " + ((int)Math.Round(timeStamp)).ToString("X4"));
_radio.CWKey(false, ((int)Math.Round(timeStamp)).ToString("X4"));
_radio.CWPTT(false, ((int)Math.Round(timeStamp)).ToString("X4"));
}
}
}
RadioTriggerOn() / Off() are called at the according time instant of the side tone. timeStamp is counted in milliseconds with rollover at 2^16.
With this programm the radio does not send out any HF. I can see no reaction from the radio except that the normal CW key plugged into the radio itself does no work anymore after I have pressed the RS232 CW key a least one time (no HF is send, side tone works as usual). I have to reboot the radio to bring it back to normal operation.
I have noted that CWKey() is specially designed for the Maestro. So I have changed line 1763 of Radio.cs as follows:
if (true) //(API.ProgramName == "SmartSDR-Maestro")
What changes are necessary to make this program work?
Harald, DL3HM
Answers
-
Update:
When I switch from CWKey() to CWKeyImmediate() in the code above the radio is keyed properly. So there is obviously a problem with the generation of my timestamps.
With Wireshark I can see "ping ms_timestamp" messages on TCP port 4992. My timestamps are not in sync with these timestamps. Moreover the timestamps in CWKey() have a different format (hex integers) than the ping timestamps (decimal numbers).
Is this the cause of my problem? How can I get my timestamps in sync with the timestamps already sent by SmartSDR?
Harald, DL3HM
0 -
Update:
with the following code CWKey() works. Nothing was wrong with the timestamps. Instead the appropriate _guiClientHandle has to be provide to CWKey().
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Flex.Smoothlake.FlexLib;
using Flex.UiWpfFramework.Utils;
namespace Iambic2
{
public partial class Form1 : Form
{
private Radio _radio;
private uint _guiClientHandle = 0;
public Form1()
{
InitializeComponent();
WindowPlacement.SetPlacement(this.Handle, Properties.Settings.Default.WindowPlacement);
API.ProgramName = "ComPortPTT";
API.RadioAdded += new API.RadioAddedEventHandler(API_RadioAdded);
API.RadioRemoved += new API.RadioRemovedEventHandler(API_RadioRemoved);
API.Init();
}
void API_RadioAdded(Radio radio)
{
if (_radio == null)
{
_radio = radio;
_radio.Connect();
_guiClientHandle = _radio.GuiClients[0].ClientHandle;
}
}
void API_RadioRemoved(Radio radio)
{
if (radio == _radio)
_radio = null;
}
public void RadioCWKey(bool state, double timeStamp)
{
if (_radio != null)
{
_radio.CWKey(state, ((int)Math.Round(timeStamp)).ToString("X4"), _guiClientHandle);
//_radio.CWKeyImmediate(state);
}
}
}
}
Harald, DL3HM
0
Leave a Comment
Categories
- All Categories
- 388 Community Topics
- 2.2K New Ideas
- 658 The Flea Market
- 8.4K Software
- 156 SmartSDR+
- 6.5K SmartSDR for Windows
- 186 SmartSDR for Maestro and M models
- 439 SmartSDR for Mac
- 275 SmartSDR for iOS
- 265 SmartSDR CAT
- 204 DAX
- 386 SmartSDR API
- 9.4K Radios and Accessories
- 53 Aurora
- 297 FLEX-8000 Signature Series
- 7.2K FLEX-6000 Signature Series
- 970 Maestro
- 58 FlexControl
- 866 FLEX Series (Legacy) Radios
- 944 Genius Products
- 471 Power Genius XL Amplifier
- 347 Tuner Genius XL
- 126 Antenna Genius
- 306 Shack Infrastructure
- 215 Networking
- 468 Remote Operation (SmartLink)
- 142 Contesting
- 811 Peripherals & Station Integration
- 144 Amateur Radio Interests
- 1.1K Third-Party Software