nqpen-sdk/README.md

16 KiB
Raw Blame History

智能笔SDK使用说明文档 P10&P20-Android 版本) 文件状态: [ ] 草稿 [ √ ] 正式发布 [ ] 正在修改 文件标识: 20200425001 当前版本: V1.2.21 机密等级: 公开 作 者: 李秋 更新日期: 2021-5-7 深圳市凝趣科技有限公司 修订历史 序号 版本 编写/修订说明 修订人 修订日期 备注 1 V0.1.0 第一次建档写「新建文档」 李秋 2020-4-25 2 V1.0.0 更新单例名 李秋 2020-5-25 3 V1.0.3 增加获取版本信息增加对坐标最大值的计算 李秋 2020-8-7 4 V1.0.6 补充坐标换算实际尺寸的方法 李秋 2020-8-17 5 V1.1.0 1、 增加了对 BookNumber 的支持 2、 调整坐标原点在左上角 3、 对飞笔做了过滤优化 李秋 2020-8-21 6 V1.1.3 1、更新文档,NQDot 增加 booknum 李秋 2020-9-9 7 V1.1.7 DotType 修改为 Down、Move、Up 李秋 2020-10-10 8 V1.1.8 支持 P20 蓝牙笔 李秋 2021-2-3 9 V1.2.21 更新离线数据部分 李秋 2021-5-7 此版本开始,版本号为 SDK 版本 注:版本号命名规范 示例「V0.0.0」“主版本号.子版本号.修正版本号” 1 文档最初完成的版本,版本号可以为 0.1.0 2 当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1; 3 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1修正版本号复位为 0 4 当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1; 目 录 一、 简介...........................................................................................................................................1 二、 开发环境准备...........................................................................................................................1 三、 集成...........................................................................................................................................1 四、 ANDROIDMANIFEST 配置.................................................................................................. 1 五、 接口...........................................................................................................................................2 (一) SDK 单例 NQPenSDK 提供以下功能函数方法.....................................................2 (二) 初始化回调接口...........................................................................................................3 (三) 扫描连接回调接口.......................................................................................................4 (四) 实时书写数据点接收接口...........................................................................................4 (五) 笔信息回调接口...........................................................................................................5 (六) 离线数据回调接口.......................................................................................................6 六、 类说明.......................................................................................................................................6 (一) 点的类型.......................................................................................................................6 (二) 码点坐标.......................................................................................................................7 (三) 设备...............................................................................................................................7 1、 设备基类 NQDeviceBase..............................................................................................7 2、 蓝牙设备.............................................................................................................................7 3、 USB 设备............................................................................................................................9 七、 状态码.......................................................................................................................................9 (一) 连接状态码 ConnectState........................................................................................9 (二) 错误码 ErrorCode...................................................................................................... 9 八、 坐标转换.................................................................................................................................10 九、 常见问题.................................................................................................................................12

