Add D500 scanner SDK documentation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-05-06 21:47:04 +08:00
parent 752bc404d3
commit 8fa02424a5
3 changed files with 1865 additions and 0 deletions

View File

@@ -0,0 +1,753 @@
# Android 扫描接口说明
> 江苏东大集成电路系统工程技术有限公司
> www.seuic.com
![SEUIC 东集 Logo 图片占位符]
![世界地图装饰图片占位符]
## 修订记录
| 版本号 | 修订日期 | 修订内容 | 修订人员 |
| --- | --- | --- | --- |
| 1.0 | 2017/03/16 | 建立本文档 | 罗涛 |
| 1.1 | 2017/5/31 | 加入回调函数注意事项说明 | 罗涛 |
| 1.2 | 2017/11/13 | 修正关于图像读取接口的描述 | 罗涛 |
| 1.3 | 2017/11/20 | 添加新增参数介绍 | 罗涛 |
## 目录
- 概述
- 硬件平台
- 软件平台
- 适用对象
- 准备工作
- Jar 包引用方法
- 所需的相关权限
- 扫描相关类介绍
- 扫描工厂类
- 扫描类
- 扫描数据回调接口类
- 读取图像回调接口类
- 扫描状态回调接口类
- 扫描数据类
- 扫描按键监听类
- 扫描接口介绍
- 获取扫描头上下文
- 打开扫描头
- 关闭扫描头
- 开始扫描
- 停止扫描
- 设置扫描条码回调
- 启用扫描头
- 禁用扫描头
- 获取条码参数
- 设置条码参数
- 获取扫描成功后图像
- 开始读取图像
- 停止读取图像
- 设置读取图像回调
- 设置扫描头状态回调
- 扫描参数介绍
- 条码设置参数
- 扫描状态参数
---
# 概述
我司提供的所有设备上已经内置了扫描服务及应用,方便客户定制扫描服务,但是由于有部分客户需要自己开发基于我司扫描 SDK 的应用,故本文档致力于介绍有关扫描 SDK 的相关内容,以便帮助用户更为灵活地使用我们的设备。
## 硬件平台
SDK 适用于我司所有终端设备,具体使用范围在函数接口说明中指明,若无指明表示都支持。
## 软件平台
SDK 基于 Android 4.3、Android 4.4、Android 5.1 版本,支持 Eclipse、Android Studio 开发工具。
## 适用对象
希望在自己的应用中定制扫描的开发人员。
---
# 准备工作
## Jar 包引用方法
**1、首先以 Eclipse 为例**,右击项目 → Properties → Java Build Path → Libraries → Add External JARs选择 `ScannerAPI.jar` 文件。
![Eclipse 添加外部 JAR 包截图占位符]
**2、以 Android Studio Version2.2.2 版本为例**,在 project 中,在 app 目录下新建一个 `libsref` 目录,将 `ScannerAPI` 放入该目录下,并右击工程选择 Open Module Settings 选中相应的 Module切换至最右方的 Dependencies点击右方加号选择 File dependency 添加 `ScannerAPI.jar`,并且修改 scope 为 `provided`,声明该 `ScannerAPI.jar` 只在编译时需要依赖,在运行时不需要。
① 将 `ScannerAPI.jar` 放入 `app/libsref/`
![Android Studio 项目结构 libsref 目录截图占位符]
② 右击工程选择 Open Module Settings 选中相应的 Module切换至最后方的 Dependencies点击右方加号选择 File dependency 添加 `ScannerAPI.jar`
![Android Studio Open Module Settings 菜单截图占位符]
![Android Studio Dependencies 添加 jar 包截图占位符]
③ 更改 compile 为 provided声明该 `ScannerAPI.jar` 只在编译时需要依赖,在运行时不需要,最后保存设置即可。
![Android Studio scope 设置为 Provided 截图占位符]
④ 如果设置成功,会在相应的 `build.gradle` 中有如下 dependencies
```gradle
dependencies {
provided files('libsref/ScannerAPI.jar')
}
```
## 所需的相关权限
在进行基于我们的扫描 SDK 开发的时候,需在 `AndroidManifest.xml` 的 application 节点下添加以下代码:
```xml
<uses-library android:name="android.scanner.library"/>
```
D500/D510/D330S 设备中二维扫描需添加以下权限:
```xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
```
**注意点:**
1. 在一个应用中只需要打开一次扫描头即可,不需要打开多次,否则会耗时太大,产生卡屏现象。
2. 退出程序的时候可以选择关闭扫描头,其余场合不可关闭。
3. 可以参照测试 demo 中的方式,在 `ScannerService` 中定义 action在使用扫描的 UI 中直接使用动态注册广播接收器接收到扫描解析的结果。
---
# 扫描相关类介绍
## 扫描工厂类
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.scanner` |
| 类名 | `ScannerFactory` |
| 说明 | 扫描工厂类,主要用于获取扫描头资源 |
## 扫描类
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.scanner` |
| 类名 | `Scanner` |
| 说明 | 扫描主要实现类,定义了一系列扫描操作方法 |
## 扫描数据回调接口类
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.scanner` |
| 类名 | `DecodeInfoCallBack` |
| 回调函数 | `onDecodeComplete(DecodeInfo barcodeInfo)` |
| 回调函数参数 | param1: 条码信息,`DecodeInfo` |
| 回调函数返回值 | void |
| 说明 | 扫描回调函数,用户需引用该接口,并调用 `Scanner` 类中 `setDecodeInfoCallBack` 后可获得条码信息。 |
> **注意:** 该回调方法中请勿进行 UI 操作!
## 读取图像回调接口类
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.scanner` |
| 类名 | `VideoCallBack` |
| 回调函数 | `onVideoCallBack(int width, int height, byte[] img)` |
| 回调函数参数 | param1: 返回图像宽度<br>param2: 返回图像高度<br>param3: 返回的图像数据Bitmap 格式) |
| 回调函数返回值 | `true`:操作成功,停止出光并终止对图像的读取<br>`false`:操作失败,继续读取图像 |
| 说明 | 扫描回调函数,用户需引用该接口,并调用 `Scanner` 类中的 `setVideoCallBack` 后可获得图像数据,同时每取得一帧图像都会调用该函数,第三方的相关操作在此处处理。 |
> **注意:** 该回调方法中请勿进行 UI 操作!
## 扫描状态回调接口类
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.scanner` |
| 类名 | `StatusCallBack` |
| 回调函数 | `onStatusCallBack(int status, int info)` |
| 回调函数参数 | param1: 状态信息<br> 0扫描成功<br> 1扫描超时<br> 2扫描被取消<br> 3扫描出现错误暂未使用<br> 4其他事件暂未使用<br>param2: 其他额外信息(暂未使用)<br>扫描状态参数参见:扫描状态参数 |
| 回调函数返回值 | void |
| 说明 | 状态回调函数,用户可引用该接口,并且调用 `Scanner` 类中的 `setStatusCallBack` 后可以当扫描头状态更新时获得当前扫描状态。 |
> **注意:** 该回调方法中请勿进行 UI 操作!
## 扫描数据类
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.scanner` |
| 类名 | `DecodeInfo` |
| 类成员 | `String barcode`:条码数据<br>`String codetype`:条码类型<br>`int length`:条码长度 |
## 扫描按键监听类
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.scanner` |
| 类名 | `ScannerKey` |
| 类成员变量 | `KEY_DOWN`:扫描按键按下<br>`KEY_UP`:扫描按键抬起 |
| 类方法 | `int open()`:打开扫描键监听,返回 1打开成功-1打开失败<br>`int getKeyEvent()`获取按键事件返回1扫描键按下0扫描键抬起-1获取失败。注意该方法将阻塞进程推荐异步调用。<br>`void close()`:关闭扫描键监听 |
| 说明 | 扫描按键监听类 |
**示例代码:**
```java
import com.seuic.scanner.Scanner;
import com.seuic.scanner.ScannerKey;
import com.seuic.scanner.ScannerFactory;
public class ScannerApiTest {
// ……
Runnable runnable = new Runnable() {
@Override
public void run() {
int ret1 = ScannerKey.open();
if (ret1 > -1) {
while (true) {
int ret = ScannerKey.getKeyEvent();
if (ret > -1) {
switch (ret) {
case ScannerKey.KEY_DOWN:
scanner.startScan();
break;
case ScannerKey.KEY_UP:
scanner.stopScan();
break;
}
}
}
}
}
};
// ……
ScannerKey.close();
}
```
---
# 扫描接口介绍
> 接口具体使用范围若无指明表示所有扫描头都支持。
## 获取扫描头上下文
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `ScannerFactory` |
| 接口 | `getScanner` |
| 接口参数 | `Context context` |
| 返回值 | `Scanner` 实例 |
| 说明 | 获取扫描类实例 |
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
public class ScannerApiTest {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
// ……
}
```
## 打开扫描头
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `open` |
| 接口参数 | void |
| 接口返回值 | boolean |
| 说明 | 返回 `true`,打开扫描头成功;返回 `false`,打开扫描头失败。**注意**:仅在该方法返回为 `true` 时,才可进行扫描头其他操作。 |
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
public class ScannerApiTest {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
Boolean status = scanner.open();
// ……
}
```
## 关闭扫描头
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `close` |
| 接口参数 | void |
| 接口返回值 | void |
| 说明 | 释放扫描头资源 |
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
public class ScannerApiTest {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
Boolean status = scanner.close();
// ……
}
```
## 开始扫描
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `startScan` |
| 接口参数 | void |
| 接口返回值 | void |
| 说明 | 开始扫描:扫描头出光进入条码读取模式 |
## 停止扫描
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `stopScan` |
| 接口参数 | void |
| 接口返回值 | void |
| 说明 | 停止扫描,可使扫描头灭光并终止条码读取 |
## 设置扫描条码回调
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类名 | `Scanner``DecodeInfoCallBack``DecodeInfo` |
| 接口名称 | `setDecodeInfoCallBack` |
| 接口参数 | param1`DecodeInfoCallBack` |
| 接口返回值 | void |
| 说明 | 设置用户扫描结束后的回调函数,该函数是获取包括条码数据、长度、类型的信息。在设置之前确保实现了 `DecodeInfoCallBack` 中的 `onDecodeComplete` 方法。 |
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
import com.seuic.scanner.DecodeInfoCallBack;
import com.seuic.scanner.DecodeInfo;
public class ScannerApiTest implements DecodeInfoCallBack {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
scanner.setDecodeInfoCallBack(this);
scanner.startScan();
// …….
scanner.stopScan();
@Override
public void onDecodeComplete(DecodeInfo info) {
// ……
}
// ……
}
```
## 启用扫描头
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `enable` |
| 接口参数 | void |
| 接口返回值 | void |
| 说明 | 启用扫描头 |
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
public class ScannerApiTest {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
scanner.enable();
// ……
}
```
## 禁用扫描头
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `disable` |
| 接口参数 | void |
| 接口返回值 | void |
| 说明 | 禁用扫描头,该操作完成后,将无法进行扫描操作 |
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
public class ScannerApiTest {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
scanner.disable();
// ……
}
```
## 获取条码参数
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `getParams` |
| 接口参数 | param1参数代码。例如获取 Scan Angle 的值,条码参数便是 `0x02`,具体参数代码参见:条码设置参数 |
| 接口返回值 | int 类型,条码参数当前值 |
| 说明 | 根据参数代码获取该参数当前的设定值 |
## 设置条码参数
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `setParams` |
| 接口参数 | param1参数代码。例如设置 Scan Angle 的值,条码参数便是 `0x02`<br>param2需要设置的参数值<br>参数代码参见:条码设置参数 |
| 接口返回值 | boolean`true` 设置成功,`false` 设置失败 |
| 说明 | 根据参数代码设置扫描参数值 |
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
public class ScannerApiTest {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
int value = scanner.getParams(0x02);
// ……
scanner.setParams(0x02, 1);
}
```
## 获取扫描成功后图像
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `getLastImage` |
| 接口参数 | void |
| 接口返回值 | `byte[]`图像数据width: 832 height: 640图像格式为 bitmap |
| 说明 | 当完成一次成功的扫描后,调用该接口,获取该次用于解码的扫描图像 |
> **注意:** 该接口仅适用于 A9/A-PAD/A6L-P/CRUISE 中的 S8
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
public class ScannerApiTest {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
scanner.startScan();
// ……
byte[] image = scanner.getLastImage();
}
```
## 开始读取图像
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `startVideo` |
| 接口参数 | param1int 类型设置超时时间单位为ms |
| 接口返回值 | `0`:回调函数 `onVideoCallback` 返回成功自动退出无需调用 `stopVideo`<br>`9`:参数无效退出<br>`17`:调用 `stopVideo` 手动退出<br>`6`:取图像失败退出<br>`25`:超时退出<br>`2`:未知错误退出 |
| 说明 | 开始读取图像:扫描头开始出光并进入图像读取模式,为阻塞函数,且与 `startScan` 不可同时使用。 |
> **注意:** 该接口仅适用于 A9/A-PAD/A6L-P/CRUISE 中的 S8
## 停止读取图像
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类 | `Scanner` |
| 接口名称 | `stopVideo` |
| 接口参数 | void |
| 接口返回值 | void |
| 说明 | 扫描头停止出光并终止对图像地读取。 |
> **注意:** 该接口仅适用于 A9/A-PAD/A6L-P/CRUISE 中的 S8
## 设置读取图像回调
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类名 | `Scanner``VideoCallBack` |
| 接口名称 | `setVideoCallBack` |
| 接口参数 | param1`VideoCallBack` |
| 接口返回值 | void |
| 说明 | 设置用户扫描进入读取图像模式后的回调函数,该接口仅适用于 A9/A-PAD/A6L-P/CRUISE 中的 S8 |
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
import com.seuic.scanner.VideoCallBack;
public class ScannerApiTest implements VideoCallBack {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
scanner.setVideoCallBack(this);
scanner.startVideo(3000);
// ……
scanner.stopVideo();
@Override
public boolean onVideoCallBack(int width, int height, byte[] img) {
// ……
}
// ……
}
```
## 设置扫描头状态回调
| 项目 | 内容 |
| --- | --- |
| 引用包名 | `com.seuic.scanner` |
| 引用类名 | `Scanner``StatusCallBack` |
| 接口名称 | `setStatusCallBack` |
| 接口参数 | param1`StatusCallBack` 接口类 |
| 接口返回值 | void |
| 说明 | 设置用户获取当前扫描状态的回调函数,在设置之前务必实现 `StatusCallBack` 中的 `onStatusCallBack` 方法,设置之后有关扫描的状态会自动回调 `onStatusCallBack` 将当前状态反馈给用户 |
**示例代码:**
```java
import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
public class ScannerApiTest implements StatusCallBack {
// ……
Scanner scanner = ScannerFactory.getScanner(context);
scanner.setStatusCallBack(this);
@Override
public boolean onStatusCallBack(int status, int info) {
// ……
}
// ……
}
```
---
# 扫描参数介绍
## 条码设置参数
| Parameter | Parameter Number (Hex) |
| --- | --- |
| Laser On Time | 0x01 |
| Scan Angle | 0x02 |
| Time Out Between Same Symbol | 0x03 |
| Linear Code Type Security Levels | 0x04 |
| Bi-directional Redundancy | 0x06 |
| Aimer/Illumination lighting combinations | 0x07 |
| Mobile Phone/Display Mode | 0x08 |
| Illumination Power Level | 0x09 |
| Decode Time Out | 0x0a |
| Adaptive Scanning | 0x0b |
| Continue Scan Mode | 0x0c |
| Exposure Mode | 0x0d |
| Picklist Mode | 0x0e |
| Aim Accuracy Level | 0x0f |
| GS1 AI Separator | 0x10 |
| Transfer Aim ID | 0x11 |
| Inverse Mode | 0x12 |
| Low Power Delay Time | 0x13 |
| Hold Scanning Time Out | 0x14 |
| UPC-A | 0x101 |
| UPC-E | 0x102 |
| UPC-E1 | 0x103 |
| EAN-8 | 0x104 |
| EAN-13 | 0x105 |
| Bookland EAN | 0x106 |
| Transmit UPC-A Check Digit | 0x107 |
| Transmit UPC-E Check Digit | 0x108 |
| Transmit UPC-E1 Check Digit | 0x109 |
| Transmit EAN-13 Check Digit | 0x10a |
| Transmit EAN-8 Check Digit | 0x10b |
| UPC-A Preamble | 0x10c |
| UPC-E Preamble | 0x10d |
| UPC-E1 Preamble | 0x10e |
| Convert UPC-E to A | 0x10f |
| Convert UPC-E1 to A | 0x110 |
| Convert EAN-8 to 13 | 0x111 |
| UCC Coupon Extended Code | 0x112 |
| UPC-E Expand | 0x113 |
| UPC-A 2 Char Addenda | 0x114 |
| UPC-A 5 Char Addenda | 0x115 |
| UPC-E 2 Char Addenda | 0x116 |
| UPC-E 5 Char Addenda | 0x117 |
| EAN13 2 Char Addenda | 0x118 |
| EAN13 5 Char Addenda | 0x119 |
| EAN8 2 Char Addenda | 0x11a |
| EAN8 5 Char Addenda | 0x11b |
| Code 128 | 0x121 |
| Code 128 Minimum Length | 0x122 |
| Code 128 Maximum Length | 0x123 |
| ISBT 128 | 0x124 |
| GS1-128 | 0x125 |
| ISBT 128 Predefined Concatenation Sequences On/Off | 0x126 |
| Code 39 | 0x131 |
| Trioptic Code 39 | 0x132 |
| Code 39 Full ASCII | 0x133 |
| Convert Code 39 to Code 32 | 0x134 |
| Code 32 Prefix | 0x135 |
| Code 39 Minimum Length | 0x136 |
| Code 39 Maximum Length | 0x137 |
| Transmit Code 39 Check Digit | 0x138 |
| Code 39 Check Digit Verification | 0x139 |
| Transmit Code 39 Start/Stop Characters | 0x13a |
| Code 39 Quiet Zone | 0x13b |
| Code 93 | 0x141 |
| Code 93 Minimum Length | 0x142 |
| Code 93 Maximum Length | 0x143 |
| Code 11 | 0x151 |
| Code 11 Minimum Length | 0x152 |
| Code 11 Maximum Length | 0x153 |
| Code 11 Check Digit Verification | 0x154 |
| Transmit Code 11 Check Digit | 0x155 |
| Interleaved 2 of 5 | 0x161 |
| Interleaved 2 of 5 Minimum Length | 0x162 |
| Interleaved 2 of 5 Maximum Length | 0x163 |
| Discrete 2 of 5 | 0x171 |
| Discrete 2 of 5 Minimum Length | 0x172 |
| Discrete 2 of 5 Maximum Length | 0x173 |
| Chinese 2 of 5 | 0x181 |
| Chinese 2 of 5 Minimum Length | 0x182 |
| Chinese 2 of 5 Maximum Length | 0x183 |
| Codabar | 0x191 |
| Codabar Minimum Length | 0x192 |
| Codabar Maximum Length | 0x193 |
| Transmit Codabar Start/Stop Characters | 0x194 |
| MSI | 0x201 |
| MSI Minimum Length | 0x202 |
| MSI Maximum Length | 0x203 |
| RSS 14 | 0x211 |
| RSS limit | 0x212 |
| RSS expanded | 0x213 |
| Convert RSS to UPC/EAN | 0x214 |
| QR Code | 0x221 |
| QR Code Minimum Length | 0x222 |
| QR Code Maximum Length | 0x223 |
| QR Inverse | 0x224 |
| MicroQR | 0x225 |
| Data Matrix | 0x231 |
| Data Matrix Minimum Length | 0x232 |
| Data Matrix Maximum Length | 0x233 |
| Data Matrix Inverse | 0x234 |
| Data Matrix Decode Mirror Images | 0x235 |
| China Post | 0x241 |
| China Post Minimum Length | 0x242 |
| China Post Maximum Length | 0x243 |
| Matrix 2 of 5 | 0x251 |
| Matrix 2 of 5 Minimum Length | 0x252 |
| Matrix 2 of 5 Maximum Length | 0x253 |
| US Postnet | 0x261 |
| US Planet | 0x262 |
| British Post | 0x263 |
| Japanese Post | 0x264 |
| Australian Post | 0x265 |
| UPU FICS Postal | 0x266 |
| USPS 4CB/One Code/Intelligent Mail | 0x267 |
| KIX(Netherlands) Post | 0x268 |
| Transmit US Postal Check Digit | 0x269 |
| Transmit Planet Check Digit | 0x26a |
| Korean 2 of 5 | 0x271 |
| EAN UCC Composite | 0x2b1 |
| EAN UCC Composite Minimum Length | 0x2b2 |
| EAN UCC Composite Maximum Length | 0x2b3 |
| PDF417 | 0x2c1 |
| PDF417 Minimum Length | 0x2c2 |
| PDF417 Maximum Length | 0x2c3 |
| Micro PDF417 | 0x2d1 |
| Micro PDF417 Minimum Length | 0x2d2 |
| Micro PDF417 Maximum Length | 0x2d3 |
| MaxiCode | 0x2e1 |
| MaxiCode Minimum Length | 0x2e2 |
| MaxiCode Maximum Length | 0x2e3 |
| Aztec Code | 0x2f1 |
| Aztec Code Minimum Length | 0x2f2 |
| Aztec Code Maximum Length | 0x2f3 |
| Aztec Inverse | 0x2f4 |
| Codablock | 0x301 |
| Codablock Minimum Length | 0x302 |
| Codablock Maximum Length | 0x303 |
| Telepen | 0x311 |
| Telepen Minimum Length | 0x312 |
| Telepen Maximum Length | 0x313 |
| Telepen Old Syle Mode | 0x314 |
| Set Default Parameter | 0x321 |
| Set Code Charset | 0x322 |
| OCR | 0x331 |
| Set OCR Template | 0x332 |
| Composite CC-C | 0x341 |
| Composite CC-A/B | 0x342 |
| Composite TLC-39 | 0x343 |
| UPC Composite | 0x344 |
| Transmit Code ID Character | 0x351 |
| Grid Matrix | 0x361 |
> 各扫描头参数详细信息见:扫描头条码参数汇总(仅供内部使用)
## 扫描状态参数
| Status | Status Number (Hex) |
| --- | --- |
| Decode Complete | 0x00 |
| Decode Time Out | 0x01 |
| Decode has been Canceled | 0x02 |
| Some Errors Happened | 0x03 |
| Decode Event | 0x04 |

