27-Jun-2021
[OpenGD77のその後(2)]

24-Apr-2021の続き。

OpenGD77の配布形態が変わったようで、https://www.opengd77.com/downloads/から適宜必要なファイルを拾うという形態になったようです。コンパイル済みのバイナリには興味が無いので、リリースされた(これを書いている時点ではreleases/R2021052901)ソースコードのビルドができるかどうか試してみることにしましょう。

ソースコードおよび必要なツール類はsources_and_tools/に入っています。アーカイブをざっと見てみるとこんな感じでしょうか。

OpenGD77_FirmwareLoaders.zip
gd-77_firmware_loader.pyは以前のものと比べ、公式ファームウェアからcodec blobを抜き出し、OpenGD77に組み込み後encryptを行ってアップロードする機能が追加されている。FirmwareLoader-Linux.exe, FirmwareLoader.exeはmonoで動くGUIを使ったプログラムのようだが、今回は使わない。
OpenGD77_buildtools.zip
FirmwareLoader, FirmwareLoader-Linux.exe, FirmwareLoader.exe, LibUsbDotNet.dll, Newtonsoft.Json.dllはOpenGD77_FirmwareLoaders.zipと大体同じだが、OpenGD77_FirmwareLoaders.zipに入っている方が若干新しい様子。codec_cleaner, codec_cleaner.Linux, codec_cleaner.exeは不要な気もするが、一応使っておく(なおcodec_cleanerのソースコードは無い)。
OpenGD77_sources.zip
ソースコード。

ビルド環境は09-Jan-2021と同様、Arch Linux上で行います。これを書いている時点ではarm-none-eabi-gcc-11.1.0が入っていますね。

必要なファイル類の展開とビルド用ディレクトリの作成
unzip -x /path/to/OpenGD77_FirmwareLoaders.zip gd-77_firmware_loader.py; unzip -x /path/to/OpenGD77_buildtools.zip; unzip -x /path/to/OpenGD77_sources.zip; cd OpenGD77/firmware; mkdir build
codec_cleanerの修正(スクリプトは改行コードの問題により動かないため、バイナリを直接呼ぶようにする)
mv tools/codec_cleaner tools/codec_cleaner.old; ln -s codec_cleaner.Linux tools/codec_cleaner
ダミーのcodecバイナリ作成(サイズが重要、0byteではダメ)
dd if=/dev/zero bs=15360 count=1 | tr '\000' '\377' > linkerdata/codec_bin_section_1.bin; dd if=/dev/zero bs=176128 count=1 | tr '\000' '\377' > linkerdata/codec_bin_section_2.bin
tools/codec_cleaner -C; mv codec_bin_section_?.bin linkerdata/
Makefileの修正
DEFINES += にある-DGITVERSION=\"`git rev-parse --short HEAD`\"を-DGITVERSION=\"`date +%y%m%d`\"に
ビルド(VERBOSE, RADIO, -jオプションはお好みで、この例ではBaofeng DM-1801向けとする)
cd build; make -f ../Makefile -j5 RADIO=DM1801 VERBOSE=1

問題なくビルドが終われば、bin/OpenDM1801.binが得られるはず。

ファームウェアの書き込みはOpenGD77 firmware installationにあるように、GD-77 Firmware v4.3.6 [Ham Version]に含まれるGD-77_V4.3.6.sglに対するバイナリパッチという形で行います。入手不能になる前にこのファイルは入手しておいてください。

単純にpython3 gd-77_firmware_loader.py -m DM-1801 -f /path/to/OpenDM1801.binとした場合は、codec blobを組み込めないために"Flashing FM Only firmware"の警告が出ます。これは、printf "[GLOBAL]\nSourceFirmware=GD-77_V4.3.6.sgl\n" > ~/.gd77firmwareloader.iniとしておくことで"Patching the official firmware"となり、DMR対応となります。GD-77_V4.3.6.sglの置き場所は、多分カレントディレクトリで大丈夫。

Makefileはgitを呼び出す代わりにビルドした日付を放り込む方法で逃げていますが、これはより賢い回避方法があるはずです。また、ダミーのcodecバイナリについても、リンカスクリプトで適当な空間を作り出し、codecバイナリ抜きでビルドできるよう修正する方がスマートでしょう。

