シリアル通信構想

シリアル通信部の構想がおおよそ固まってきた。
サンプルのシリアル通信クラスは、やはりスレッドを作って受信をやっているようで、受信キューに溜まったら読み込みをしてくれる、様子。
ただし、受信用のメソッドが用意されていないので、どうしてかな?と思ったら、受信したデータを処理するルーチンは実装されていなかった。
これは、ここは自作しなさいよ、ということでしょうな。
ということで、ここに、受信バッファを用意して、受信されてきたものを順次追加していくようにしよう。
バッファはとりあえず256バイト程度の固定値で。
使い方は限定しているから、そんなに無茶なデータも流れないし。
そして、新しく読み込み用のメソッドを追加して、そのバッファからデータを吸い出せるようにする。
読み出す度に、バッファの方は読み出された分を消去して、残りの分を前の方へ詰めていくことにする。
一つ気をつけなくてはいけないのは、1つのバッファを2つ以上のタスクが使うことになるので、セマフォをちゃんと設定してやらないといけないということか。
バッファに書き込もうとするヤツと、バッファを移動させようとするヤツが同時に動いたら、おかしなことになるものね。しかも、その間に受信した分は取りこぼす、とかいうことのないように。
さて、Win32 APIにセマフォの制御はあるのかな?

W-ZERO3 GPS化ソフトの方、ちょっと作業から遠ざかっていたけれど、久しぶりに再開。
Win32用のCommライブラリのソースを見つけたので、それをダウンロードしてきて読んでみて、さらにビルドもしてみたけれど、これ、受信バッファを見たり、イベントを待ったりしているわけではないので、最初に作ったプログラムと変わらない気がする。
次に、24termのソースを呼んでみた。
最初、W-ZERO3用のコードを読んだのだけれど、VC++6用だったので、eVCで読み込めず、解析が難しかった。
ので、Pocket PC用の古いコードを拝見したところ、これはスレッドを使ってイベントを待っていることがわかった。ターミナルソフトだから、受信は完全に分けちゃった方がいいのだね。
しかし、送信−応答がペアになっている通信の場合は、こういうスレッドプログラムにすると、ややこしくなりそうな気がする。一度、状態遷移図とか、まじめに書いてから作成したほうがいいな。
仕事で扱ってるコードは、そういうのを作ってなさそうで困ってるから(苦笑)
今読んでいるのは、 http://www.hidori.jp さんに掲載されていたシリアル通信のサンプルコード。
http://www.users.gr.jp/blogs/hidori/archive/2004/03/23/1734.aspx
WinCEに対応したクラスになっていて、スレッドの作成も中でやってくれている様子。
これなら、比較的簡単に使えるかな?と期待しているところ。

公証人役場におけるプライバシー

会社を休んで、公証人役場に行ってきた。
理由は前回と一緒だけれど、あれから2ヶ月も経ってるなあ。
で、行ってみると、2組ほどいた。
1組はすぐに出て行ったので内容は不明。
もう1組は遺書がらみ。家族総出で来ていて、内容に間違いないことを確認するために、公証人が読み上げるのだが、まあ、内容が全部わかるわけですよ。名前、住所、どこの銀行に預金があって、どこにどんな登記をしてある土地があって、などなど。
こういうのは他人に聞かれたらまずいと思うんだけどなあ。まあ、覚えちゃいないけどさ。
また、自分の分をやってもらってる間に、あきらかに外国の人が、日本人の付き添いで来てた。
奥さんと子供がウクライナに帰るらしいのだが、「父親の僕が了承してますよ。誘拐じゃありませんよ。」という趣旨の書類を作成して、それ(実際にはロシア語の原文の英訳)を公証してもらわないと飛行機に乗れないらしい。
情勢不安そうなところは大変だなあ、と思った。

道楽とは

英会話教室で、プレゼンテーションの練習があるので、その調べ物をしていたところ、感動的なフレーズに出くわした。
When a habit begins to cost money it is called a hobby.
ハビット(くせ)にマニー(金)がかかるようになると、それはハビー(道楽)と呼ばれる。
ちなみに、調べていたのは、村井弦斎の「食道楽」のタイトルをどう英語訳するか。
結局、「foodie」(食通、グルメ)としてみた。
ちなみに、その「食道楽」で紹介されたレシピを使ったカレーパンとコロッケが、明治村で売っているらしい。
http://www.meijimura.com/105/02.html
明治村、行きたいなあ。

Hi-MD WALKMAN MZ-NH3D

