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实例被用在多线程中的时候,需要注意同步。
版本处理
略。