GitHubにコードがあればissue立てるなりして改善提案もできるのでしょうが、そのような窓口もないようなのでこの日記でボヤく程度にしておきます。54.60kg(17:25)

29-Jun-2021補足:どうも使っていたOpenGD77_buildtools.zipが古かったようで、更新された版を使用する必要があります。旧版(ファイルのタイムスタンプが2021-05-26 17:35)だとスクリプトcodec_cleanerの改行コードに問題がありましたが、更新版(タイムスタンプが2021-05-31 19:57)ではこの問題が解決しています。また、codec_cleaner -Cでダミーのcodecバイナリを作成できるので、これを使用するよう手順を改めています。なお、codec_bin_section_1.binが15360byte, codec_bin_section_2.binが163984byteになるようです。

codec_cleanerは、旧版だと0x00000400〜0x00003fff, 0x0004c000〜0x00076fff、更新版だと0x00000400〜0x00003fff, 0x00050000〜0x0007808fの範囲を0xffで埋めています。適切なサイズのcodec_bin_section_[12].binを用意しないとcodec_cleanerがcore dumpを吐いたり、吐かなかったとしても(必要なコードやデータを潰すことで)正常に動作しないバイナリが出来上がる危険性がありますので、OpenGD77のフォーラムに書いたようにリンカスクリプトを直す方が適切だと自分は考えるのです…蹴られましたけどね。

25-Jun-2021
[相変わらず停滞中]

大陸の覇者、久々に実装当日に新キャラを引きまして(嬉)。持っていないキャラはこんな感じ。ブリジットがなかなか来ない…

★5
ギルデロイ(槍), ハンイット(弓), ニコラ(短剣), トレサ(槍), ドロテア(槍), ティキレン(剣), リュミス(斧), グロッサム(扇), ステッド(杖), サイラス(本), ヴァルカン(本), アデル(短剣), イデア(剣), リトゥ(短剣), ムールゥ(本), ガートルード(斧), プロメ(杖)
★4
ブリジット(杖)

これで手元の★5はこんな感じになりました。

以下、★4.5。

★5だけで見ていくと、剣(2)短剣(2)弓(2)杖(3)斧(2)扇(1)本(1)の13人。無いのは槍のみ。属性で数えるなら風(6)闇(1)火(1)雷(1)光(3)氷(1)と風に偏っているのは相変わらず。

普段使いのパーティは相変わらずこんな構成なんですが、そろそろ見直さないといけないかなという気がします。

前衛後衛
ヴィオラ(Lv75/94, 短剣, 火)フィオル(Lv75/90, 剣, 闇)
スケアクロウ(Lv76/94, 弓, 風)リネット(Lv74/74, 扇, 火)
テレーズ(Lv73/73, 本, 雷)モルルッソ(Lv81/94, 杖, 風)
シェルビー(Lv75/80, 斧, 氷)ピア(Lv75/78, 槍, 光)

とはいえリネットに代わる踊子(扇)やテレーズに代わる学者(本)が育っていないのでここをいきなり置き換えるのはちょっと難しそうです。シェルビー→テオの入れ替えは悪くなさそうですが、テレーズの雷属性と被るのと氷属性持ちがいなくなってしまうのが問題です。

★4のポーラ(闇)はLv71/75まで育てているのでリネットをしばらくの間これに替えても良いのですが、会心バフ/闇アタッカーというちょっと癖のあるキャラなので上手に使える自信がありません。53.75kg(21:00)

22-Jun-2021
[なんかMassDuino UNO LCの調子が悪いので]

あれこれやってたらCH340Gがお亡くなりになったのか、どうにもならなくなりました。という訳で、CH340Gを外して適当なUSB-UARTを試すことになるのですが、5V動作なら適当なものを繋げば良いものの、3.3V動作なのでTXD/RXDその他信号が3.3Vを喋ってくれないと困ります。

手近にあるBaite製のUSB-UARTアダプタ、載っているHT42B534のデータシートを見ると3.3V化できそうなのでこれを使ってみることにしました。

tp6224349.jpg tp6224351.jpg

やることは二つ、VDDIO(10)ピンとVDD(16)ピンを接続するパターンを切断し、VDDIO(10)ピンとV33O(3)ピンを配線すること。とはいえ下手にパターンを切ってしまうとLEDへの影響も出そうなので、HT42B534のすぐ近くを切っています。パターンをちゃんと切れたかどうかはデジカメで撮った画像を拡大して確認し、配線については色々やり方があるでしょうからお好きな方法で。

