Tech Note 09: Symbolデバイスを使う

Oct 16, 2001

© NSB Corporation. All rights reserved.


[英語版]

NS Basic/Palmは、バージョン2.0からSymbolデバイスのサポートを提供しています。必要なライブラリおよびサンプルはNS Basic/Palmと共にインストールされます。ダウンロードしなければならない余分なファイルはありません。

Symbolルーチンは、全てのSymbolのPalm OSデバイス上、およびVisor用のSymbol Springboard上で動作します。Visorバージョンを使用するには多少注意して頂く点があります。それらは、このドキュメント中の後半で説明致します。

ルーチンは非常に簡単にプログラムに追加することができます。「Symbol」サンプルを参照して下さい。

簡単な方法

1. Startup Codeの中に、次のラインを含める。

LoadLibrary "NSBSymbolLib"

これによってNSBasicに貴方がライブラリを使用していることを知らせます。

2. メインフォームのAfter Codeの中が妥当だと思いますが、初期化の中で次のファンクションを呼ぶ。

NSBSymbolLib.IsPalmSymbolUnit()

これは、プログラムがSymbolユニットで実行されている時は1を、それ以外は0を戻します。0が戻された場合、これ以上のSymbolファンクションの使用を試みないで下さい。

3. メインフォームのEventsコードの中で、34815のイベントタイプを受け取った時に、次の文字列ファンクションを呼んで、スキャンされた値を受け取る。

scannedData = NSBSymbolLib.GetLastScanData()

ユーザがSymbolデバイス上の黄色のScanボタンを押す度に、Eventsコードが呼ばれます。NSBSymbolLib.GetLastScanData()は、最後にスキャンされたバーコードの文字列を戻します。このバーコードを使って必要な処理を行って下さい。

4. NSBasicプログラムをコンパイルして、NSBSymbolLib.prcディレクトリと共に、お使いのSymbolデバイスへダウンロードする。あなたのプログラムは、スキャナの最後のセッティングに従って、適切に動作するはずです。

Symbol.prjサンプルはこれを行います。整数ファンクションのNSBSymbolLib.GetBarType()を使用することにより、バーコードタイプも受け取ります。

難しい方法

イベント

Symbolデバイスは3つの別々のイベントを生成します。
これらの各イベントは2つの可能な値を持っています。全てのデバイスで貴方のプログラムが動作するように、これら2つの値をチェックすると良いでしょう。

34815 または -30721 スキャンの解読が終わる。
34816 または -30720 バッテリーが少ない。
34817 または -30719 スキャンが始まる。

34816イベントを受けた時にダイアログボックスを表示することが出来ます。34817イベントは1〜2秒後に34815イベントがくる為、通常無視することが出来ます。なんのバーコードも正常にスキャンされない場合は、NSBSymbolLib.GetLastScanData()は"NR"を戻し、NSBSymbolLib.GetBarType()は0を戻します。

ファンクション

