From 05ac0641d0de54191adbf1de6fb710307130543b Mon Sep 17 00:00:00 2001 From: starry_lixu <2495646304@qq.com> Date: Mon, 14 Aug 2023 22:42:23 +0800 Subject: [PATCH] readme --- README | 281 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 README diff --git a/README b/README new file mode 100644 index 0000000..d1844f7 --- /dev/null +++ b/README @@ -0,0 +1,281 @@ +智能笔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 位(103*16)+0.34*16=1648+5=1653 +3、 根据坐标值换算成实际尺寸举例: +坐标值 101,先换算成 2 进制,1100101,低 4 位表示小数值,高 8 位表示整数值,得到码点数是 6.5,而每个码点实际尺寸 2.032 毫米,所以坐标值 101 换算后 6.5*2.03 毫米=13.195 毫米。 +九、常见问题 +1、 Sdk 文件提取路径? +demo 项目源码的 lib 文件夹 +2、 点击搜索 USB 设备返回 110 错误码可能是手机的 OTG 开关没有打开,或者是 USB 线有问题; +一般手机 OTG 打开路径:进入手机设置 -> 更多设置 -> OTG -> 开启 OTG(不同手机设置 +OTG 开关位置不一样) +3、 书写返回 115 错误码码点解析异常,请检查书写的码点文件是否正确。 +4、 蓝牙搜索不到请确认设备的蓝牙和定位是否授权并打开。 +5、 正常发送了数据,没有收到数据? +请检查是否 release 后,重新设置了监听。