产品名称 | StudyBarcode |
文档版本 | StudyBarcode 测试程序设计说明 |
一个可以下载到华禹手持设备(P1300、P1220、P1500系列)的Java应用程序,用于测试华禹手持设备的条码扫描功能。
下载StudyBarcode.jad 和StudyBarcode.jar 到华禹手持设备上,执行Java程序,可体验条码测试程序。
下面是StudyBarcode程序的界面(从模拟器中抓取):
图1: |
图2: |
Java 本地接口(Java Native Interface (JNI))允许运行在Java 虚拟机(JVM)上的代码调用本地程序和类库,或者被它们调用,这些程序和类库可以是其它语言编写的,比如C、C++或者汇编语言。
当一个程序无法完全使用Java 编写时,开发者可以通过JNI 来编写本地方法。
com.mtk包中的Gpio.java中操作GPIO的方法为华禹提供的JNI方法。
com.huayu.gpio包中的GpioPort.java定义了华禹手持设备的GPIO控制引脚。
对Gpio操作更详细的介绍见 华禹工控手持设备GPIO测试程序设计说明。
基于华禹平台的手持条码扫描由两部分组成:
1. java 程序:演示程序是StudyBarcode。
2. java 程序通过串口与条码头通信,并通过gpio 控制条码头的电源及条码头数据传输方式。
结构如下图所示:
扫描条码时,java 程序将TRIG 引脚电平拉低,条码头开始扫描,扫描到条码信息后将信息返回串口,串口接收信息解析后显示。
设置模式时,java 程序发送模式变更命令,条码头接收后返回ACK 并变更模式。
打开串口前判定是否在手持机上使用,调用
System.getProperty("microedition.platform");
如果得到值为" Sun",判定其在模拟器上使用
s_commUrl = s_commUrlEmu;
当值不为" Sun",判定其在真机上使用
s_commUrl = s_commUrlDevice;
s_commUrlEmu与s_commUrlDevice赋值与说明:
s_commUrlDevice = "tckcomm:1;baudrate=9600;blocking=off;autocts=off;autorts=off";
s_commUrlEmu= "comm:COM3;baudrate=9600;blocking=off;autocts=off;autorts=off";
COM3 为实际使用的串口。
图3: |
cc = (CommConnection) Connector.open(s_commUrl);
in = cc.openInputStream();
out = cc.openOutputStream();
m_start = true;
new readT().start();
通过Connector.open打开串口,通过openInputStream 得到输入流,
openOutputStream 得到输出流,同时启动数据接收线程。
While(m_start) {
int len = in.available();
if(len != 0) {
byte[] bData = new byte[len];
int iRet = in.read(bData);
}
Thread.sleep(100);
}
在华禹平台上,可能存在一个串口两种用途的情况。例如,条码和RFID 共用一个串口,模拟开关用于控制串口的实际用途。
P1220 平台:串口接收到的数据即为条码信息,直接解析即可。
在实现为产品时,建议为条码数据设置格式信息。设置命令见:SE955 FINAL IG.pdf
P1220:HuayuNative.writeIO(ContentManager.P1220_BARCODE_POWER_PIN,ContentManager.P1220_BARCODE_POWER_OFF);
if(out != null) {
out.close();
}
if(in != null) {
in.close();
}
if(cc != null) {
cc.close();
}
P1220:HuayuNative.writeIO(ContentManager.P1220_BARCODE_CTS,ContentManager.P1220_BARCODE_CTS_LOW);
byte[] bData = com.huayu.barcodemode.ModeData.enpacketContinues();
设置按键扫描模式:
byte[] bData = com.huayu.barcodemode.ModeData.enpacketPulse();
if(out != null) {
if(bData.length != 0) {
try {
out.write(bData,0,bData.length);
out.flush();
} catch (IOException e) {
// TODO 自动生成catch 块
e.printStackTrace();
}
}
}
bData 的意义:向条码头发送变换模式的命令。
简单解释:
bData[0] 不包括校验字节的消息长度,最大值为0xFF;
bData[1] 表示此类型的数据包为发送数据类型。
bData[2] 表示此消息出处;
bData[3] 传送状态:0表示第一次传送,1表示后续传送。
bData[4] bData[5] bData[6] 扫描模式设定。
bData[7] bData[8]: 校验码.
命令更详细的格式,见SE955 FINAL IG.pdf。
P1220:HuayuNative.writeIO(ContentManager.P1220_BARCODE_CTS,ContentManager.P1220_BARCODE_CTS_HIGH);
购买信息:
1. 创易电子淘宝店编写者 | 日期 | 关键词 |
华禹工控 | 2010-06-04 | BARCODE、J2ME、华禹手机模块、JNI |