Hi-MD WALKMAN MZ-NH3Dが近所のサトー無線の閉店にあわせて、展示品が処分価格になっていたので購入。
WALKMANと名の付くものを購入するのは初めてかもしれない。そりゃそうだ。音楽聴かなかったもん。
HiMD
iPodももっているのに、いまさらMDかよ?
というのもあるのだが、愛車のカーナビになぜかMDが搭載されているので、これを使ってやりたいな、と思っていたわけだ。車を買って2年になるけど、一度も使ったことがなかった。
CDプレーヤも当然内蔵しているから、CD-R焼けばいいじゃん、という話しもあるんだが、CD-Rは長くても80分しか入らない。MP3対応じゃないからねえ。
もちろん、iPodを接続することも試した。こいつなら、毎日Podcastも入ってくるし。
FMトランスミッタも買ったし、ドックコネクタから接続するオーディオケーブルも買ったし、ビデオも表示できる3端子つきのビデオケーブルだってもってる。でも、どれもいいソリューションではなかった。なにより、接続するの面倒なのよ。
MDなら、MDLPに対応しているので、1枚で最大320分まで行ける。
今回購入したHi-MDプレーヤは、PCと接続することで、CDから取り込んでMDに書き出すことができる。NetMDと同じだけど、これは便利。なにせ、CDプレーヤとMDレコーダを繋いでダビングとか面倒なことをしなくて済む。
CDをSonicStageというソフトで取り込んで、それをUSB接続したMDプレーヤに書き込むだけ。実に簡単。
初期設定のままにしておくと、CDはATRAC3 64kbps、すなわちMDLP LP4相当で取り込みされるので、そのままMDに転送すれば、勝手に収録時間が4倍になる。どうも、LP2やSPとの混在もできそうだが?
さらに、Hi-MDプレーヤは、データストレージ機能ももっている。
マスストレージクラスに対応しているので、繋げばそのままMOみたいな感じで使うことができる。
いままでのMDでも、2倍容量になってくれるので、300MBぐらいのデータストレージになってくれる。
フォーマットさえ済んでいれば、Mac OS Xでも認識してくれるので、これはいいかも。
液晶付きリモコンもついているので、いっそ、iPodから乗り換えてもいいかも、とちょっと思わせる。
とゆっても、実際はPodcastを取り込むのも面倒だから、乗り換えることはないだろう。
基本的に、カーオーディオ用音楽作成デバイス、という位置づけ。
MDLP LP4の音質は、相当ひどいものなんじゃないかと危惧していたけれど、全く問題にならなかった。
むしろ、iPodをケーブルで接続して、VCR入力から出力した方が汚いぐらい。
これなら十分にカーオーディオとして使えそうだ、という印象を持った。
ただ、このプレーヤ、難点もある。
クレードルはオシャレなデザインなのだが、充電しかできない。あくまで、「充電スタンド」。
最初は本体のどこにACアダプタのコネクタがあるのか探してしまった。
実は、充電スタンドがないと充電できないのだ。18時間程度しか再生時間がないのに、
ちょっとした旅行には充電スタンドも持っていかないとならなさそう。
それは、iPodでも同じ問題があるけど、iPodはUSBやFirewireからの充電もできるからなあ。
また、PC接続と充電を同時にできない。同じコネクタを使っているから。
そのため、充電スタンドから取り出して、ケーブルをさしなおさないといけない。
これは面倒だ。
普段はUSBに繋いだままにしたいんだけどな。

グループボックスは使えない?

ダイアログボックスにラジオボタンを作っているところ。
緯度経度の出力を、TOKYO97かWGS84にするか、という選択肢をつけようとした。
まあ、最初はTOKYO97だけの実装になると思うけど。
「Beginning Visual C++ 6」によると、ラジオボタンを含むときには、「グループボックス」というコントロールを使う、というようなことが書いてあった。
そして、eVCにもグループボックスがある。
ラジオボタンをグループボックスで囲んでダイアログを作って、ビルドして、実機で実行したところ、正しく表示されない。消えてしまうのだ。
これは、おそらく、1つのダイアログではラジオボタンは1組しか使えない、ということなのかな、とも思った。
まあ、いいか。
ラジオ化するのはそのぐらいだし、ほかのコントロールでも代用できるし。

eVC開発環境再構築

