Armadilloフォーラム

バーコードリーダからの情報取得

s.tanimura-san…

2017年6月8日 16時25分

お世話になります。
谷村と申します。
(C言語で簡単なプログラムを書いている程度で、linux等の知識等初心者です。)

Armadillo-420(kernel:2.6.26-at25)にUSBバーコードリーダを挿して、
バーコードの読取り情報を取得したいと考えています。

***USB Device Class drivers***
<*> USB Modem (CDC ACM) support
を有効にして、
CDC-ACMクラスデバイス(/dev/ttyACM0)として認識される所まではできたのですが、
プログラムから読取り情報を取得する所でつまづいております。
/dev/ttyACM0から読取り情報を取得する際のサンプル的なコード等ありませんでしょうか。
その他、make menuconfigで設定を変更する必要がある箇所等ありますでしょうか。

どうかご教示の程、宜しくお願い致します。

コメント

古関です。

もし、差し支えなければ教えていただきたいのですが、
USBバーコードリーダーの型番は何でしょうか?

USB HIDクラスでキーボードに見えるものもあるのですが、
今回は、CDC-ACMということで普通のシリアルに見えるタイプということですかね。

[armadillo]# tip -l /dev/ttyACM0 -s 9600
※ 9600はボーレート設定値です。バーコードリーダーの仕様書などに書いている値を適宜入力してください。

で、ttyACM0を開いた状態にして、バーコードをスキャンしたら
何か文字列が表示されたりするでしょうか?

※ tipを終了させるには~(チルダ)に続いて.(ドット)を入力してください。
入力した、 ~(チルダ)、.(ドット)はコンソールに表示されません。

表示されるなら、普通のシリアルポートとして使えますので、
読み出すプログラムを作るのでれあれば、
実践開発ガイドの、シリアルポートのサンプルコードが参考になるかと思います。
http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-3…

s.tanimura-san…

2017年6月8日 17時17分

補足です。
cat /proc/bus/usb/devices の表示結果

T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 11 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=02(comm.) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=05f9 ProdID=4204 Rev= 0.81
S: Manufacturer=**********
S: Product=Handheld Barcode Scanner
S: SerialNumber=S/N **********
C:* #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=400mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=cdc_acm
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms

dmesgの表示結果

usb 2-1: new full speed USB device using fsl-ehci and address 11
usb 2-1: configuration #1 chosen from 1 choice
cdc_acm 2-1:1.0: ttyACM0: USB ACM device

以上です。

s.tanimura-san…

2017年6月8日 17時46分

早速のご回答ありがとうございます。

USB-COMとUSBキーボードの切替が可能なタイプで、
デフォルトがUSB-COMです。

> [armadillo]# tip -l /dev/ttyACM0 -s 9600
> ※ 9600はボーレート設定値です。バーコードリーダーの仕様書などに書いている値を適宜入力してください。
> で、ttyACM0を開いた状態にして、バーコードをスキャンしたら
> 何か文字列が表示されたりするでしょうか?
スキャンすると、文字列表示されました。
root@armadillo420-0 (ttymxc1) /dev]# tip -l /dev/ttyACM0 -s 9600
Connected.
*********** ←(読み取ったバーコード情報)

> 表示されるなら、普通のシリアルポートとして使えますので、
> 読み出すプログラムを作るのでれあれば、
> 実践開発ガイドの、シリアルポートのサンプルコードが参考になるかと思います。
サンプルコードですが、open()時の引数では/dev/ttyAMC0を指定し、
またバーコード読込では、非カノニカルモードを選択した方がよいでしょうか?
また初歩的ですみませんが、
set_sig_handler(terminate_sig_list, ARRAY_SIZE(terminate_sig_list), terminate_sig_handler);
はどういった処理をしているのでしょうか?

以上、宜しくお願い致します。

古関です。

> サンプルコードですが、open()時の引数では/dev/ttyAMC0を指定し、
試してみてください。

> またバーコード読込では、非カノニカルモードを選択した方がよいでしょうか?
改行単位でデータを取り込みたいのであれば有効に、
そうでなければ無効にすれば良いと思います。

> set_sig_handler(terminate_sig_list, ARRAY_SIZE(terminate_sig_list), terminate_sig_handler);
開発ガイドのサンプルコードのすぐ下に説明があるので読んでみてください。

s.tanimura-san…

2017年6月12日 19時20分

古関様

谷村です。
ご返事遅くなりました。
サンプルコードを使いまして、無事バーコードリーダの読取り情報を取得することができました。
ご対応頂きまして、誠にありがとうございました。
今後とも宜しくお願い致します。