Device Behavior Models
Properties,Methods,Events:
6.1 Properties.
設備的特性或者設置。
讀取屬性的方法:
TypegetSampleProperty() throws JposException;
voidsetSampleProperty(Type value) throws JposException;
6.2 Methods
6.3 Events
Javapos利用事件來實現回調,上層應用必須註冊它所關心的事件,註冊後,當事件派送時,javapos就會調用上層應用的處理事件的方法。
設備初始和終止處理
通常,上層應用的調用次序如下:
l 獲取Device Control的對象/引用
l 註冊事件
l 調用open方法,從而實例化Device Service,並和Device Control關聯。
l 調用claim方法,獲取物理設備的獨佔權。
l 設置屬性DeviceEnabled爲true
l 使用設備
l 設置屬性DeviceEnabled爲false
l 調用release方法,釋放物理設備的獨佔權。
l 調用close方法,取消Device Control和Device Service的關聯。
l 註銷事件。
設備共享模型
JavaPOS設備分類兩種共享方式:被一個Device Control獨佔,或者被多個Devicecontrol完全共享或者部分共享。
l 獨佔設備
常見的設備一般都是獨佔的,比如pos打印機。這就意味着,上層應用必須首先調用claim方法去獲取獨佔權,如果在獲取獨佔權之前調用方法或者訪問屬性,就會拋出異常JposException。
l 共享設備
有些設備是共享式的,比如keylock。他們能夠被多個Device control實例訪問。
數據類型
異常
事件
Device Service內部創建並維護一個事件隊列,當事件產生時,它將該事件放入到隊列中,當消費事件隊列的線程在進行消費某個事件時,會調用Device Control中的回調方法,而且,在這些回調方法中,將會調用上層應用程序中定義的event listener.
設備輸入模型
對於獨佔類設備來說,設備輸入模型就是事件驅動輸入。只有在DeviceEnabled爲true的時候,才允許接受數據。收到的數據會被當做一個DataEvent入隊。如果屬AutoDisable爲true,那麼當接受到數據的時候,JavaPOS設備會自動禁用自己,並將DeviceEnabled設置爲false。
如果上層應用程序想要接受來自設備的輸入,那麼就要將DataEventEnabled屬性設置爲true。如此之後當收到輸入的時候,設備就會投送一個DataEvent事件。DataEvent事件可能會通過Status屬性包含輸入狀態信息。
當設備在投遞該事件之前,會將DataEventEnabled屬性設置爲false以禁止以後的輸入數據事件。這就導致了當應用程序在處理某個輸入的時候,新的輸入數據將被入隊。當處理完成之後,將DataEventEnabled屬性設置爲真,從而繼續處理。
l Error handling
l Miscellaneous
對於有些設備來說,應用程序必須調用一個初始化輸入的方法。當設備收到輸入後,通常不會再接受其他輸入,直到重新調用初始化輸入的方法。MICR和Signature Capturedevice就是這樣的設備。
設備輸出模型
輸出模型包含同步和異步兩種方式。有些設備支持兩種,有些只支持一種,有些甚至都不支持。
l 同步方式
上層應用調用設備類別特定的方法完成輸出,只有輸出完成後,javapos設備才返回。當輸出操作很快時,可考慮用這種方式。同步方式的優勢是使用簡單。
l 異步方式
上層應用程序調用設備的特定的異步方法時,javapos設備會校驗參數,如果參數不合法,就拋出異常。然後,將進行如下操作:
1. 爲這個請求分配內存
2. 爲這個請求設置OutputID屬性
3. 儘快的返回
當JAVAPOS設備完成這個請求後,OutputCompleteEvent事件將會被投遞給上層應用。這個事件的屬性包含了已經完成的請求的output id。如果在處理完成之前,應用程序調用了clearOutput方法或者產生了JPOS_ER_CLEAR的ErrorEEvent,那麼就不會產生OutputCompleteEvent了。
設備電源狀態報告模型
應用程序經常需要知道電源狀態信息,這裏的電源狀態不是指電量(通電,電量低)。
l Javapos將設備電源狀態分爲三個:
ONLINE:設備已上電並且就緒。
OFF:設備已斷電或者跟終端已經斷開。
OFFLINE:設備已上電,但是未就緒或者還不能相應請求。
OFF_OFFLINE:OFF或者OFFLINE。
l 屬性
下面的屬性適用於所有設備類型:
CapPowerReporting:
標識電源報告的能力。屬性值:JPOS_PR_NONE(Device Service不能夠決定設備電源狀態),JPOS_PR_STANDARD(DeviceService能夠決定OFF_OFFLINE和ONLINE),JPOS_PR_ADVANCED(DeviceService能夠決定OFF、OFFLINE和ONLINE)。
PowerState:
由Device Service維護的一個屬性,取值:JPOS_PS_UNKNOWN、JPOS_PS_ONLINE、JPOS_PS_OFF、JPOS_PS_OFFLINE、JPOS_PS_OFF_OFFLINE。
PowerNotify:
應用程序設置該屬性,通過StatusUpdateEvents和PowerState屬性來進行電源狀態報告通知。這個屬性必須在DeviceEnabled屬性之前設置。
設備信息報告模型
上層應用經常需要獲取各種設備的配置信息和使用屬性等信息。比如配置信息有設備序列號,固件版本和連接類型。POS打印機的使用數據有,打印的行數,切紙張數等。
更新固件模型
上層應用程序要求能夠對POS設備進行固件更新。Javapos規定的機制如下:
l CapUpdateFirmware,屬性,標識設備是否支持固件更新
l CapCompareFirmwareVersion,屬性,標識固件版本是否可比較
l updateFirmware,方法,異步方式更新固件
l compareFirmwareVersion,方法,比較固件版本
l StatusUpdateEvent,事件,報告固件更新進度
設備狀態
Javapos定義了一個屬性,State,有以下值:
JPOS_S_CLOSED
JPOS_S_IDLE
JPOS_S_BUSY
JPOS_S_ERROR
1, 初始值爲JPOS_S_CLOSED
2, Open方法成功調用後爲JPOS_S_IDLE
3, 設備正在處理輸出的時候爲JPOS_S_BUSY,輸出完成後爲JPOS_S_IDLE
4, 當遇到錯誤的時候爲JPOS_S_ERROR
線程
當DEVICE CONTROL實例被用在多線程中的時候,需要注意同步。
版本處理
略。