eMbedded Visual C++をPAEが動作する環境で動かそうとすると、Pocket PCエミュレータが危険なアプリケーションです、とかなんとかいわれてしまうので、それを避けたくてVMware PlayerでWindows 2000環境を構築していた。
そこにeVCをインストールして開発をスタートしていたのだが、ビルドしたプログラムを転送するのが面倒くさい。
ビルド時間とかは気にならないぐらい応答もいいのだけれど、ともかく、この転送のためにいちいちゲストからホスト、ホストからゲストへ、と移るのがわずらわしい。
ということで、ホストOS側にeVCをインストールすることにした。
このためには、セキュリティリスクがともなう。
せっかく、Athlon 64 + Windows XP Media Center Editon 2005 (XP Pro SP2相当)によって使えるようになった、NX機能をつぶさなくてはならないのだ。
この方法がよくわからなかった。
まずはじめに「boot.iniの/PAEオプションを消しなさい」という英語のヘルプページに飛ばされた。
しかし、そんなものはない。
SP2の方はこちら、というページ(http://support.microsoft.com/kb/891667/)に飛ぶと、日本語表示になった。
たぶん、言語設定が日本語だからだろう。
しかし、意味がわからない。

5. pae を存在する場合、がオプションするを削除することによって PAE モードを無効にします。
6. noexecute を存在する場合、
がオプションするを削除します。

なんですかこれは?
と思ったら、これ、機械翻訳サービスによるページだったらしい。
トップに注意書きがあったので、引用すると、

ご注意: このサポート技術情報 (以下 KB) は、通常、英語で提供されている文書が機械翻訳システムにより自動翻訳されたものであり、人的な確認・修正が加えられたものではありません。この翻訳版の KBは、日本語をお使いになるお客様の便宜のために提供させて頂くものであり、マイクロソフトは、翻訳言語の品質について一切保証するものではありません。また、KB の内容誤訳によって、またはお客様による KB のご使用によって、直接または間接的に起こりうる一切の問題について、いかなる責任も負わないものとします。

内容を誤訳したら、意味が変わる可能性が十分にあるんだけどなあ。
ともあれ、翻訳を英語にしたら、普通の英語になってくれた。やれやれ。
結局、

5. /pae が存在する場合、オプションを削除することによって PAE モードを無効にします。
6. /noexecute が存在する場合、オプションを削除します。

ということだったらしい。
これによって、NX機能が使えなくなった。ああ、セキュリティリスクが…
まあ、まだ多くのPCはNX機能をつんでないんだし、と思いつつも、Athlon 64使ってる意味がないじゃん、とだんだん思うようになってきた。
特徴機能の中で実際に使われているのは、Cool’n Quietだけか…

VMware Player と Athlon 64 3000+ と 64bit OS

VMware Playerは64bitホストならびにゲストOSに対応しているのだけれど、もちろん、CPUも64bit対応している必要がある。
我が家のPCは、Athlon 64 3000+なので、ホストはWindows XP Media Center Edition 2005ということで、32bit OSなのだけれど、その上で仮想マシンとして64bit OSが動かせるじゃん!と期待していたのだけれど…
対応CPUは、
・AMD Athlon 64, revision D or later
とのことで、うちのSocket 754のAthlon 64は、Family F, Model Cだったとさ。ああん。
ということで、相変わらず、64bit拡張CPUの恩恵は受けられずじまいなのであった。
むしろ、PAEのせいで動かないアプリがあって邪魔くさいぐらい…

ダイアログボックスのメニューを消す

今日は設定用のダイアログボックスを作ってみよう、と思った。
「Beginning Visual C++ 6」という英語の分厚い本を引っ張り出してきて、ダイアログボックスのあたりとかを読んでいるのだけれど、同じようにしてもリンクが通らない。VC6とeVCとでは、扱いが違うのか?
それとは別に、「このソフトウェアについて」のダイアログが出ているときに、ソフトキーが表示されているのがいやだなあ、と思った。
これを消すために、何かInactiveとかEnableとかHideとか何かのコントロールを使わなくてはならないのだろう、と思っていたのだけれど、どうもそうではなく、消すだけなら簡単らしい。
WM_INITDIALOG メッセージの処理時に、SHINITDLGINFO のフラグとして、

SHINITDLGINFO shidi;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU;

とする。SHIDIF_EMPTYMENUが追加の部分。
これで、ソフトキーが消えてくれる。
AboutDialog
うんうん、こうでなくてはな。

開発お休みの日

三日坊主、ともいえなくもないが。
今日は、W-ZERO3の開発はお休み。
帰ってきたら9時半ぐらいだったし。
本職の方で、一日中、コード眺めたりビルドしたりデバッグしたりをしていたから、コードものは疲れ気味。
また週末にちょこっと手を出そう。