NSBasic Symbolライブラリは、スキャナのオペレーションをカスタマイズするために使用することができる多くのプロシージャとファンクションを提供しています。
IsPalmSymbolUnit() このファンクションは、Symbolユニットの場合は1を、それ以外は0を戻す。
CmdScanEnable() このプロシージャはスキャナを有効にする。通常、スキャナは常に有効なので、これを呼ぶことにより確実にさせるか、CmdScanDisable()を使う時に使用する。
CmdScanDisable() このプロシージャはスキャナを無効にする。
CmdScanSetTriggeringModes(modes) このプロシージャはスキャナのトリガーモード(triggering modes)をセットする。詳細はSymbolのドキュメントを参照。
CmdScanSetBarcodeEnabled(type, whether) このプロシージャは特定のバーコードを有効にしたり無効にしたりする。バーコードのタイプはtypeに整数値を入れて指定する。whetherが1の場合、バーコードは有効、0の場合は無効。値は下の表を参照。
CmdSendParams(beep) (古) 一連のCmdScanSetTriggeringModes(modes) と CmdScanSetBarcodeEnabled(type, whether)の後にこのプロシージャを呼ぶ。整数beepが1の場合、これが呼ばれた時にSymbolデバイスはビープ音を出す。0の場合、ビープ音はでない。CmdScanSetTriggeringModes()とCmdScanSetBarcodeEnabled()が自動的にこのファンクションを呼ぶ。
CmdStartDecode() このプロシージャはコード解読を始める。この効果は、黄色のScanボタンを押すのと同じ。これを使うにはtriggering modeを8にセットしなければならない。スキャンを始めるにはScanボタンを押す方法が一般的なので、通常このプロシージャを使う理由はない。
CmdStopDecode() このプロシージャは、処理中のコード解読を中止する。通常使用されない。
GetDecodedData() このファンクションは、解読された生データを持つ文字列を戻す。これはデバッグ目的でのみ使用される。
GetLastScanData() このファンクションは、最後にスキャンされたバーコードの文字列を戻す。通常、34815イベントタイプへの応答としてこれを呼ぶ。しかし、次のバーコードがスキャンされるまでは、いつでもこれを呼ぶことができる。最後にスキャンしたバーコードが無効の場合、バーコードとして"NR"を戻す。
GetBarType() このファンクションは、最後にスキャンされたバーコードのタイプを整数値で戻す。最後にスキャンされたバーコードが無効の場合、0を戻す。戻り値は下の表を参照。
CmdScanLedOn() このプロシージャは緑のLEDをつける。通常このLEDはスキャンが始まるとつくので、ただ楽しむ為に提供されている。
CmdScanLedOff() このプロシージャは緑のLEDを消す。通常このLEDはスキャンが終わると消えるので、ただ楽しむ為に提供されている。

バーコードタイプ

以下の表はバーコードタイプの数値をまとめてあります。これらの数値はSymbolによって定義されています。
GetBarType()CmdScanSetBarcodeEnabled()
NOT_APPLICABLE 0  
CODE39 10
CODABAR 27
CODE128 38
D2OF5 45
IATA2OF5 5  
I2OF5 66
CODE93 79
UPCA 81
UPCE0 92
EAN8 104
EAN13 113
MSI_PLESSEY 1411
EAN128 1514
UPCE1 1612
CODE39_FULL_ASCII 19  
TRIOPTIC_CODE39 2113
BOOKLAND_EAN 2283
COUPON_CODE 2385
ISBT128 2584
CODE32 32  
UPCA_2SUPPLEMENTALS 72  
UPCE0_2SUPPLEMENTALS 73  
EAN8_2SUPPLEMENTALS 74  
EAN13_2SUPPLEMENTALS 75  
UPCE1_2SUPPLEMENTALS 80  
UPCA_5SUPPLEMENTALS 136  
UPCE0_5SUPPLEMENTALS 137  
EAN8_5SUPPLEMENTALS 138  
EAN13_5SUPPLEMENTALS 139  
UPCE1_5SUPPLEMENTALS 144  
PDF 417   17

Visor Symbol ユニット用の追加情報

以下はVisor/CSM150でのいくつかの違いです。Ron Glowka氏と Doug Handy氏に協力して頂きました。

1. CSM150はSPTxxxxとはイベントコードが違う

  34815の代わりに -30721 を使用
  34816の代わりに -30720 を使用
  34817の代わりに -30719 を使用
SPTxxxxおよびCSM150デバイスの両方をサポートしようとしているなら、両方のイベントコードをテストする必要があるでしょう。これはSymbolのコード中にあるバグの為です。

2. プロジェクトのStartupおよびTerminationではライブラリコールは避ける

プロジェクトのStartupとTerminationの間は、通常プログラムの「イベントループ」処理は行われません。LoadLibraryの後、Startup Codeの中でCmdScanEnable等のライブラリコールは、一見自然に思えますが、実際はイベントがキューとなってつながり、処理が行われず致命的なエラーとなります。

Project StartupまたはTerminationの中でSymbolライブラリコールを実行する必要がある場合、次のコードをコールのすぐ後に続けて下さい。

  Dim EventType as Variant
  SysTrapSub 285, 2, EventType, 1	'EvtGetEvent
  SysTrapSub 169, 1, EventType		'SysHandleEvent