tp6224353.jpg tp6224354.jpg

CH340Gを外してMassDuino UNO LC Lite風にしたものと接続すると、こうなりました。

tp6224355.jpg

CH340G搭載時はavrdudeのverifyが割と高い確率で失敗していたのですが、交換後(?)はそんなことも起こらずきちんと動くようになったので、安心して使えそうです。(ひょっとして、CH340Gが載ってるMassDuino UNO LCを買うよりも、MassDuino UNO LC Liteに各自でUSB-UARTアダプタ繋いだ方が良かったりする…?)53.95kg(20:50)

20-Jun-2021
[格安スペアナが必要だ(3)]

準備が整ったので早速動かしてみます。

とはいえ説明書がドイツ語で書かれており、しかもGoogle翻訳を通して読むのもなんか面倒そうなので(方法が間違っていたとしても)まずは手当たり次第に動かすことにします。

  1. Setting→Setup→HW/GeneralのNWT selectionを設定(LTDZ 35-4400M Spectrum Analyzerを使っているのでLTDZ(old))
  2. RF_OUT→アッテネーター→RF_INを接続してMeasuring head→Measuring head data recalibrate、Attenuator in (dB)のデフォルトが-30.0なので-30dBのアッテネーターを使用し、Callibration frequency in (MHz)もデフォルトの100.00000で実行
  3. startupとstopに測定したい周波数の範囲を設定

準備が終われば、あとは以下の手順を繰り返すだけ。

  1. 測定対象を繋ぎ、continuousもしくはsingleを押して測定開始
  2. 必要に応じFile→Save as imageで画像を保存

設定ファイルが$HOME/nwt4/.nwt4.cfgに作られるのはちょっと直したい気もしますが、とりあえず2425MHzのキャリアを出すスケッチを作って測定した結果がこれ。

t210620_052008.png

LoRa変調で最速のデータレートとなる状態(SF=5, CR=4/5, BW=1625kHz)でデータを送信し続けるスケッチ(RadioLibのサンプルを改変したもの)を実行し、stepsを最大の2000に設定して測定した結果がこちら。

t210620_062209.png

E28-2G4M12Sに搭載されるSX1280の定格出力が+12.5dBm、LTDZ 35-4400M Spectrum Analyzerの最大入力が+10dBmです。-6dBのアッテネーターを入れておけば十分かなと思っていたのですが、キャリブレーションを行った状態から取り外すのも面倒だったので-30dBのアッテネーターを入れたままの状態で測定しています。

スプリアス強度の確認に使うのは難しそうですが、手元にあるワンセグチューナ/RTL-SDRでは受信できない周波数の電波が出ているかどうかの確認用途なら十分対応できそうです(元々それが目的で購入したものですし)。54.60kg(07:20)

19-Jun-2021
[格安スペアナが必要だ(2)]

22-Aug-2020の続きとなります。

linnwt4の作者であるDL4JALのweb pageがhttps://www.dl4jal.de/へ移転しており、またlinnwt4についてもNetzwerktester NWT4000/6000 von BG7TBLにあるlinnwt4_v1_10_13.tar.gzが現時点での最新版となります。

基本的にやることは前回と変わらず、OpenBSD向けの修正内容もほぼ同じなのですが…パッチは作り直してみました。Qt4が必要なので予めpkg_add qt4を行っておき、パッチを当ててからビルドする必要があります。

起動方法も変わりません。NWT4000lin -len(-lenを忘れるとドイツ語で起動します)で起動し、konstdef.hに記述した/dev/tty00〜03および/dev/ttyU0〜U3の範囲に接続されるNWT4000の類を自動的に検出するようになっています。

他に必要となる小物も揃いつつあり、

これに加えE28-2G4M12Sの出力を内蔵アンテナからu.FLコネクタへ切り替えたので(実はこの作業が一番大変だった)、適当なスケッチを書き込んだ状態で接続すれば何らかの測定ができるような気がします。21-Aug-202017-Sep-2020にあるものをSX127x→SX128x向けに修正すれば良いでしょうかね。53.45kg(21:00)

18-Jun-2021
[停滞中]

大陸の覇者は完全に何もやってない状態です。

