標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第282回]
●RS232C受信プログラムの説明です(5)
WindowsアプリケーションでRS232Cにアクセスするためには、WindowsAPI(Win32)のCreateFile()を使って、「オープン」する、
というところまでが、前回のお話でした。
Windowsアプリケーションではなくて、DOSプロンプトの中だけで動く、CUI(Console User Interface)アプリケーションを作りたいだけなのですが、WindowsXPはI/Oデバイスに直接アクセスすることを許してくれません。
おまけに、実際にはRS232CではなくてUSBにアクセスしなければならないのですから、昔のDOSアプリケーションではどうしようもありません。
ところが、このWindowsアプリケーションなるものが、実にわかりにくい、ときています。
RS232Cを使うには、Win32アプリケーションのCreateFileを使う、というところまではつきとめたのですが、そのパラメータがなんとも仰々しくて、今一つよくわかりません。
/// com open
int open()
{
hcom=CreateFile(comname,GENERIC_READ|GENERIC_WRITE,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hcom==INVALID_HANDLE_VALUE)return 0;
ネットを検索すると、あちこちで同じような記述を見つけます。
どこかにソースがあるはず。
そいつを確認したい、と思ってあちこち捜しまわったら、やっと見つかりました。
●MSDNのサイトにありました
なんてことはない、あちこち捜しまわった挙句、本家本元、Microsoftのサイトにしっかりと書いてあることがわかりました。
CreateFileについてはこちらのページにあります。
同じページですけれど、ちょいとコピーしてみました。
このページに、各パラメータについての説明がしっかりと書いてありました。
そして、その説明のずっと下のところに、こんなことが書いてありました。
うーん。これだけで全てがわかったわけではありませんが、ともかくアクセスモードは、読み書き両方使いますから、読み書きをORにして
GENERIC_READ|GENERIC_WRITE
にすればよいようですし、共有はできるわけがないので、0を指定します。
セキュリティもよくわからんけれども、NULLを指定するようです。
次の、作成方法と最後のテンプレートファイルは、上の説明から、それぞれOPEN_EXISTING
及びNULLを指定します。
ファイル属性は、とくにコメントはないようですが、FILE_ATTRIBUTE_NORMAL
が妥当なようです。
通信の詳細については「Communications」を見よ、と書いてありますが…。それってどこ?
見つかりませんでした。
さて、CreateFile()がうまく実行できると、ファイルハンドルが渡されます。
以後はこのファイルハンドルを使ってRS232Cにアクセスすればよいのですが、まだOPEN()の処理は終わりません。
RS232Cで通信するのですから、ボーレートとかパリティとかを決めなければいけません。
その設定はDCB構造体にあります。
●DCB構造体、GetCommState()、SetCommState()
あれもこれもそれも、みんなWindowsAPIです。もう、たまりません。
DCB構造体なるところに、RS232Cの通信条件が詰まっています。
これを、まずGetCommState()で読み込んで、必要なところのみ書き直したあと、SetCommState()でセットします。
/// get DCB
DCB dcb;
GetCommState(hcom,&dcb);
dcb.BaudRate=2400;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
dcb.fRtsControl=RTS_CONTROL_ENABLE;
if(!SetCommState(hcom,&dcb))return 0;
return 1;
if()は冗長です。
この前のCreateFile()でハンドルが取得できていれば、ここでエラーが帰ってくることはありえませんから、実際にはここはif文である必要はありません。
でも、SetCommState()は省略できません(それは、わかりますよね)。
さてここまでで、RS232Cの設定は完了してしまいたいところなのですが、もうひとつ、どうやらタイムアウトの設定が必要らしいことがわかりました。
まったくもって、なかなかにしんどいことです。
説明するのもいささか疲れてしまいましたので、そのことについては、また次回、ということにいたします。
2009.7.18upload
前へ
次へ
ホームページトップへ戻る