Tech Note 09: Symbolデバイスを使う Oct 16, 2001
© NSB Corporation. All rights reserved. |
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()を使用することにより、バーコードタイプも受け取ります。
34815 または -30721 | スキャンの解読が終わる。 |
34816 または -30720 | バッテリーが少ない。 |
34817 または -30719 | スキャンが始まる。 |
34816イベントを受けた時にダイアログボックスを表示することが出来ます。34817イベントは1〜2秒後に34815イベントがくる為、通常無視することが出来ます。なんのバーコードも正常にスキャンされない場合は、NSBSymbolLib.GetLastScanData()は"NR"を戻し、NSBSymbolLib.GetBarType()は0を戻します。
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はスキャンが終わると消えるので、ただ楽しむ為に提供されている。 |
GetBarType() | CmdScanSetBarcodeEnabled() | |
NOT_APPLICABLE | 0 | |
CODE39 | 1 | 0 |
CODABAR | 2 | 7 |
CODE128 | 3 | 8 |
D2OF5 | 4 | 5 |
IATA2OF5 | 5 | |
I2OF5 | 6 | 6 |
CODE93 | 7 | 9 |
UPCA | 8 | 1 |
UPCE0 | 9 | 2 |
EAN8 | 10 | 4 |
EAN13 | 11 | 3 |
MSI_PLESSEY | 14 | 11 |
EAN128 | 15 | 14 |
UPCE1 | 16 | 12 |
CODE39_FULL_ASCII | 19 | |
TRIOPTIC_CODE39 | 21 | 13 |
BOOKLAND_EAN | 22 | 83 |
COUPON_CODE | 23 | 85 |
ISBT128 | 25 | 84 |
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 | |
34815の代わりに -30721 を使用 34816の代わりに -30720 を使用 34817の代わりに -30719 を使用SPTxxxxおよびCSM150デバイスの両方をサポートしようとしているなら、両方のイベントコードをテストする必要があるでしょう。これはSymbolのコード中にあるバグの為です。
プロジェクトの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