LinuxでのttyS0の入力シミュレーション

LinuxでのttyS0の入力シミュレーション

私が使用する金銭登録機はすべて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/ttyUSBxstty raw

答え2

TIOCSTI使用できますが、今日はあまり高く評価されているメカニズムではありません。代替は非常に簡単です。これが擬似端末の用途です。実際のシリアル端子の代わりに擬似端子をスキャナで指し、擬似端子のマスター側で適切な入力を駆動するだけです。もちろん、expect擬似端末を介して対話型端末I / Oアプリケーションを駆動する準備が整いました。

それはすべてexpectFedoraパッケージのすべてをインストールした人があなたのコンピュータにパッケージの1つをインストールすることを選択したかどうかによって異なります。もちろんPerlも同じだ。私たちの回答者は、あいまいな「裸」が実際に何を意味するのかを知る方法はありません。

答え3

ついに私はそれを解決することができた。とても感謝しています。

  1. 空のテキストファイルの作成

  2. ファイルを編集し、このコードをコピーしてテキストファイルに貼り付けます。

//**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;
}
  1. テキストファイルを別の名前で保存tiocsti.c

  2. 同じディレクトリでcc tiocsti.c -o tiocsti端末で実行し、最初のステップで作成したtiocsti.cファイルをコンパイルします。

5. ttyS0 への偽の入力を生成するには、次を実行します。

echo yadayada | ./tiocsti > /dev/ttyS0

関連情報