chacha-ansich、アマチュア無線局:JI1BXMのブログです。書き逃げ場なので、内容に責任は負いません。製作記事については、リグに重大な影響を与える場合があります。ご自身で再現される際には、この点を十分注意して自己責任で行って下さい。プログラムの解説(1)ー・・ーーーこんにちは。ご無沙汰しております。版には(1)画像の読み書き機能に加え、(2)MESSAGEの読み書き機能、(3)VOICEの読み出し機能を実装しました。FUSION」と呼べるものになったと思います。Ver.)」から「(仮)」の文字を削除しました。hiまた、プログラム自体も大幅に修正しましたので、それまでのプログラムとは構成も異なっています。この時点でやっと、全体的なプログラムの構造が定まったと思いますので、このエントリから暫くは「プログラム」について解説をしていきたいと思います。Handlerを自分仕様に変更される方の参考になれば幸いです。Boot3と呼ばれるフレームワークを使用しています。このためプログラムは多くのモジュールを抱きかかえることになるのですが、解説するのはフレームワーク以外のところだけにとどめます。プログラムの構成は下図のようになっています。続いて、ブラウザに表示するためのテンプレートの構成は下図のようになっています。Boot3フレームワークの上に乗っかってるので、ただのクラスファイルの羅列に見えますよね~。main()を探しても、そこからどのように動いているのかが、皆目チンプンカンプンになってしまいます。フレームワークについて触れると長くなるので、ここではまずは要点だけを挙げます。・ー・ー・・javaにしろCにしろ、プログラムのエントリポイントはあります。プログラム中にひとつしかないので、staticなんですよね。これは、net.dialectech.springCoreパッケージ中、のYsfSdCardHandlerApplication.javaファイル中にあります。args)という行があり、ここがプログラムのエントリポイントになります。Bootの制御を始めさせるところになっています。そのあとは、ちょっとモジョモジョ~なところ(実はデバッグ用の設定があって、デバッグモードで動作させると、SD-CARD以外のところにエントリを設けることができるようにしてあります。いう処理をするところが含まれています。)と、ブラウザをキックするところが記述されています。いうわけで、フレームワークの入り口についてはこの程度にして、次に、プログラム本体についての概要に触れていきます。Bootの場合、クラスの頭に「@Controller」と書いてあるものを、フレームワークは拾ってくれます。WEBリクエストに直接応答するところにもこの記述がされていれば拾ってくれるわけです。具体的にどのように紐づけるのかは、フレームワークが勝手にやっていますので、プログラマはそこまで気にしなくてもよいようになっています。ブラウザからのリクエストについての応答についてですが、たとえば画像プレーンでいうと、パッケージnet.dialectech.ftmSdCardHandler.actions中のCHandlerImageActionクラスが担当しています。各メソッドの頭につけてある「@RequestMapping」というのが、ひとつひとつのリクエストに応答する処理関数(メソッド)となっています。SD-CARD中の完全削除を担当するメソッドはブラウザから「deleteImageCompletely」というリクエストを飛ばしますが、これはactDataDeleteImageCompletely(~)というメソッドが処理をするようになっています。自分の場合、リクエストに対する応答メソッドの名称は、すべてactData~というように統一していますので、こういう名称のものは全てブラウザからのリクエストに応答するものとなっています。あと特徴的なのは、net.dialectech.ftmSdCardHandler.supporters.fileSystemパッケージでしょう。ここにある2つのファイル中CYsfFileSystemクラスは、シングルトンにしてあって、SD-CARDの書き込み・読み出しを担当しています。Systemのラッパーみたいな感じです。ひとつの、CYsfFileSystemCorePartクラスはCYsfFileSystemクラスの基礎となっているクラスですが、これは、SD-CARDに限らず、バンクの処理もできるようになっています。言い換えれば、バンクもSD-CARDも同体系のファイルシステムとしてアクセスできるようにしてあって、SD-CARDのみを特別扱いしたという感じにしてあるんです。他には、同じパッケージ中にあるCYsfCodeConverterは例のヤエス特殊文字コード体系(!?)の変換を扱うクラスです。このクラスは共通にどの操作でも使うものですので、singleton扱いにしてあります。staticでもよかったんですが、まぁSingletonの方が若干安心できるっちゅうか、なんちゅうか・・・。あとは、net.dialectech.ftmSdCardHandler.dataパッケージ中に各DIRの構造に対応する論理データ~binaryの変換なんかを含んでデータ構造を定義してあります。・・・・とまぁ、こんな感じで大枠を作ってあります。ちなみに、webブラウザで表示される側は、プロジェクトのsrc/main/resources/template/pages配下に収めてあります。このなかのbase.htmlが最初の画面(5つのプレーン)を全て定義してあるThymeleafファイルになっています。Ver.)の記事の中に固定してあります。現在、2024/6/6版を掲載しています。インストールにより、乃至プログラムを動作させたために生じた損害について、私は責を負いません。その他の注意事項は上記エントリに記載してあります。R」のダウンロードリンクはこちらのエントリに固定しておきます。現在、(6/23に微妙に機能を追加した)2024/6/6版を掲載しています。FUSIONR」(以下、単に「本プログラム」といいます。FUSIONで用いられるSD-CARDに対してPCから画像情報を記録して、リグからその画像を送信できるようにするプログラムです。FUSIONでは、SD-CARDを介してリグで送信する画像・受信した画像をPCで読み込むことができるようになっています。最近対応が施されたFTM-500を除き、現時点では未だPCで任意に作成した画像をリグに読み込ませるような手段が提供されていません。本プログラムは、PCで作った画像・PCに記録してある画像をSD-CARDに記録させます。これにより、PCで作成した画像をリグから送信できるようになります。FUSIONRを基礎とする八重洲無線さんの製品群は、SD-CARD中のPHOTOというフォルダ配下に画像情報を記録しています。ところが、ここに記録される情報は画像「情報」だけで、「無線機で管理する」ための情報が含まれていません。管理情報は、QSOLOGフォルダの下に記録されていて、画像情報ごとに多くの付随情報が含まれています。付随情報は、QSOPCTDIR.dat、QSOPCTFAT.dat、並びに管理情報を管理する(!?)QSOMNG.datファイルの3つに分かれて記録されています。QSOPCTFAT.dirには、その画像をリグが操作対象としうるのか、どうかに関する情報(具体的にはリグ上でリスト表示される対象なのか、消去されたものなのかに関する情報)が記録されています。よって、PCで作成した画像をリグで操作可能にするためには、単にPHOTOフォルダに記録するだけでは足らず、このような付随情報も併せて記録する必要があります。本プログラムを用いれば、このような付随情報も含めて操作するので、PCで作った画像でも、容易に送信できるようになります。FUSIONRを採るFTM-300・FT-5Dでは、記録してある画像情報を送信するたびに、新たな管理情報が生成されるようになっています。他のリグでも同様だと思われます。このような情報は画像検索時には不要だと感じます。このため、操作性を維持するために、送信後の情報を削除することも多いかと思います。ところが、この「削除」処理が曲者で、QSOPCTFAT.dat内に削除のマークを付けるだけです。言い換えれば、QSOPCTDIR.dat内の個別情報もPHOTOフォルダ内のファイル自体も削除しないわけです。これでは削除を繰り返したとしても、ゴミがたまっていくだけになります。これがただ溜まるだけならよいのですが、リグ上で送信する画像を選択する操作において、削除したところでは、次の候補を表示する時間が長くなっていき、操作の快適さが低下してしまっています。以上説明したように、本プログラムはリグに挿着するSD-CARDをリグから抜き出してPCに挿着し、これに対して操作をすることになります。これだけ見る限りでは結構単純なソフトでも機能するはずです。現実にこの機能を実装して運用してみると、他に様々な機能が必要だと感じるようになります。(1)話題によって異なる画像群を用意しておきたいが、そのためには、どういう操作の下でどういう機能が実現すればよいのか、(2)MOUNT忘れ等の操作ミスなどに対してどうプログラムは応答すべきか?などは設計思想にも影響することですし、実際に運用してみなければ分からないことです。リグによっては画像20個毎にブロック化されていて、送信する画像もこのブロックの中から選択できるようになっていたり(FT-5Dの場合)、このようなブロック化が全くさせておらず、全画像が平らな一階層に展開されていたり(FTM-300Dの場合)、します。このような異機種による取り扱いの違いによっても、操作感に影響しないような仕様にすることも勘案しなければならないでしょう。本プログラムはPC内部のストレージに直接アクセスします。よってSD-CARD以外のドライブを指定するとそのドライブが破壊される可能性があります。A、B,Cドライブはアクセスできないようにしてありますが、他のドライブを接続しているPCでは十分に注意が必要です。用いているので、もしかしたら、ネットにつながっていないPCですと、XMLのタイプ宣言を読み込めずに動作しない可能性もあります。(この点、検証していません。)(3)プログラムはjavaで、JAVAの処理系で最新のものを使います。ImageMagickというプログラムも使用します。(4)プログラムはまだアルファバージョンです。何が起こっても不思議ではありません。インストールしたために生じた損害について私は責任を負わないこととします。本プログラムを実行して何らかの損害が生じても、私は責任を負わないものとします。インストールしてPCに異常が起こっても問題にならないようなPCを利用することをお勧めします。隠しコマンドとして、SD-CARD以外のドライブであっても、SD-CARDをシミュレートできるようにするプログラムが未だ入っています。設定等によっては、PC上の既存のデータ等を失う恐れがありますので、この点十分、ご留意いただければと思います。(5)これによって書き込んだSD-CARDを用いると、リグで画像送信後にリグの電源がSHUT-DOWNしたりしますが、これはカメラマイクを使っても起こる現象です。その点は気にしないことにしています。今後、マニュアル・プログラムともに、変更していくことになるかと思います。当局へのお問い合わせにはお答えしないことを原則と致します。GitHub上のソースコードを理解して頂いて、ご自分にあった仕様にして頂ければと思います。インストールの仕方などはマニュアルに書いておきました。正常に動作すると、プログラムを走らせるとブラウザが開きます。このブラウザを通してSD-CARDにアクセスします。そんなこんなであります。マニュアルは、こちらです。JAVAのJARファイル(プログラム本体)は、こちらです。スキャンを実行できません。技術的な問題が発生しています。このまま「ysfSDCardHandler.jar」(24M)をダウンロードしてもよろしいですか?」と表示されるときには、「このままダウンロード」というボタンをクリックしてください。ソースコードは、githubの、こちらにあります。ブラウザが立ち上がり、正しく設定をしたにも拘わらず、SD-CARDに画像を書き込めない場合には、Imagemagickのディレクトリで"convert"をCLIで実行してみてください。再頒布可能パッケージ」をダウンロードして、これをインストールしてみてください。追加しました202406060818版ではMESSAGEの「消去扱い」にしたものでも表示させていましたが、これを他のプレーンでの同機能と同じく、「消去扱い」にしたメッセージの表示・非表示を選択できるようにしました。これにともない、バージョン番号は202406060818-2にしました。MESSAGE機能を追加しました。MESSAGE機能では、MESSAGEのSD-CARDからの読み込み、と新規メッセージの書き込みに対応しています。メッセージの見做し削除(表示上は「削除扱い」としてあります。)と完全削除機能は備えています。メッセージは記録していることが意味あると思われるので、修正機能は実装しませんでした。FUSIONでの拡張文字コードを利用しているために、IMAGEのDESCRIPTIONと同じく使用可能な文字に制限があります。詳細はマニュアルに記載してあります。VOICE機能を追加しました。VOICE機能では、RIGが録音した音声をPCで再生できます。見做し削除(表示上は「削除扱い」としてあります。)と完全削除機能は備えています。ファイル名の修正機能も備えました。ファイル名はWindowsシステムと共有するので、YSF拡張文字コードを使えません。よって、修正できる文字は、半角英数文字と、一定の特殊文字だけに限られます。IMAGE(PHOTO)が256個を超えたときに生じる不具合の対策をしました。QRコードが含まれる画像からそのQRコードを抽出できたとき、含まれるURL/EMAIL全てのリンクについてボタンを表示してJUMPできるようにしました。上記(1)(2)については、マニュアルに追記してあります。画像の付随情報(DIRエントリ)内の記述(DESCRIPTION)について、カタカナ表示をサポートしました。入力可能な文字種について、操作時に参照可能となるようにHELPボタンを追加してあります。QRコードの誤り訂正能力を「QRコード入力」ダイアログボックスで4段階で指定操作できるように操作部を追加しました。マニュアルも修正してあります。QRコードを解析してメアド・URLを抽出するとともに、その内容から、ブラウザ・メーラをキックする機能を追加しました。画像の付随情報(DIRエントリ)内の記述(DESCRIPTION)を任意に変更する機能を追加しました。マニュアルに追加機能に関する説明を追加しました。前回と異なる部分については、目次に黄色のマーカを付けてあります。QRコード機能を追加しました。マニュアルにQRコード機能に関する説明を追加しました。2024.05.04挿入文字に引用符などの特殊文字が含まれる際に生じる不具合を回避しました。ImageMagick動作に先立ち、存否確認を追加しました。これによって、設定ミスの発見を早めると思います。一度に複数の画像をアップロードする際の総容量を、総計300MBまで拡張しました。1画像については、50MBが制限値です。標準最大容量の設定項目を「対象設定タブ」に追加しました。(3)に合わせて、マニュアルを修正しました。2024.04.13GM動作時の画像交換に対応しました。今年完成した自作ランキング年も押し迫ってきました。今日も朝から年賀状の文面・イラスト作成作業をしています。ブログの方もちゃんと書かないと・・・。わけで、年末のブログネタとして、有用度からみる、今年完成した自作品ランキングとかを書いてみようかと思っております。ランク外のものも数多くありますが。I/FHRI-200に接続する「なんちゃって無線機」。いや、ただマイクアンプとAFアンプだけを要素とするもので、これで直接Wires-Xに音声を流し、また、受けることができます。AnalogNodeとして機能するだけです。これは、後に作ったWires-X用エコーバックノードに全ての機能を実装したので、不要となりました。VUメータ付きだったので、結構見た感じが楽しめました。マイクとリグ間に挿入するUP/DOWNパルスジェネレータTW-4000の修理をする前でもマイクのUP/DOWNボタンは完動だったので、ロータリーエンコーダの操作によってUP/DOWNパルスを生成する装置を作りました。修理までの緊急避難用のグッズです。TW-4000の修理が終わったらやはり不要となり、今となっては邪魔でしかないという・・・。^O^)""ただ、このとき作ったロータリーエンコーダのハンドラ・ライブラリは今年作ったFMラジオに活かされてます。タッチセンサー型スクイズキーパドルではなくタッチセンサーにするとコンパクトになって良いかな?と思って作ったものですが・・・。操作パッドは本体にビルトインすべきだったかもしれません。加えて、自分のキータッチの癖もあって、まぁ使いにくいのなんのって・・。Wires-X用エコーバックサーバWires-X回線から受けた音声信号を10秒を限度に記録してこれをそのまま返すサーバです。Zのような感じですね。付加機能として、直接マイクからWires-Xに送出できるようにもしました。誰にも気づかれないので、使用率は限りなく0。いまのところ、Wires-X上のノードのモニター留まりになっています。真面目に作った割には有用度は低かったですね。HFリグ用CAT支援システムこの便利さに慣れると、これなしではFTDX10を使う気になれません。FTDX101程の使い勝手になるわけではないのですが、かなり使い勝手は良くなりました。電源の選択によっては「思わぬグランドループでオーディオ系にハムが乗る」というトラブルを想定して、完全グランド分離を目指して作成した、マイク分配器です。運用しているうちに、設定によっては、不思議なグランドループができていて、送信音にハムが乗ることを観測しました。完全グランド分離に原始的なリレーでガチャガチャ切り替える構成にし、また、複数の電源数からひとつを選択できるようにしたわけですが、これが奏功したのでした。これでシャックがかなりスッキリして、使いやすくなりました。USBアイソレータマイク分配器とともに同率2位なのは、USBアイソレータですね。これを使うことで、FT8のときでもPCのノイズをあまり気にしなくてもよくなりました。リモコン制御FMラジオリモコンで選局・音量調整ができるFM専用ラジオです。使用チップはKT-0913なのでAM受信も可能ですが、WIDE-FMもあることからAMは除外して、FM専用として、簡素化しました。アマチュア無線とは無関係ですが、生活必需品となってしまったので、これを有用度1位としました。^O^)""そんなわけでした。皆さん、良いお年を~。^-^)ノ"TW-4000の修理タッチ・キーヤーの前にもうひとつネタを書いておきます。1983年に購入した、TW-4000。40年も経つんですねぇ。自分はもう自家用車を持っていないせいか、最近では使用頻度が下がっているものの、このデザインは飾るだけでも価値がある逸品なんですよね。昨年通電してみたところ、表示が滅茶苦茶。この不具合はバックアップバッテリが上がったためだろうからということでRESETで解消。ところが、メインダイヤルを回しても、UPの際に周波数が上がったり、上がらなかったり。通電直後は正常動作するものの、5分もしないうちに、この現象が出てくるようになりました。放置していたものの、やはり気になるわけです。そんなわけで、この現象はおそらくロータリー・エンコーダの接触不良。わけで、エンコーダを分解して、接点をゴシゴシと洗浄。これで不具合は若干だけ解消したものの、まだまだ生じる状況。(ロジアナとかがあればそれでチェックするのだけれど、)仕方ないので、次には容量抜けするような場所、具体的にはロータリーエンコーダ出力を整形するところにあるフィルムコンデンサを積層セラミックコンデンサに交換。ところが、不具合は解消せず。ことは、コントロール基板内の容量抜けだろうなということで、全部を分解するのが面倒だったので、そのまま放置しておりました。ところが、先日上の写真を撮るために通電してみたら・・・あらら、症状が重くなっている。わけで、どうしようかなと思っていたところ、たまたま見たのが「たくてれ。・・・・コンデンサの液漏れかぁ・・・この時期のKENWOODの類似リグでこの現象があるならば、TW-400でもありうるな・・・だとすると、そのまま放置していると、腐食が進んで、取返しがつかなくなるな・・・ということで、重い腰を上げることにしたのでした。コントロールユニットを取り出してみたら・・・。ここまで腐食が進んでいるとは・・・。ちなみに、これはランドの付近の腐食を除去したあとの写真です。もって、ランドが完全に剥離していたわけではなく、表面がしっかり梨地状に腐食しています。もって、腐食しているところは根深く、表面レジストをはがしてちょっと磨いただけでは梨地の凸部分の銅が現れるだけで、全体として梨地状は残るという状況です。