CUIでCI-Vコントロール

はじめに

WSJT-X とか MMSSTV とか,リグコントロールの入ったアプリケーションを使い終わったあと,リグが受信している周波数を144とか430のFM Call channelにしたくなることがある.
こういった用途に対してGUIまで組む気はないけど,ちょっとしたコマンドでCI-Vの先のrigをコントロールしたいという気持ちがあり,検討した.
rigctl をinstallすれば良いのかもしれないが,標準コマンドやスクリプト言語だけでなんとかならないかなというモチベーションである.

環境

Windows10 に WSL で Linux が入っている環境を前提とする.自分の環境では Ubuntu 18.04LTS がインストールしてある.
自分の環境では制御対象は IC-9700 である.これに合わせてデバイスドライバをインストールしてあって,CATコントロール系のデバイスは COM7 として設定されている.Windows で COM7 となっているデバイスに対応する Linuxバイスは /dev/ttyS7 らしい.

手順

基本的な手順は stty でシリアルを config して,制御の内容を echo したものをデバイスにリダイレクトすることでリグコントロールのバイナリデータを送る.
echoでバイナリを扱うには,-e オプションでエスケープするか,hex の文字列を xxd を通してバイナリに変換する.

この手順に従って実験したものが以下.周波数を変更することができた.以下でIC-9700のCI-VアドレスはA2hとなっている.PCのCI-VアドレスはE0hとなっているがこれに合わせることが必須なのかはわからない(PCが複数あるときの識別用かもしれない).

$ sudo chmod o+rw /dev/ttyS7 
$ stty 19200 -F /dev/ttyS7 raw -echo
$ echo -e "\xFE\xFE\xA2\xE0\x00\x00\x00\x29\x44\x01\xFD" > /dev/ttyS7 
$ echo fefea2e0000000294401fd | xxd -r -p > /dev/ttyS7  
$ echo fefea2e0000000003304fd | xxd -r -p > /dev/ttyS7 # 433.000.000MHz

あとは必要な設定を書き連ねて実行可能なスクリプトにしてしまえば良い.その際,設定内容をハードコードするもスクリプトの引数にするもご自由で.自分は CI-V アドレスも含めてハードコードした(以下).もう少し汎用にするならば,CI-Vアドレスを変数にする,周波数とモードを引数で与える(その場合は awkあたりで処理するだろうか)といった事が考えられる.
といいつつ今回作ったのは投げつけOnlyである.なにかエラーが起こっても対処できない.エラーに対処したい人,rigからの反応に応じて制御を変えたい人はそれぞれ工夫してください.

以下のスクリプト名を例えば goto433FM とする.

#!/bin/bash

stty 19200 -F /dev/ttyS7 raw -echo
# 433.000.000MHz
echo fefea2e0000000003304fd | xxd -r -p > /dev/ttyS7
# FM, Fil1
echo fefea2e0010501fd       | xxd -r -p > /dev/ttyS7

このスクリプトWindowsのコマンド・プロンプトから呼び出すことができる.もちろんpermissionを設定しておくこと.

C:\Users\Me>wsl /home/Me/ham/goto433FM

この塊をショートカットにして適当なところに置けば完了である.

f:id:stevet:20201113095021p:plain
CI-Vコントロール

WSJT-X や MMSSTV などの周波数リストを持ってrig制御を行うようなアプリケーションを終了して置き去りになってしまった周波数・モード設定を本ショートカット一発で設定することができるようになった.