私が使用する金銭登録機はすべてRedHat Linuxシステムです。このレジスタにはttyS0
シリアルポート()に接続されたスキャナがあります。
我々は、カウンターに立って、スキャナーに製品を置く人を必要とする多くのテストを行った。私はこの人を方程式から削除する方法を見つけようとしています。
シリアルポートの入力をシミュレートする簡単な方法はありますか?
明らかに、シリアルポートに情報を送信するのは簡単です。
echo [whatever] > /dev/ttyS0
しかし、私が本当に好きなのは、次のように入力できる一種のbashコードです。
echo [barcode number] > (some code that makes the machine think the barcode number is coming from the serial port)
可能ですか?
実際に登録できる項目にも制限があります。マイコンピュータに新しいユーティリティをインストールできません。そこにスクリプトを入れることができますが、bash
それはすべてです。
答え1
ioctlを使用してこれを行うことができます(rootとして)TIOCSTI
。この記事の最後にあるサンプルプログラムをご覧ください。回答。それを次のように使用してください
echo [whatever] | ./tiocsti > /dev/ttyS0
何もコンパイルせずにPerlでこれを行うこともできます。このサイトを検索してみてください。はい。
別のオプションは私私が使っているのはハードウェアで行うことです。 USB->シリアルアダプタを介してマシンをそれ自体に接続し、読みたいものを書き込むか/dev/ttyUSBx
(または)変更されていないデータを渡すために生データを使用します。/dev/serial/by-id/xx-xx-xx
/dev/ttySx
/dev/ttyUSBx
stty raw
答え2
TIOCSTI
使用できますが、今日はあまり高く評価されているメカニズムではありません。代替は非常に簡単です。これが擬似端末の用途です。実際のシリアル端子の代わりに擬似端子をスキャナで指し、擬似端子のマスター側で適切な入力を駆動するだけです。もちろん、expect
擬似端末を介して対話型端末I / Oアプリケーションを駆動する準備が整いました。
それはすべてexpect
Fedoraパッケージのすべてをインストールした人があなたのコンピュータにパッケージの1つをインストールすることを選択したかどうかによって異なります。もちろんPerlも同じだ。私たちの回答者は、あいまいな「裸」が実際に何を意味するのかを知る方法はありません。
答え3
ついに私はそれを解決することができた。とても感謝しています。
空のテキストファイルの作成
ファイルを編集し、このコードをコピーしてテキストファイルに貼り付けます。
//**tiocsti.c**//
#include <unistd.h>`
#include <err.h>
int main(void)
{
char c; ssize_t r;
while((r = read(0, &c, 1)) > 0)
{
if(ioctl(1, TIOCSTI, &c))
{
err(1, "ioctl(TIOCSTI)");
}
}
if(r < 0)
err(1, "read");
return 0;
}
テキストファイルを別の名前で保存
tiocsti.c
同じディレクトリで
cc tiocsti.c -o tiocsti
端末で実行し、最初のステップで作成したtiocsti.cファイルをコンパイルします。
5. ttyS0 への偽の入力を生成するには、次を実行します。
echo yadayada | ./tiocsti > /dev/ttyS0