Developing plugins for the SDR# .NET 6.0 Telerik

 9.10.2022
Developing plugins for the SDR# .NET 6.0 Telerik

The latest SDR# version uses .NET 6.0 and UI has based on Telerik UI since .NET 5.0 version of the SDR#.
SDR# SDK for Plugin Developers: https://airspy.com/download/

Previous .NET 5.0 based SDR# SDK required many settings adjustments in Visual Studio (https://techcoderadio.blogspot.com/2025/04/developing-plugins-for-sdr-net-5-desktop.html), now the SDK sample project builds ok right away in Visual Studio 2022 with .NET 6 Windows x86 SDK installed.


 



From SDR# .NET 5.0 version SDRSharp. assemblies are embedded in SDRSharp.exe.


 



Telerik & SDRSharp controls.


 



Modify SDK example plugin to show RDS info
EmptyPlugin.cs
...

        public void LoadGui()
        {
            if (_gui == null)
            {
                _gui = new ControlPanel(_control);
            }
        }

        public void Initialize(ISharpControl control)
        {
            _control = control;
            control.RegisterStreamHook((object)new RdsHwnd(_gui), ProcessorType.RDSBitStream);
        }

        public void Close()
        {
        }

....

using System.Text;
using SDRSharp.Radio;

namespace SDRSharp.Empty
{
    public unsafe class RdsHwnd : IRdsBitStreamProcessor, IBaseProcessor
    {
        private bool _enabled = true;
        private readonly ControlPanel _rdsiPluginPanel;
        private StringBuilder _sb = new StringBuilder();

        public RdsHwnd(ControlPanel _rdsPanelRef)
        {
            _rdsiPluginPanel = _rdsPanelRef;
        }

        public bool Enabled
        {
            get
            {
                return _enabled;
            }
            set
            {
                _enabled = value;
            }
        }
        public void Process(ref RdsFrame _rdsFrame)
        {
            _rdsFrame.Filter = false;
          
            string pic = string.Format("{0:X}", _rdsFrame.GroupA).Trim();
            if (pic.Length != 4)
                return;
            _sb.Clear();
            _sb.Append(string.Format("{0:X}", _rdsFrame.GroupA));
            _sb.Append(string.Format("{0:X}", _rdsFrame.GroupB));
            _sb.Append(string.Format("{0:X}", _rdsFrame.GroupC));
            _sb.Append(string.Format("{0:X}", _rdsFrame.GroupD));
            _sb.Append("\r\n");
            _rdsiPluginPanel.Rds(_sb.ToString(), pic);
        }
    }

}

ControlPanel.cs
        public void Rds(String groups, String picode)
        {
            textBoxRDS.Text = _control.RdsPICode.ToString() + Environment.NewLine +
            _control.RdsProgramService + Environment.NewLine +
            _control.RdsRadioText + Environment.NewLine +
            _control.RdsUseFEC.ToString();
        }

Comments

Popular posts from this blog

Inspecting Alinco DJ-X100E firmware updater

Modifying old SDR# TETRA demod plug-in