バイナリデータの送受信平成20年7月26日 トラ技BIOSのUSB通信関数トラ技BIOSには以下の4つのUSB送受信関数が用意されています ・void trg_puts(const char *src) ・char *trg_getc() ・void trg_senddata(unsigned char *src,unsigned short len) ・void trg_recvdata(unsigned char *src,unsigned short len) このページでは、これらの関数の使いかたと注意事項を説明します。 文字列送信関数の説明trg_putsはキャラクタベースの送受信関数です。 trg_putsは、'\0'で終端された文字列を送信します。
この関数ではバイナリデータを扱えません。その理由は @ 改行コードが変換される からです。
trg_putsはトラ技BIOSの中でusbSendStr関数を呼び出します。usbSendStr関数はヌル文字を見つけるまでループしながらusbSendChar関数を呼び出します。usbSendChar関数は送信したい文字が'\n'である場合、再帰呼び出しを用いて'\r'を先に送信します。 つまり、"Hello\n"という文字列は、USBの上では"Hello\r\n"となって送信されます。
文字受信関数の説明trg_getcはキャラクタベースの1文字受信関数です。 C言語のgetc()に相当する働きをします。 この関数もバイナリデータを扱えません。その理由は @ 改行コードが変換される ('\r'を'\n'に変換する) からです。 trg_getc()を呼び出すと、 trg_getc → usbGetChar → svUSB_byteread という順序で最終的にはUSBの受信バッファから1文字取り出されます。 usbGetCharという関数は上記の@〜Cの処理を行うので、バイナリデータの受信ができません。 バイナリデータ送信関数の説明任意の長さのバイナリデータを送信したい場合は、trg_senddata関数を使ってください。 ・void trg_senddata(unsigned char *src,unsigned short len) 引数のsrcは送信したいデータの格納されたバッファへのポインタ、 例えば、
のようにして使います。 改行コードが変換されることもなく、また'\0'も送信できます。 trg_senddata関数は内部でusbSendDataを呼び出します。usbSendDataは、与えられたデータを63バイトごとのブロックに分割して、USBファンクションコントロール関数のsvUSB_datawriteを呼び出します。 64バイトではなく63バイトというところが味噌です。
バイナリデータ受信関数の説明任意の長さのバイナリデータを受信したい場合は、trg_recvdata関数を使ってください。 ・void trg_recvdata(unsigned char *src,unsigned short len) 引数のsrcは受信したデータが格納されるバッファへのポインタ、 例えば、
のようにして使います。 改行コードが変換されることもなく、また'\0'も受信できます。
1バイト送信関数を作るには標準で用意されているバイナリデータ送信関数は複数バイト用です。 1バイト送信関数が必要な場合は、下記のような関数をユーザアプリケーション内に作成してください。 この関数では、改行コードは変換されません。
1バイト受信関数を作るには標準で用意されているバイナリデータ受信関数は複数バイト用です。 1バイト受信関数が必要な場合は、下記のような関数をユーザアプリケーション内に作成してください。 この関数では、改行コードは変換されません。
|
Copyright(C) 2008 NAITOU Ryuji. All rights reserved. 無断転載を禁ず