View File

@@ -0,0 +1,449 @@
# Android 扫描服务接口设置
> 江苏东大集成电路系统工程技术有限公司
> www.seuic.com
![SEUIC 东集 Logo 图片占位符]
> **强烈建议修改广播名称**
## 修订记录
| 版本号 | 修订日期 | 修订内容 | 修订人员 |
| --- | --- | --- | --- |
| 1.0 | 2015/09/21 | 建立本文档 | 徐良伟 |
| 1.1 | 2016/11/07 | 增加过滤条码首尾空格选项 | 罗涛 |
| 1.2 | 2017/03/20 | 扫描特殊功能实现演示 | 罗涛 |
| 1.3 | 2017/05/31 | 加入启用/禁用扫描头以及过滤不可见字符广播接口介绍 | 罗涛 |
| 1.4 | 2017/07/18 | 修正条码参数设置广播接口 | 罗涛 |
| 1.5 | 2018/4/3 | 加入开始/停止扫描广播接口 | 罗涛 |
## 目录
- 概述
- 硬件平台
- 软件平台
- 适用对象
- 扫描服务应用设置
- 扫描声音开关
- 振动开关
- 连续扫描开关
- 时间间隔设置
- 条码前缀参数设置
- 条码后缀参数设置
- 开机自启动设置
- 条码结束符设置
- 条码发送方式
- 条码的广播设置
- 过滤首尾空格开关
- 条码参数设置
- 启用/禁用扫描头
- 过滤不可见字符
- 开始扫描
- 停止扫描
- 扫描特殊功能实现
- 持续出光模式设置
---
# 概述
东集提供的设备上内置了扫描服务,也提供了相应的设置软件。但部分客户有在自己的应用中定制扫描服务的需求。本文档介绍了如何通过接口来设置扫描服务的部分选项,以便帮助用户更灵活地使用我们的设备。
## 硬件平台
SDK 适用于以下终端设备:
- D500
- D510
- D330S
- D500P
- D510P
- D330P
- D700
- D500F
- D700P
具体使用范围在函数接口说明中指明,若无指明表示都支持。
## 软件平台
SDK 基于 Android 4.3、Android 4.4、Android 5.1、Android 7.1 版本,支持 Eclipse、Android Studio 开发工具。
## 适用对象
希望在自己的应用中定制扫描服务的开发人员。
---
# 扫描服务应用设置
扫描服务应用设置支持以下功能的设置:
- 扫描声音开关
- 振动开关
- 连续扫描开关
- 时间间隔设置
- 条码前缀参数设置
- 条码后缀参数设置
- 开机自启动设置
- 条码结束符设置
- 条码发送方式
- 条码的广播设置
- 过滤条码首尾空格开关
- 条码参数设置
- 启用/禁用扫描头
- 过滤不可见字符
- 开始扫描
- 停止扫描
**版本需求:** 扫描应用 1.0.67 及以后,部分设置 1.0.69 及以后。
- **1.0.67 支持**
- 扫描声音开关
- 振动开关
- 开机自启动设置
- 条码结束符设置
- 条码发送方式
- 条码的广播设置
- 启用/禁用扫描头
- **1.0.69 支持**
- 连续扫描开关
- 时间间隔设置
- 条码前缀参数设置
- 条码后缀参数设置
- 条码参数设置
- **1.1.3 支持**
- 过滤条码首尾空格开关
- 过滤不可见字符
> **备注:** 支持在一条广播中进行多项设置。
## 扫描声音开关
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `sound_play` |
| 取值 | boolean 型true 或 false |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("sound_play", true);
sendBroadcast(intent);
```
## 振动开关
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `viberate` |
| 取值 | boolean 型true 或 false |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("viberate", false);
sendBroadcast(intent);
```
## 连续扫描开关
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `scan_continue` |
| 取值 | boolean 型true 或 false |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("scan_continue", true);
sendBroadcast(intent);
```
## 时间间隔设置
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `interval` |
| 取值 | int 型 |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("interval", 3000);
sendBroadcast(intent);
```
## 条码前缀参数设置
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `prefix` |
| 取值 | String 型,默认为 `" "` |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("prefix", "");
sendBroadcast(intent);
```
## 条码后缀参数设置
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `suffix` |
| 取值 | String 型,默认为 `" "` |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("suffix", "");
sendBroadcast(intent);
```
## 开机自启动设置
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `boot_start` |
| 取值 | boolean 型true 或 false |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("boot_start", true);
sendBroadcast(intent);
```
## 条码结束符设置
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `endchar` |
| 取值 | 在条码后面附加的结束符,字符串类型,注意大小写,支持以下几种:<br> `"ENTER"`:回车<br> `"TAB"`TAB<br> `"SPACE"`:空格<br> `"NONE"`:无结束符 |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("endchar", "ENTER");
sendBroadcast(intent);
```
## 结束符以 Enter 键发送
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `end_char_on_emu` |
| 取值 | 结束符以 Enter 键发送:模拟按键模式下 |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("end_char_on_emu", true);
sendBroadcast(intent);
```
## 条码发送方式
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `barcode_send_mode` |
| 取值 | 扫描服务扫描到条码后的发送方式,字符串类型,注意大小写,支持以下几种:<br> `"FOCUS"`:焦点录入<br> `"BROADCAST"`:广播<br> `"EMUKEY"`:模拟按键<br> `"CLIPBOARD"`:剪贴板 |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("barcode_send_mode", "BROADCAST");
sendBroadcast(intent);
```
## 条码的广播设置
**条码广播名称**
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `action_barcode_broadcast` |
| 取值 | 字符串类型,默认是:`"com.android.server.scannerservice.broadcast"` |
**条码键值名称**
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `key_barcode_broadcast` |
| 取值 | 字符串类型,默认是:`"scannerdata"` |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("action_barcode_broadcast", "com.android.server.scannerservice.broadcast");
intent.putExtra("key_barcode_broadcast", "scannerdata");
sendBroadcast(intent);
```
## 过滤首尾空格开关
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `filter_prefix_suffix_blank` |
| 取值 | boolean 型true 或 false |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("filter_prefix_suffix_blank", true);
sendBroadcast(intent);
```
## 条码参数设置
| 项目 | 内容 |
| --- | --- |
| action | `com.seuic.scanner.action.PARAM_SETTINGS` |
| extra1 | `number` |
| 取值 | int 型 |
| extra2 | `value` |
| 取值 | int 型 |
> 有关扫描参数详情请见:[Android 扫描接口文档(1.0)](./Android扫描接口文档.md)
**示例:**
```java
Intent intent = new Intent("com.seuic.scanner.action.PARAM_SETTINGS");
intent.putExtra("number", 0x01);
intent.putExtra("value", 30);
sendBroadcast(intent);
```
## 启用/禁用扫描头
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.ENABLED` |
| extra | `enabled` |
| 取值 | boolean 型true 或 false |
**示例:**
启用扫描头:
```java
Intent intent = new Intent("com.android.scanner.ENABLED");
intent.putExtra("enabled", true);
sendBroadcast(intent);
```
禁用扫描头:
```java
Intent intent = new Intent("com.android.scanner.ENABLED");
intent.putExtra("enabled", false);
sendBroadcast(intent);
```
## 过滤不可见字符
| 项目 | 内容 |
| --- | --- |
| action | `com.android.scanner.service_settings` |
| extra | `filter_invisible_chars` |
| 取值 | boolean 型true 或 false |
**示例:**
```java
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("filter_invisible_chars", true);
sendBroadcast(intent);
```
## 开始扫描
| 项目 | 内容 |
| --- | --- |
| action | `com.scan.onStartScan` |
**示例:**
开始出光扫描:
```java
Intent intent = new Intent("com.scan.onStartScan");
sendBroadcast(intent);
```
## 停止扫描
| 项目 | 内容 |
| --- | --- |
| action | `com.scan.onEndScan` |
**示例:**
停止出光扫描:
```java
Intent intent = new Intent("com.scan.onEndScan");
sendBroadcast(intent);
```
## 相关常量定义
```java
private final String TYPE_KEYUP_TO_STOP_SCAN = "keyup_to_stop_scan"; // 抬起停止扫描
private final String TYPE_ENDCHAR_ON_EMU = "end_char_on_emu"; // 结束符以模拟按键方式发送
private final String TYPE_ENTER_EVENT = "end_event"; // 默认广播时条码后添加回车事件
private final String TYPE_FILTER_INVISIBLE_CHARS = "filter_invisible_chars"; // 过滤不可见字符
private final String TYPE_FILTER_PREFIX_SUFFIX_BLANK = "filter_prefix_suffix_blank"; // 过滤首尾空格
```
---
# 扫描特殊功能实现
## 持续出光模式设置
**示例代码:**
```java
// 将连续扫描打开
Intent intent = new Intent("com.android.scanner.service_settings");
intent.putExtra("scan_continue", true);
sendBroadcast(intent);
// 设置条码参数持续出光为开
Intent intentParam = new Intent("com.android.scanner.PARAM_SETTINGS");
intent.putExtra("number", 0x0c);
intent.putExtra("value", 1);
sendBroadcast(intentParam);
```

View File

@@ -0,0 +1,663 @@
# D500 Android SDK 使用说明书
> 江苏东大集成电路系统工程技术有限公司
> www.seuic.com
![SEUIC 东集 Logo 图片占位符]
## 修订记录
| 版本号 | 修订日期 | 修订内容 | 修订人员 |
| --- | --- | --- | --- |
| 0.0 | 2014/08/05 | 建立本文档 | 钱进 |
| 0.1 | 2014/08/05 | 加入 keypad、touch 接口的说明 | 张松 |
| 0.2 | 2014/08/08 | 更改文档模板,并按模板重写文档 | 徐良伟 |
| 1.0 | 2014/08/09 | 加入"系统包的使用",并按 touch 新接口修改文档 | 徐良伟 |
| 1.1 | 2014/09/02 | 加入 touch 新的接口说明 加入 misc 接口 | 魏启运 |
| 1.2 | 2015/04/29 | 在 misc 接口中增加启用/禁用状态栏下拉的接口,增加卸载/加载外置 SD 卡的接口 | 张松 |
| 1.3 | 2017/03/16 | 在 misc 接口中添加 Zigbee 及 Fingerprint 的访问接口 | 钱进 |
| 1.4 | 2017/03/29 | 更新 Zigbee 和 Fingerprint 接口 | 徐良伟 |
## 目录
- 概述
- 硬件平台
- 软件平台
- 适用对象
- 系统包的使用
- 触摸屏接口
- TouchService 类
- 键盘接口
- KeypadService 类
- Misc 接口
- Misc 类
- Zigbee 类
- Fingerprint 类
- Manager 类
---
# 概述
本文档介绍了 D500 上提供的设备相关的包的使用说明,以便帮助用户更好的使用终端产品提供的特殊功能。
## 硬件平台
SDK 适用于以下终端设备:
- D500
- D510
- D330S
具体使用范围在函数接口说明中指明,若无指明表示都支持。
## 软件平台
SDK 基于 Android 4.3 版本,支持 eclipse 开发工具。
## 适用对象
除了 Android 的标准功能外,希望用到设备提供的增值功能的开发人员。这部分增值功能包括一维扫描、二维扫描、键盘特殊设置、触摸特殊设置等实用功能。
## 系统包的使用
如果接口中标明是系统包,表明该包是内置到系统中的,无需将该包加入到 apk 中。下面以键盘接口为例,来说明如何在 eclipse 中使用系统包。
- 在工程目录下建一个 `libsref` 目录(目录名称可以任意指定),将 `keypad.jar` 拷贝到此目录下。
- 在 eclipse 中选中工程,在菜单中选择 Project → Properties → Java Build Path点击 **Add External JARS...** 按钮,选择刚才的 `keypad.jar`。这时可以在工程视图的 Referenced Libraries 下看到刚才我们引用的 `keypad.jar`,展开可以看到所有 `keypad.jar` 提供的包、类、函数、变量。
- `AndroidManifest.xml` 中使用 `uses-library` 用包名来标示 `keypad.jar` 是引用包。
```xml
<application
<uses-library
android:name="com.seuic.keypad" />
……
</application>
```
---
# 触摸屏接口
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.touch` |
| 包文件 | `touch.jar` |
| 系统包 | 是 |
| 包含的类 | `TouchService` |
| 作用 | 提供触摸屏相关的控制接口 |
## TouchService 类
### 使用方法
```java
import com.seuic.touch.TouchService;
TouchService touch = TouchService.getInstance();
```
### 函数接口
| 函数 | 说明 |
| --- | --- |
| `getGloveMode` | 获取当前手套模式开关状态 |
| `setGloveMode` | 设置手套模式开关 |
| `getTouchEnabled` | 获取当前触屏使能状态 |
| `setTouchEnabled` | 设置触摸屏使能开关 |
| `getVirKeyDisabled` | 获取虚拟按键屏蔽状态(仅 D500 支持) |
| `setVirKeyDisabled` | 设置虚拟按键屏蔽状态(仅 D500 支持) |
#### 1. 获取当前手套模式开关状态
```java
int getGloveMode()
```
**参数:**
**返回值:** 返回手套模式状态,有以下几种:
| 状态 | 值 | 说明 |
| --- | --- | --- |
| `MODE_GLOVE_OFF` | 0 | 手套模式关闭 |
| `MODE_GLOVE_ON` | 1 | 手套模式打开 |
| | <0 | 触摸接口不正常,或该设备不支持手套模式设置 |
#### 2. 设置手套模式开关
```java
boolean setGloveMode(int mode)
```
**参数:**
- `mode`:手套模式状态,见 `getGloveMode()` 函数返回值的说明。
**返回值:** 返回 `true` 表示成功,`false` 表示失败。
#### 3. 获取当前触摸屏使能状态
```java
int getTouchEnable()
```
**参数:**
**返回值:** 返回触摸屏使能状态,有以下几种:
| 状态 | 值 | 说明 |
| --- | --- | --- |
| `TOUCH_ENABLED_OFF` | 0 | 触摸屏处于锁屏状态 |
| `TOUCH_ENABLED_ON` | 1 | 触摸屏处于正常使用状态 |
| | <0 | 触摸接口不正常,或该设备不支持触摸屏使能设置 |
#### 4. 设置触摸屏使能开关
```java
boolean setTouchEnabled(int enable, Context context)
```
**参数:**
- `enable`:触摸屏使能状态,见 `getTouchEnabled()` 函数返回值的说明。
- `context`:调用者的上下文,用于向系统广播锁屏通知,以便在通知栏显示当前锁屏状态。
**返回值:** 返回 `true` 表示成功,`false` 表示失败。
#### 5. 获取虚拟按键屏蔽状态
```java
int getVirKeyDisabled()
```
**参数:**
**返回值:** 返回虚拟按键屏蔽状态,有以下几种:
| 状态 | 值 | 说明 |
| --- | --- | --- |
| `VKEY1_DISABLE_MASK` | `1 << 0` | 虚拟键一被屏蔽 |
| `VKEY2_DISABLE_MASK` | `1 << 1` | 虚拟键二被屏蔽 |
| `VKEY3_DISABLE_MASK` | `1 << 2` | 虚拟键三键被屏蔽 |
| `VKEY_ALL_DISABLE_MASK` | `0x7` | 所有虚拟按键均屏蔽 |
| | 0 | 所有虚拟按键未被屏蔽 |
| | <0 | 触摸接口不正常,或设备不支持触摸屏设置 |
#### 6. 设置虚拟按键屏蔽状态
```java
boolean setVirKeyDisabled(int disableMask)
```
**参数:**
- `disableMask`:虚拟按键屏蔽状态,见 `getVirKeyDisabled()` 函数返回值的说明。
**返回值:** 返回 `true` 表示成功,`false` 表示失败。
---
# 键盘接口
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.keypad` |
| 包文件 | `keypad.jar` |
| 系统包 | 是 |
| 包含的类 | `KeypadService` |
| 作用 | 提供键盘相关的控制接口 |
## KeypadService 类
### 使用方法
```java
import com.seuic.keypad.KeypadService;
KeypadService keypad = KeypadService.getInstance();
```
### 函数接口
| 函数 | 说明 |
| --- | --- |
| `getMode` | 获取键盘模式(仅 D500 支持) |
| `setMode` | 设置键盘模式(仅 D500 支持) |
#### 1. 获取键盘模式
```java
int getMode()
```
**参数:**
**返回值:** 返回键盘功能键模式,有以下几种:
| 状态 | 值 | 说明 |
| --- | --- | --- |
| `MODE_NORMAL` | 0 | 标准模式。根据当前 Num、Fn 的状态灯输出数字或功能键。 |
| `MODE_STICK_ONCE` | 1 | Fn 键只粘滞一次模式。当处于 Fn 状态时,按一下按键输出功能键,然后自动切换到 Num 模式。 |
| | <0 | 键盘接口不正常,或该设备不支持键盘模式设置 |
#### 2. 设置键盘模式
```java
boolean setMode(int mode)
```
**参数:**
- `mode`:键盘模式状态,见 `getMode()` 函数返回值的说明。
**返回值:** 返回 `true` 表示成功,`false` 表示失败。
---
# Misc 接口
| 项目 | 内容 |
| --- | --- |
| 包名 | `com.seuic.misc` |
| 包文件 | `misc.jar` |
| 系统包 | 是 |
| 包含的类 | `Misc` |
| 作用 | 提供系统其它接口 |
## Misc 类
### 使用方法
```java
import com.seuic.misc.Misc;
Misc misc = new Misc();
```
### 函数接口
| 函数 | 说明 |
| --- | --- |
| `getSN` | 获取设备 SN |
| `getStatusBarEnabled` | 获取系统状态栏是否允许下拉的状态 |
| `setStatusBarEnabled` | 设置系统状态栏是否允许下拉 |
| `getExtSDCardMounted` | 获取外置 SD 卡是否卸载 |
| `setExtSDCardMounted` | 设置外置 SD 卡卸载或加载 |
| `getCustomId` | 获取用户自定义序列号。仅支持 D700_V1.6.0 及之后版本D700C_V1.2.0 及之后版本D700P_V1.1.2 及之后版本。 |
#### 1. 获取设备 SN
```java
String getSN()
```
**参数:**
**返回值:** 返回厂家定义的 SN 号,有以下几种:
| 状态 | 值 | 说明 |
| --- | --- | --- |
| null | null | 获取 SN 失败 |
| String 类型 | String 类型 | 获取成功 |
#### 2. 获取系统状态栏是否允许下拉的状态
```java
int getStatusBarEnabled(Context context)
```
**参数:**
- `context`:上下文。
**返回值:** 返回状态栏是否允许下拉的状态,如下:
| 状态 | 值 | 说明 |
| --- | --- | --- |
| `STATUSBAR_DISABLED` | 0 | 系统状态栏不允许下拉。 |
| `STATUSBAR_ENABLED` | 1 | 系统状态栏允许下拉。 |
| | <0 | 接口不正常,或该设备不支持系统状态栏的设置。 |
#### 3. 设置系统状态栏是否允许下拉
```java
void setStatusBarEnabled(Context context, int enable)
```
**参数:**
- `context`:上下文。
- `enable`:状态栏是否允许下拉,取值见 `getStatusBarEnabled()` 返回值。
**返回值:**
#### 4. 获取外置 SD 卡是否卸载
```java
int getExtSDCardMounted(Context context)
```
**参数:**
- `context`:上下文。
**返回值:** 返回外置 SD 卡的状态,如下:
| 状态 | 值 | 说明 |
| --- | --- | --- |
| `EXT_SDCARD_UNMOUNTED` | 0 | 外置 SD 卡卸载。 |
| `EXT_SDCARD_MOUNTED` | 1 | 外置 SD 卡未卸载。 |
| | <0 | 接口不正常,或该设备不支持外置 SD 卡的卸载。 |
#### 5. 设置外置 SD 卡卸载或装载
```java
void setExtSDCardMounted(Context context, int enable)
```
**参数:**
- `context`:上下文。
- `enable`:设置外置 SD 卡的卸载加载,取值见 `getExtSDCardMounted()` 返回值。
**返回值:**
#### 6. 获取用户自定义序列号
```java
String getCustomId()
```
**参数:**
**返回值:** 返回用户自定义序列号,**仅 D700 系列支持,其它项目请勿调用此函数,会异常**。
返回值有以下几种:
| 状态 | 值 | 说明 |
| --- | --- | --- |
| null | null | 获取用户自定义序列号失败 |
| String 类型 | String 类型 | 获取成功 |
## Zigbee 类
### 使用方法
```java
import com.seuic.misc.Zigbee;
Zigbee zigbee = new Zigbee();
```
### 操作流程
参考流程:`open``powerOn``read & write``powerOff``close`
该类提供的函数可以分为两组,一组是用于模块的上电/断电,一组用于串口的操作。模块的上电和串口打开谁先谁后并没有严格的顺序,视具体设备要求。
### 函数接口
| 函数 | 说明 |
| --- | --- |
| `getDeviceName` | 获取设备名称 |
| `powerOn` | 设备上电 |
| `powerOff` | 设备断电 |
| `open` | 打开设备,包括打开串口,不包括上电 |
| `close` | 关闭设备,包括关闭串口,不包括断电 |
| `read` | 封装对设备的读操作 |
| `write` | 封装对设备的写操作 |
#### 1. 获取设备名称
```java
public String getDeviceName()
```
**参数:**
**返回值:** 该设备连接的串口设备文件,如 `/dev/ttyUART0`
#### 2. 设备上电
```java
public void powerOn()
```
**参数:**
**返回值:**
#### 3. 设备断电
```java
public void powerOff()
```
**参数:**
**返回值:**
#### 4. 打开设备,包括打开串口
```java
public boolean open()
public boolean open(int baudrate)
public boolean open(int baudrate, int dataBits, int stopBits, int parity)
```
**参数:**
- `baudrate`:波特率,如 `115200`
- `dataBits`:数据位,目前支持 `5``6``7``8`
- `stopBits`:停止位,目前支持 `1``2`
- `parity`:奇偶校验
- `'n'``'N'`:无奇偶校验
- `'o'``'O'`:奇校验
- `'e'``'E'`:偶校验
- `'m'``'M'`:标记检验
- `'s'``'S'`:空白校验
**返回值:** 成功或失败
**备注:** 提供 3 个 `open` 接口简化串口的参数设置,默认串口 1152008 位数据位1 位停止位,无奇偶校验。用户可以根据实际情况选择相应的接口。
#### 5. 关闭设备,包括关闭串口
```java
public void close()
```
**参数:**
**返回值:**
#### 6. 封装对设备的读操作
```java
public byte[] read(int len, int timeout)
```
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `len` | int | 要读取的长度 |
| `timeout` | int | 超时,单位毫秒 |
**返回值:** 读取到的字节数组,失败的话返回 `null`
#### 7. 封装对设备的写操作
```java
public boolean write(byte[] data, int len)
```
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `data` | byte[] | 要写入设备的字节数组 |
| `len` | int | 要写入的长度,应当 <= data 的实际长度 |
**返回值:** 成功或失败
## Fingerprint 类
### 使用方法
```java
import com.seuic.misc.Fingerprint;
Fingerprint fingerprint = new Fingerprint();
```
### 操作流程
`open``powerOn``read & write``powerOff``close`
> 有的指纹模块可能需要先 `powerOn` 再 `open`,请和模块厂家确认。
该类提供的函数可以分为两组,一组是用于模块的上电/断电,一组用于串口的操作。模块的上电和串口打开谁先谁后并没有严格的顺序,视具体设备要求。
### 函数接口
| 函数 | 说明 |
| --- | --- |
| `getDeviceName` | 获取设备名称 |
| `powerOn` | 设备上电 |
| `powerOff` | 设备断电 |
| `open` | 打开设备,包括打开串口,不包括上电 |
| `close` | 关闭设备,包括关闭串口,不包括断电 |
| `read` | 封装对设备的读操作 |
| `write` | 封装对设备的写操作 |
#### 1. 获取设备名称
```java
public String getDeviceName()
```
**参数:**
**返回值:** 该设备连接的串口设备文件,如 `/dev/ttyUART0`
#### 2. 设备上电
```java
public void powerOn()
```
**参数:**
**返回值:**
#### 3. 设备断电
```java
public void powerOff()
```
**参数:**
**返回值:**
#### 4. 打开设备,包括打开串口
```java
public boolean open()
public boolean open(int baudrate)
public boolean open(int baudrate, int dataBits, int stopBits, int parity)
```
**参数:**
- `baudrate`:波特率,如 `115200`
- `dataBits`:数据位,目前支持 `5``6``7``8`
- `stopBits`:停止位,目前支持 `1``2`
- `parity`:奇偶校验
- `'n'``'N'`:无奇偶校验
- `'o'``'O'`:奇校验
- `'e'``'E'`:偶校验
- `'m'``'M'`:标记检验
- `'s'``'S'`:空白校验
**返回值:** 成功或失败
**备注:** 提供 3 个 `open` 接口简化串口的参数设置,默认串口 1152008 位数据位1 位停止位,无奇偶校验。用户可以根据实际情况选择相应的接口。
#### 5. 关闭设备,包括关闭串口
```java
public void close()
```
**参数:**
**返回值:**
#### 6. 封装对设备的读操作
```java
public byte[] read(int len, int timeout)
```
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `len` | int | 要读取的长度 |
| `timeout` | int | 超时,单位毫秒 |
**返回值:** 读取到的字节数组,失败的话返回 `null`
#### 7. 封装对设备的写操作
```java
public boolean write(byte[] data, int len)
```
**参数:**
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `data` | byte[] | 要写入设备的字节数组 |
| `len` | int | 要写入的长度,应当 <= data 的实际长度 |
**返回值:** 成功或失败
## Manager 类
### 使用方法
```java
import com.seuic.misc.Manager;
Manager manager = new Manager(context);
```
### 函数接口
| 函数 | 说明 |
| --- | --- |
| `enableUsb` | 使能/禁用 USB。使能状态下usb 才可以设置为 mtp/ptp/U 盘模式。仅支持 D700_V1.6.0 及之后版本。 |
| `isUsbEnabled` | 查看 USB 使能状态。仅支持 D700_V1.6.0 及之后版本。 |
#### 1. 使能/禁用 USB
```java
public boolean enableUsb(boolean enable)
```
**参数:**
- `enable`
- `true`:使能
- `false`:禁用
**返回值:** 设置是否成功。
#### 2. 查看 USB 使能状态
```java
public boolean isUsbEnabled()
```
**参数:**
**返回值:** `true` 表示使能,`false` 表示禁用。默认是使能状态。