前回(Teensy(6)開発環境VisualTeensyの導入)Teensyの開発環境が構築できたところで、Keiths' Teensy SDRのコンパイルを試みました。
Keiths' Teensy SDRコードの選択
Keiths' Teensy SDRはハードウェア・モジュールの自由度が高く、開発途上にあるため、コードには幾つかのバージョンがあります。
Keith OMがアップしているコードはkeithsdr@groups.ioのFilesフォルダにzip形式でアップロードされています。ファイル名を見ると、主にディスプレイの種類ごとにアップロードされているように見えます。コードに占めるUIの比重が大きくなっていると想像されます。今日、UIのコードが肥大化するのはどのAppでも同じです。Keiths' Teensy SDRでは市販のSDRのように、タッチスクリーンによる操作もサポートしています。
これとは別に、ハードウェア・モジュールの選択問題を一気に解決してくれるRS-HFIQとのUSB接続機能の開発を主導しているK7MDL局Mike OM開発のコードがGitHubにアップロードされています。GitHub上でWikiやREADME.mdを直ぐに読むことができます。当局はRS-HFIQを使いたいため、Mike OMのコードをgit clone(複製)することにしました。まだまだコードの更新が頻繁にあるため、git pull(更新内容取り込み)できるようにしておいた方が良いでしょう。
K7MDL局のKeiths' Teensy SDRコード
ソースファイル
git clone(複製)したKeiths' Teensy SDRのソースコード一覧を下記に示します。30個のファイルから構成されています。備考に記載した役割は、ファイルのヘッダ部分だけを読んで判断した暫定版です。今後、IQ信号の処理連鎖を追いかけて更新したいと思います。
メインコードのファイル名SDR_RA8875.inoについた「RA8875」はディスプレイのコントローラの名称です。Mike OMのコードではRA8875とRA8876が選択可能です。ただし、このコントローラを搭載したディスプレイならどれでも稼働するという訳ではないようです。実績のあるEastRising Technology Co.,Limited製の4.3 inch TFT LCD Display Capacitive Touchscreen w/RA8875 Controllerか、もしくは7 inch w/RA8876をBuydisplay.comから選ぶのが無難なようです。しかも細かな選択オプションがあって、InterfaceをPin Header Connection-4-Wire SPIに指定し、Power Supply (Typ.)をVDD=5.0Vに指定するのが良いようです。詳細はkeithsdr@groups.io、Wiki、README.mdをご参照ください。当局もまだ稼働させていないため確かなことは言えません。
脇道に逸れますが、Buydisplay.com(深圳市)はB2BとB2Cの区別のないディスプレイ専門総合マーケットプレイスの様相です。このように、B2BとB2Cの区別なく1個からでも500個以上でも売るという場が日本には無いように思います。
閑話休題、SDRコードの中核は信号処理ですが、制御関連のファイルの数が多いことに気づきます。無線機操作の利便性を追求すると、そのためのコードを開発する必要が出てきます。タッチ・イベント・ブローカのUserInputがその例です。
なお、SDRの場合はソースコード上でオフバンド対策をする必要があると思いますが、SDR_Data.hに定義された周波数バンドの構造体定義を日本向けに変更すれば良いようです。
プロジェクトファイル
git cloneしたソースコード以外のファイルを下記に示します。
この中で重要なのはmakefileです。Mike OMのPCの設定と当局のPCの設定は大なり小なり異なると思われるため、修正が必要になります。
.vscodeフォルダ配下のファイルはIDEとしてのVS Codeの使い勝手に係わるファイルと思います。ただし、VS Codeのことをまだ良く知らないため確かなことは言えません。
コンパイルの試行
事前準備
先ずは開発環境を整え検証するために、コンパイルを通すことを試みました。以下に試行錯誤の過程を記録します。VS CodeやVisualTeensyに造詣が深ければ、もっと良い方法があるかも知れません。
Keiths' Teensy SDR一式をフォルダごと複写します。当局のPC環境を調べるためにVisualTeensy.exeを起動して複写したフォルダのOpenとSaveを実行し、元のmakefileをディフォルトの新規makefileで書き換えます。このmakefileに当局のTeensy開発環境の設定が反映されています。ただし、Keiths' Teensy SDRをビルドするための情報はこのmakefileからは消えてしまいます。書き換えられても支障が無いように、事前にフォルダごと複写しました。
次に、新規makefile(当局環境版)と元のmakefile(Mike OM版)を比較して、必要な修正を適用します。新規makefileが複雑なのに比較して元のmakefile(Mike OM版)はシンプルです。Mike OMがmakefileに造詣が深く、自動生成に飽き足らず自ら書き下しているのではないかと思われます。したがって、元のmakefile(Mike OM版)の方を複写して書き換えて行きます。
VS Code上のVisualTeensyのプロジェクトとAruduino(+Teensyduino)は疎な関係であり、makefile内に記述したパス設定によって連携します。そのパス関係は下記のようなイメージになっています。
VisualTeensyのプロジェクト生成時にAruduinoのパスを設定しましたが、Aruduinoに適用したTeensyduinoの場所までは知らないようです。皆がディフォルトパスでTeensyduinoを導入する訳ではないため致し方なしというところでしょうか。
makefile(Mike OM版)に適用したパス変更は以下の通りです。
- BUILDER_BASE(Arduinoへのパス)を修正。
- HARDWARE(Arduino\hardwareへのパス)を修正。
(*)Teensyduinoの適用によって配下にteensyフォルダが追加されています。 - TOOLS(Arduino\tools-builderへのパス)を修正。
- LIBRARIES := -built-in-libraries=(Arduino\librariesへのパス)を修正。
- LIBRARIES := -libraries=(ローカルなArduino\librariesへのパス)を修正。
(*)Aruduinoのインストール時に作られるDocuments配下のローカルフォルダを使用するのが一般的ですが、他のフォルダでも構いません。Keiths' Teensy SDRをBuildするために集めたライブラリを置くフォルダを作り参照します。 - その他のLIBRARIES指定。
(*)自環境に合わせて増やす、あるいは削除します。 - UPL_PJRC_B(Arduino\hardware\toolsへのパス)を修正。
- UPL_TYCMD_B(TyToolsへのパス)を修正。
(*)UPL(Uploader)はどれか1つで良いものと思われます。
.vscode/c_cpp_properties.jsonの"includePath"等のパス設定もmakefileの設定に合わせて変更します。VS Codeのインテリセンスがデバックを支援してくれると思います。
.vscode/tasks.jsonの"command"はVisualTeensyによってプロジェクトを自動生成すると"VisualTeensy_v1.5.0 / make.exe"になりました。Mike OMは"GnuWin32 / bin / make.exe"を使用していますが、このままVisualTeensyのmakeとしました。
ライブラリ収集
makeが動くようになったところで、エラーを吐かせて解決して行くモードに入ります。Keiths' Teensy SDRのRadioConfig.hの設定は複製したままにし、唯一"#define USE_RA8875"文のみコメントを外してONにしました。
- Teensyduinoの標準ライブラリだけではSDRのBuildに足りていないため、エラーメッセージが足りないライブラリを教えてくれます。
- そのメッセージをクリックすると、VS Codeのインテリセンス機能?によってソースコードの該当箇所(ライブラリのinclude文)にジャンプします。
- 親切なことに、ソースコードのコメントにGitHubのURLが書いてあるため、足りないライブラリのGitHubリポジトリを開きます。
- git cloneでユーザーローカルのArduino\librariesフォルダにライブラリを複製します。このフォルダはmakefileにパスを設定済みです。zip downloadよりもgit cloneの方が一連の繰り返し作業が速いと思います。ライブラリの更新にも迅速に対応できます。
以上をひたすら繰り返します。当局の環境に足りないために複製したライブラリを以下に示します。Keiths' Teensy SDRが様々なContributorsの貢献の上に築かれていることを気付かせてくれます。
最後のエラー
ライブラリがそろえばOKかと思えば、タッチ関数が無い旨のエラー('class RA8875' has no member named 'touched')が複数出てきました。全てタッチスクリーン関係です。
結論から言うと、Teensyduinoによって導入されたRA8875ライブラリの設定ファイル(RA8875\_settings\RA8875UserSettings.h)を変更する必要がありました。
タッチスクリーンを使用する場合は、RA8875UserSettings.hの中の以下のコメントアウトされた定義文のどちらかを有効にする必要があります。
//#define USE_RA8875_TOUCH//resistive touch screen
//#define USE_FT5206_TOUCH//capacitive touch screen
Mike OMと同じようにBuyDisplayの4.3 inch TFT LCD Display Capacitive Touchscreen w/RA8875 Controllerを使用する場合は後者を有効にします。
少し混乱する話になります。RA8875はディスプレイコントローラですが、抵抗膜方式タッチスクリーンのコントローラ機能も混載しています。抵抗膜方式タッチスクリーンを使用する場合はRA8875で足りるため前者を有効にします。
BuyDisplayの4.3 inch TFT LCDは静電容量式タッチスクリーンを採用しているため、RA8875に加えて専用のタッチスクリーン・コントローラFT5206を搭載しています。よって、この場合は後者を選択します。ちなみに、iPhone等も静電容量式タッチスクリーンです。
Mike OMのREADME.mdやWikiをよく読むと、選択の必要があることが書いてあるのですが、Teensyduinoによって導入されたライブラリの奥深くに設定すべき場所があることに気付きませんでした。
以上でコンパイルを通りました。これから、RadioConfig.hの設定をRS-HFIQに合わせ込みたいと思います。