一、简介 该使用说明文档对sdk的集成和接口功能进行简要说明。二、开发环境准备 建议使用android studio并下载更新android sdk到最新版。三、集成 把aar包拷贝到app 的module下的libs目录下在app的build.gradle配置文件添加依赖 dependencies { implementation fileTree(dir: 'libs', include: ['*.aar]) } 四、AndroidManifest 配置 在AndroidManifest.xml的根节点下添加以下权限 1、 USB通信需要添加以下权限

2、 BLE通信需要添加以下权限 3、 在内添加service声明 五、接口 SDK单例 NQPenSDK提供以下功能函数方法 调用SDK建议再封装一个单例管理类来调用SDK的功能使用前请先调用init()初始 如果是BLE和USB切换使用请先release再init 化退出时调用release()释放资源,, 记得重新添加接口监听; 函数名 参数 返回值 功能说明 void init() Context context 上下文 CONN_TYPE type 连接 类型 InitListener initListener 初始化监听 无 初始化 CONN_TYPE USB/BLE/SPP (SPP 暂不支持) void release() 无 无 释放资源,监听接口会置空,下次连接请添加接口监听 int startScanDevice() 无 0 成功 -1 失败 发起扫描设备 void stopScan() 无 无 停止扫描设备 void connect(NQDeviceBase device) device 设 备 基 类 NQDeviceBase ,可通过 扫描设备返回获得 无 发起连接设备 void disconnect() 无 无 断开连接设备 NQDeviceBase getConnectedDevice() 无 NQDeviceBa se 设备基类 获取当前连接的设备 void setDotListener(PenDotListener listener) listener 数据点监听器 PenDotListener 无 设置实时书写数据点监听 void setPenConnectListener(PenConne ctListener listener) listener 连接监听器 PenConnectListener 无 对 USB 插拔、扫描、连接进行监听 Void setPenOfflineDataListener(PenOff lineDataListener listener) 离线数据同步回调监听器 PenOfflineDataListener 无 public void addPageSizeByPaperSize (float width, float height, int bookNum, int pageFrom, int pageTo) width 毫米,纸张宽度 height 毫米,纸张高度 bookNum 整数,页码编码 pageFrom 整数,起始页 pageTo 整数,截止页 无 添加 PageSize指 定 booknum 对应的页码范围。 该方法设置的 是纸张的实际 物理尺寸,单位:毫米 public void addPageSize(int width, int height, int bookNum, int pageFrom, int pageTo) width 纸张的码点宽度 height 纸张的码点高度 bookNum 整数,页码编码 pageFrom 整数,起始页 pageTo 整数,截止页 无 添加 PageSize指 定 booknum 对应的页码范围 public PageSize getPageSizeByBookNum(int bookNum) bookNum 整数,页码编码 PageSize 返回 bookNum 对 应 的 PageSize 根 据 bookNum 获取 PageSize public void removePageSize(int bookNum) bookNum 整数,页码编码 无 根 据 bookNum 删除 PageSize

(二)初始化回调接口 /**

  • 初始化回调 / public interface InitListener { NQPenSDK.CONN_TYPE conn_type void success();//初始化成功 void failure(int error, String message);//初始化失败 } (三)扫描连接回调接口 public interface PenConnectListener extends ScanListener { /*
  • 连接状态
  • @param state / void onConnectState(int state); /*
  • 插入USB设备
  • @param usbDevice / void onUsbDeviceAttached(UsbDevice usbDevice); /*
  • 拔出USB设备
  • @param usbDevice / void onUsbDeviceDetached(UsbDevice usbDevice); } (四)实时书写数据点接收接口 public interface PenDotListener { void onReceiveDot(NQDot nqDot); void onError(int error, String message); } (五)笔信息回调接口 public interface PenMsgListener { /*
  • 返回固件信息
  • @param ver / public void onFWVer(String ver); /*
  • 返回 MCU 信息
  • @param ver / public void onMCUVer(String ver); /*
  • 返回电量信息(蓝牙笔)
  • @param bat 例如 3.9v / @Override public void onBatInfo(float bat); /*
  • 返回序列号(蓝牙笔)
  • @param bat 例如 3.9v / @Override public void onSerialNumber(String s) { } } (六)离线数据回调接口 public interface PenOfflineDataListener { //开始同步 离线数据数量单位byte void offlineDataSyncStart(long var1); //停止同步 void offlineDataSyncStop(); //离线数据点 void offlineDataDidReceivePenData(NQDot var1); //成功删除离线数据 void offlineDataDel(); //离线数据数量单位: byte void offlineDataLength(long var1); } 六、类说明 (一)点的类型 public class DotType { /*
  • 落笔 / public static final int PEN_ACTION_DOWN = 0;//落笔 /*
  • 移动笔 / public static final int PEN_ACTION_MOVE = 1;//移动笔 /*
  • 抬笔 / public static final int PEN_ACTION_UP=2;//抬笔 } (二)码点坐标 public class NQDot { public int type;// 0 表示Down 1表示Move , 2表示 Up public int x;//x坐标 public int y;//y坐标 public int page;//页码 public int book_width;//页面宽度最大值 public int book_height;//页面高度最大值 public long time_stamp;//时间戳,传输时的时间 public long bookNum;//Book类型 } (三)设备 1、设备基类 NQDeviceBase 2、蓝牙设备 public class NQBtDevice extends NQDeviceBase { private String name; private String mac; private int rssi; @Override public String getType() { return type; } public NQBtDevice(){ this.type = "bt"; } public void init(String name, String mac, int rssi){ this.name = name; this.mac = mac; this.rssi = rssi; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMac() { return mac; } public void setMac(String mac) { this.mac = mac; } public int getRssi() { return rssi; } public void setRssi(int rssi) { this.rssi = rssi; } } 3、USB 设备 public class NQUsbDevice extends NQDeviceBase{ UsbDevice device; @Override public String getType() { return this.type; } public UsbDevice getDevice(){ return this.device; } public void setDevice(UsbDevice device){ this.device = device; this.type = "usb"; } } 七、状态码 连接状态码ConnectState public class ConnectState { public static final int CONN_STATE_CLOSED = 0; public static final int CONN_STATE_CONNECTING = 1; public static final int CONN_STATE_CONNECTED = 2; public static final int CONN_STATE_DISCONNECTING = 3; } 错误码ErrorCode public class ErrorCode { public static final int SCAN_OK = 0;//正常 public static final int ERR_SCAN_ERROR = -1;//异常 public static final int ERR_INIT_ERROR = 100;//初始化异常 public static final int ERR_RESCAN_SCANNING = 101;//扫描过程中无法再次执行扫描过程 public static final int ERR_STOP_SCAN = 102;//尝试在不扫描时取消扫描 public static final int ERR_CONTEXT_IS_NULL = 103;//context is null public static final int ERR_BT_ADAPTER_IS_NULL = 104;//bt adapter is null public static final int ERR_PERMISSION_NOT_GRANTED = 105;//动态检查是否已经 获取定位授权 public static final int ERR_BT_ADAPTER_TURN_OFF = 106;//蓝牙适配器没有开启 public static final int ERR_SCANNER_IS_NULL = 107;//获取的BluetoothLeScanner 为空 public static final int ERR_SCAN_TIMEOUT_VALUE = 108;//设置的扫描超时时间无效 public static final int ERR_USB_MANAGER_IS_NULL = 109;//UsbManager is null publicstaticfinalintERR_DEVICE_LIST_IS_NULL =110;//UsbDeviceLISTisnull public static final int ERR_USB_VID_PID_IS_ERROR = 111;//vid or pid is error publicstaticfinalintERR_USB_INTERFACE_IS_NULL=112;//usbinterfaceisnull public static final int ERR_PARSER_DATA = 114;//码点数据异常(如页码、坐标) public static final int ERR_PARSER = 115;//码点解析异常(如传输协议解析) public static final int ERR_PAGESIZE_EMPTY = 116;//PAGESIZE IS NULL public static final int ERR_PAGESIZE_OUT_OF_RANGE = 117;//PAGE 超出 PAGESIZE 范围 public static final int ERR_COORDINATE_EXCEPTION = 118;//coordinate exception public static final int ERR_LACK_OF_UP = 119;//last stroke lack of DotType.Up publicstaticfinalintERR_DISTANCE_TOO_LARGE=120;//thedistancebetweentow points is too large public static final int ERR_UP_DOT_PAGE = 121;//the up dot page error 抬笔点 //的页码与上一点的页码不同 public static final int ERR_CONN_CONNECT = 211;//连接异常 public static final int ERR_CONN_USB_GET = 212;//usb 获取连接失败 public static final int ERR_CONN_USB_OPEN = 213;//usb 打开设备失败 八、坐标转换 把接收到的码点坐标转换成App屏幕的像素坐标。 数据接收回调“voidonReceiveDot(NQDotnqDot)”返回的坐标是码点上的坐标,码点坐标的原点(0, 0)在左上角。屏幕像素坐标的原点(0, 0)在左上角。 以下是算法的伪代码: int W2= 屏幕宽度 int H2= 屏幕高度 int x1 = dot.x;//码点纸的x坐标 int y1 = dot.y;//码点纸的y坐标 int x2 =0;//App屏幕点的x坐标 int y2 = 0;//App屏幕点的y坐标 int H1= dot.book_height;//当前码点纸张的宽度 int W1= dot.book_width;//当前码点纸张的高度 int page = dot.page;//当前码点纸张的页码 float xRatio = (float) ((float) (W2) / (float) W1);//计算屏幕宽度相对码点纸 张宽度的比例 float yRatio = (float) ((float) (H2) / (float) H1);//计算屏幕高度相对码点纸 张高度的比例 X2 = (int) ((float) x 1 xRatio);//根据比例把码点的X坐标换算成屏幕X坐标 y2 = (int) ((float) y1 * yRatio);//根据比例把码点的Y坐标换算成屏幕Y坐标 如图:

码点坐标值的计算方法 1、 计算码点有多少个码点单元 码点单元数=码点文件的宽度(毫米)/码点单元(2.032 平方毫米) 2、 码点单元数换算成整数值 如A4 纸宽 210 毫米 码点单元数=210/2.032=103.34 整个 X 或 Y 坐标数据有 12bit整数 8bit、小数 4bit所以 103.34 换算成整数 103 左移 4 位10316+0.3416=1648+5=1653 3、 根据坐标值换算成实际尺寸举例: 坐标值 101先换算成 2 进制1100101低 4 位表示小数值,高 8 位表示整数值,得到码点数是 6.5,而每个码点实际尺寸 2.032 毫米,所以坐标值 101 换算后 6.52.03 毫米=13.195 毫米。 九、常见问题 1、 Sdk 文件提取路径? demo 项目源码的 lib 文件夹 2、 点击搜索 USB 设备返回 110 错误码可能是手机的 OTG 开关没有打开,或者是 USB 线有问题; 一般手机 OTG 打开路径:进入手机设置 -> 更多设置 -> OTG -> 开启 OTG不同手机设置 OTG 开关位置不一样) 3、 书写返回 115 错误码码点解析异常,请检查书写的码点文件是否正确。 4、 蓝牙搜索不到请确认设备的蓝牙和定位是否授权并打开。 5、 正常发送了数据,没有收到数据? 请检查是否 release 后,重新设置了监听。