今年に入って全く無線をやる気がなく、QSOパーティも4局交信するだけで終わってしまった。
FT8も飽きたし、CWをやるのも面倒だし..と思って、何か面白いものがないかと物色していたら、5年程前に購入したSDRPlayがあることを思い出した。
一見、小さなただの箱に見えるが、例えばSDRUnoなどのソフトウエアを使うと高性能な広帯域の受信機になる。
このSDRPlayは、外部からコントロールできるようにAPIが公開されている。 コントロール手段が公開されていると、ちょっとやってみたい..。
というわけで、とりあえずPCとつながるかどうかやってみた。
公開されているdllはCで作成されていて、APIのマニュアルもCでの説明しかない。 最近は、C#しか弄ったことがないので、C#でコントロールしてみたい。
まず最初にバージョンナンバーを取得するAPI関数があるので、それを試してみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Windows.Forms; namespace SDRPlay_API_Test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { float apiVer = 0f; sdrplay_api_Open(); sdrplay_api_ApiVersion(ref apiVer); sdrplay_api_Close(); label2.Text = apiVer.ToString(); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using System.Runtime.InteropServices; namespace SDRPlay_API_Test { partial class Form1 { public enum sdrplay_api_ErrT { sdrplay_api_Success = 0, sdrplay_api_Fail = 1, sdrplay_api_InvalidParam = 2, sdrplay_api_OutOfRange = 3, sdrplay_api_GainUpdateError = 4, sdrplay_api_RfUpdateError = 5, sdrplay_api_FsUpdateError = 6, sdrplay_api_HwError = 7, sdrplay_api_AliasingError = 8, sdrplay_api_AlreadyInitialised = 9, sdrplay_api_NotInitialised = 10, sdrplay_api_NotEnabled = 11, sdrplay_api_HwVerError = 12, sdrplay_api_OutOfMemError = 13, sdrplay_api_ServiceNotResponding = 14, sdrplay_api_StartPending = 15, sdrplay_api_StopPending = 16, sdrplay_api_InvalidMode = 17, sdrplay_api_FailedVerification1 = 18, sdrplay_api_FailedVerification2 = 19, sdrplay_api_FailedVerification3 = 20, sdrplay_api_FailedVerification4 = 21, sdrplay_api_FailedVerification5 = 22, sdrplay_api_FailedVerification6 = 23, sdrplay_api_InvalidServiceVersion = 24 } [DllImport("sdrplay_api.dll", CallingConvention = CallingConvention.Cdecl)] private static extern sdrplay_api_ErrT sdrplay_api_Open(); [DllImport("sdrplay_api.dll", CallingConvention = CallingConvention.Cdecl)] private static extern sdrplay_api_ErrT sdrplay_api_Close(); [DllImport("sdrplay_api.dll", CallingConvention = CallingConvention.Cdecl)] private static extern sdrplay_api_ErrT sdrplay_api_ApiVersion(ref float apiVer); } } |
ボタンをクリックすると、バージョン情報が表示できた。
おー、ちゃんと繋がっている。