★5
ギルデロイ(槍), ハンイット(弓), ニコラ(短剣), トレサ(槍), ドロテア(槍), ティキレン(剣), リュミス(斧), グロッサム(扇), ステッド(杖), サイラス(本), ヴァルカン(本), アデル(短剣), イデア(剣), リトゥ(短剣), ムールゥ(本), ガートルード(斧), プロメ(杖)
★4
ブリジット(杖)

毎日10個のルビーが支給される→3日経てば一回はガチャを回せる、という状況で時々回しているものの、この前の大盤振る舞いの影響がまだ続いているのか相変わらず引きが渋いという印象があります。トラベラーストーリーを進めるにしても、授けし者の富/権力/名声の各1章のクリアが必要になってくるので(まだ序章しか終えていません)、そろそろ片付けないといけないなとは思っているのですが全く進めていません。

キャラクタをある程度集めて/育ててしまっているので実行には移さないのですが、なんとなく全部リセットして最初から解き直したい気分です。ヘルミニア戦や、パーディス三世戦の3戦目をまた見たいのです。BGMが良いので。

そういえば11-Apr-2021に書いたドローンの話の続きを書いていない気がするのですが、HolyStone HS700Dでの包括申請は23-Apr-2021に許可が下りています。しかしドローンのトラブルにより、飛ばせない状態が続いています。

HS700D、いつの間にか後継のHS700Eが登場していますね。Holy Stone HS700EとHS700Dの比較動画を見てしまうとHS700Eが欲しくなってしまいますが、HS700Dのバッテリーが使えないことと、現時点で満足にHS700Dを飛ばせていない以上、機体を増やすのは我慢なのです。53.40kg(21:15)

13-Jun-2021
[載るんだ…]

その辺にあった5×7cmのユニバーサル基板にwemos TTGO-XIっぽいのとピッチ変換をした2.4GHz-LoRaモジュール(E28-2G4M12S)を載せてみたら載ったので、組み立てちゃいました。

timg_20210613_130925_1.jpg

なんかArduinoシールドよりもコンパクトにまとまってしまい、最初からこう組み立てれば良かったんじゃないの?という気がしなくもないのですが、多分気にしてはいけないものだと思うので気にしないことにします。

実際に動くかどうかはともかく、結線は大丈夫っぽいのであとはソフトウェアと申請用書類の用意をしないといけません。工作も面倒ですがむしろ書類書きの方がもっと面倒で…気が重いです。53.95kg(13:45)

06-Jun-2021
[おわんない…]

B250 MINING EXPERT用にDDR4なメモリを買いましたが、初期不良があるかどうかくらいは確認しておく必要があるので、簡単に組み立てて動かすことにしました。

イマドキの…と言うにはかなり時間が経っていますが、最近のマザーボードは親切になったのかUEFI setupから抜ける際に、「設定を変更した部分はこれとこれ」と教えてくれるのは非常にありがたいです(結局どこを変更したっけ?となることが多いので)。

逆にmemtest86のFree版、テストが4passで止まってしまうというのは不親切かも。テストを仕掛けて寝ている間にとにかくpassを回せるだけ回すのがいつもの儀式なので、勝手に打ち切られてしまうのは困ります。

tp6024332.jpg tp6044333.jpg tp6054336.jpg

目的もなくただ単に部品を集めてみたのが、ここまでできるとPCIe-M.2アダプタ越しにストレージを付けようかなとかちゃんとした電源を用意したいなとか、組み上がったマシンはどういう目的で使おうかなとか色々楽しくなってきますね。

とはいえお金の工面も必要ですし、急いで計算機資源を増強しなければいけないという状況でもないので、のんびりやることにします。

ブレッドボードを使ってwemos TTGO XIもどき(LGT8F328P)と2.4GHz LoRaモジュールを繋げてなんとなく動くことを確認できたので、プロトタイプシールド基板に組み付けてMassDuino UNO LC(MD-328D)と組み合わせてみました。

tp6064338.jpg

本当はLoRaモジュールはプロトタイプシールド基板に直付けする予定だったのですが、工作スキルの都合によりソケットを使って取り外し可能な形になりました。

配線が問題ないことを確認したのでSX128x_Receiveを書き込んで試そうとしているのですが、LGT8F328P向けのビルドはできるもののLGT8F328D向けのビルドが通りません。lgt8fxのメンテナンスから始める必要がありそうです。53.90kg(21:25)