プログラムを読んでみよう④ ―― コード送信symcom.c
アプリケーションの最後は、パソコンへ命令コードを送信するプログラムです。symcom.cの中のSendCode()関数で処理しています。
パソコンへは、M0x(エム、ゼロ、xは0~F)、0x0d,0x0a
という文字列で命令コードを送信するきまりになっています。たとえば、スプーンをたたいたコードが1001なら、これは9に相当するので、送信する文字列は"M09",0x0d,0x0a
です。最初のM0は固定値(いつも同じ)なので、その直後に付ける命令コードを数値から数字(文字)に変換するのがここでの主な処理です。
コンピュータで扱う文字には、それぞれコード(値)が割り当てられています。表1にその一部を示します。表の横軸がコードの上位4ビット、縦軸が下位4ビットです。たとえば大文字のGという文字のコードは0x47で、数字の8と言う文字のコードは0x38です。この対応を利用することで、数値を文字に変換することができます。
14行目で、命令コードが10未満かどうかの判断をします。10未満であれば0~9ですから、文字'0'(文字コードは0x30)に値を加算することで、対応した文字(コード)が得られます。命令コードが10以上のときは16進数表記に従ってA,B,C...Fの文字に変換する必要があります。そこで18行目のように、まず命令コードから10を引いて、文字'A'(の文字コード)に加算することで対応した16進数文字を得ることができます。
あとは22行目以降で1文字送信関数を呼びながら1文字ずつ送信します。
次回はいよいよ最終回です。デバイスドライバの説明と、改造例題を行います。