JavaPOS標準v1.14 (2)

  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屬性設置爲真,從而繼續處理。

 

Error handling

 

Miscellaneous

對於有些設備來說,應用程序必須調用一個初始化輸入的方法。當設備收到輸入後,通常不會再接受其他輸入,直到重新調用初始化輸入的方法。MICR和Signature Capturedevice就是這樣的設備。

 

 

 

設備輸出模型

輸出模型包含同步和異步兩種方式。有些設備支持兩種,有些只支持一種,有些甚至都不支持。

 

l  同步方式

上層應用調用設備類別特定的方法完成輸出,只有輸出完成後,javapos設備才返回。當輸出操作很快時,可考慮用這種方式。同步方式的優勢是使用簡單。

l  異步方式

上層應用程序調用設備的特定的異步方法時,javapos設備會校驗參數,如果參數不合法,就拋出異常。然後,將進行如下操作:

1.      爲這個請求分配內存

2.      爲這個請求設置OutputID屬性

3.      儘快的返回

當JAVAPOS設備完成這個請求後,OutputCompleteEvent事件將會被投遞給上層應用。這個事件的屬性包含了已經完成的請求的output id。如果在處理完成之前,應用程序調用了clearOutput方法或者產生了JPOS_ER_CLEAR的ErrorEEvent,那麼就不會產生OutputCompleteEvent了。

 

 

設備電源狀態報告模型

應用程序經常需要知道電源狀態信息,這裏的電源狀態不是指電量(通電,電量低)。

 

Javapos將設備電源狀態分爲三個:

ONLINE:設備已上電並且就緒。

OFF:設備已斷電或者跟終端已經斷開。

OFFLINE:設備已上電,但是未就緒或者還不能相應請求。

OFF_OFFLINE:OFF或者OFFLINE。

屬性

下面的屬性適用於所有設備類型:

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實例被用在多線程中的時候,需要注意同步。

 

版本處理

略。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章