イメージ 1

イメージ 2

VisualC++2010Expressでの周波数の読み取りができたので、これをVisualC++2008Expressでも同様に行ってみた。相変わらずノートパソコンはちんたら動いて多少のストレスが感じれれる状態だ。2008での作成は昨日というか今朝というか確認したものをその日の夜にアップしているんです。少し酔っ払っていますが、何とかまとめねば。これからカラオケに向かうのだが、その前に少しまとめをアップするつもりでアクセスしました。
単純に周波数の制御のコードは問題なくVisualC++2010Expressでのコードと同じもので動きます。ですのでコードは省略します。画像と無線機の周波数を取り込んだ値をハムログに送る部分を2008でのみ先行確認しましたのでこれを説明します。
読み取った周波数をどうするかというと、周波数の桁を出してその桁に合わせて抜き出す部分を決めるということを行います。ハムログに記入する仕様を決めるということです。
読み取った周波数は桁が10Hz 代まであります。このためハムログではうまくありません。
標準でもバンドの21とか14とか7とかでなければなりません。これでは実際の運用した周波数がわかりませんので、せめてKhzまでは出したいということでコーディングしています。たとえば21.234.56という読み取りですが、ハムログへは21.234にして送り自動入力させるということです。FT-1000MPのトランシーバーでは先のブログにもかきましたが、周波数範囲は100Khzから30Mhzです。この周波数範囲での周波数の表記は3種類となります。この分類にあわせて桁処理を行いそれをハムログへおくる段取りをします。この処理で使用するのは構造化プログラムに適したSwitchを使います。文字化した周波数の抜き出しはSubstring(,)を使い抜き出しします。問題となるのがString値になっている値をchar配列に変換して送らなければなりません。結論から言うとポインタを使います。周波数の情報は6個のchar 配列で宣言してあるので、最初のデータの位置にポインタを持ってきポインタのアップ+1で次のデータを配列に入れていく用にします。このためにStringデータを次のようにポインタに変換します。
char* p=(char*)System::Runtime::IterropServices::Marshal::StringToHGlobalAnsi(kakotxFtoHamlog).ToPointer();
後は先に説明したように最初の周波数をChar配列にポインタで入れていきます。
入れてあるデータの例として周波数が21.234Mhzがはいっていることになります。
hamdat5[0]=*p; // "2"
hamdat5[1]=*(p+1); // "1"
hamdat5[2]=*(p+2); // "."
hamdat5[3]=*(p+3); // "2"
hamdat5[4]=*(p+4); // "3"
hamdat5[5]=*(p+5); // "4"
ここで割り当てたポインタは必ず開放します
System::Runtime::InteropServices::Marshal::FreeHGlobal((IntPtr)p);
あとは作成した関数に送るだけです。
hamlogTX_datvc2008(dcode,hamdat5);
以上で終わります。カラオケへゆかなければおそくなる~!!