一、集成SDK二、开放类说明2.0 HYPrinterInterface2.1 HYDataResolveModel2.2 HYCmdGenerator2.3 HYPrinterSDK三、接口列表3.0 读取配置信息3.1 设置配置信息3.2 设置灯光模式3.3 设置声音模式3.4 设置设备震动时长3.5 设置设备关机3.6 设置设备恢复出厂设置3.7 读取设备Mac3.8 读取设备电量3.9 配置设备工作模式3.10 读取设备工作模式3.11 设置设备测试模式3.12 读取设备测试模式3.13 设置设备震动开关3.14 读取设备震动开关3.15 修改设备名称3.16 读取设备名称3.17 配置结尾回车3.18 配置自动连续扫描模式3.19 配置自动连续扫描间隔时间3.20 配置设备的声音状态3.21 配置大小写字母转换3.22 设置暂存功能开关3.23 暂存数据统计3.24 清空暂存数据3.25 上传暂存数据
把压缩包里面的HYPrinterSDK.framework拖进你的项目中
由于SDK是动态库,在TARGETS->General->Frameworks中选择对应的SDK,在Embed中选择Embed&Sign
在Build Settings -> Linking -> Other Linker Flags 选项中添加-ObjC
注释警告解除方法:Build Settings -> Documentations Comments -> 将YES改为NO
类描述
在该类中定义了打印机属性类
HYPrinterMessage
、蓝牙连接协议HYPrinterInterfaceDelegate
、数据发送交互类HYPrinterInterface
,连接和发送数据就需要该类去完成
打印机属性类HYPrinterMessage
定义了蓝牙和设备相关的属性
name : 蓝牙名称
mac : 蓝牙mac地址
identifier:蓝牙唯一标识符
version : 固件版本号
battery : 电量
rssi : 信号强度
distance : 由信号强度换算的距离
peripheral : 外设对象
蓝牙连接协议HYPrinterInterfaceDelegate
定义了一些可选的方法
/// BLE:发现附近蓝牙设备
- (void)HYBleDidDiscoverPrints:(NSArray<HYPrinterMessage *> *)devices;
/// 连接失败
- (void)HYDidConnectFail:(NSError *)error;
/// 连接成功
- (void)HYDidConnectSuccess;
/// 断开连接
- (void)HYDidDisconnect
数据发送类HYPrinterInterface
定义打印机对象属性、是否连接属性、Block属性和蓝牙交互方法
属性
xxxxxxxxxx
@property (nonatomic, weak) id<HYPrinterInterfaceDelegate> delegate;
// 判断是否连接
@property (nonatomic, assign) BOOL isConnected;
// 连接后的打印机对象
@property (nonatomic, strong) HYPrinterMessage *deviceConnected;
@property (nonatomic, copy) HYEmptyParameterBlock sendSuccessBlock;
@property (nonatomic, copy) HYEmptyParameterBlock sendFailBlock;
@property (nonatomic, copy) HYSendProgressBlock sendProgressBlock;
@property (nonatomic, copy) HYReceiveDataBlock receiveDataBlock;
方法
扫描附近设备
这个接口被调用后,如果周围有蓝牙设备,那么
- (void)HYBleDidDiscoverPrints:(NSArray<HYPrinterMessage *> *)devices;
代理方法实现了就会调用
xxxxxxxxxx
- (void)HYScanBluetooth;
停止扫描设备
这个接口被调用后,就算有新的蓝牙设备,那么
- (void)HYBleDidDiscoverPrints:(NSArray<HYPrinterMessage *> *)devices;
代理方法实现了也不会调用
xxxxxxxxxx
- (void)HYStopScanBluetooth;
连接设备
传入的参数是打印机对象,调用后,如果连接失败,那么
- (void)HYDidConnectFail:(NSError *)error;
实现后就会被调用;如果连接成功,那么- (void)HYDidConnectSuccess;实现后
就会被调用
xxxxxxxxxx
- (void)HYConnectPrinter:(HYPrinterMessage *)printer;
断开连接设备
该方法被调用后,代理
- (void)HYDidDisconnect
实现后会被调用
xxxxxxxxxx
- (void)HYDisconnect;
获取手机的蓝牙开关
该接口是获取手机蓝牙的开关情况,返回值是枚举
HYBluetoothState
,,有三种状态,分别是未授权、关闭、打开;当未授权时,需要去对应的APP中开启蓝牙
xxxxxxxxxx
- (HYBluetoothState)HYGetBluetoothStatus;
发送数据给外设
数据发送后,
- (void)HYSendDataProgressCallBack:(HYSendProgressBlock)sendProgressCallBack;
就会被调用;如果发送成功,那么- (void)HYSendDataSuccessCallBack:(HYEmptyParameterBlock)sendSuccessCallBack;
就会被调用;反之,- (void)HYSendDataFailCallBack:(HYEmptyParameterBlock)sendFailCallBack;
会被调用;
xxxxxxxxxx
- (void)sendDataToPeripheral:(NSData *)data;
发送成功后的回调
xxxxxxxxxx
- (void)HYSendDataSuccessCallBack:(HYEmptyParameterBlock)sendSuccessCallBack;
发送数据失败回调
xxxxxxxxxx
- (void)HYSendDataFailCallBack:(HYEmptyParameterBlock)sendFailCallBack;
发送数据进度回调
xxxxxxxxxx
- (void)HYSendDataProgressCallBack:(HYSendProgressBlock)sendProgressCallBack;
接收蓝牙返回数据回调
数据发送成功后,如果有数据返回,那么这个接口就会被调用;
xxxxxxxxxx
- (void)HYReceiveDataCallBack:(HYReceiveDataBlock)receiveDataCallBack;
获取SDK版本号
xxxxxxxxxx
- (NSString *)HYGetFrameworkVersion;
获取SDK打包时间
xxxxxxxxxx
- (NSString *)HYGetFrameworkBuildTime;
描述
该类定义了指令类型的枚举(解析数据使用)、解析模型、配置信息模型(配置信息指令中使用)
枚举
xtypedef NS_ENUM(Byte, HYProtocolStatus) {
//成功
HYProtocolStatusSuccess = 0,
//失败
HYProtocolStatusFail
};
/// 这个枚举用作解析数据模型使用
typedef NS_ENUM(uint8_t, PHYCmdType) {
PHYCmdReadInfo = 0x81, //读取设备信息测试
PHYCmdSetInfo = 0x82, //设备信息测试
PHYCmdSetLight = 0x83, //指示灯测试
PHYCmdSetVoice = 0x84, //蜂鸣器测试
PHYCmdSetVibrationTime = 0x85, //震动时长测试
PHYCmdSetShutdown = 0x86, //设备关机测试
PHYCmdResetFactory = 0x87, //恢复出厂设置
PHYCmdReadMac = 0x88, //读取mac地址
PHYCmdReadBattery = 0x89, //读取设备电量
PHYCmdSetTemporaryState = 0x91, //暂存开关
PHYCmdReadTemporaryStatistical = 0x92, //暂存数据统计
PHYCmdDeleteTemporaryData = 0x93, //删除暂存数据
PHYCmdUploadTemporaryData = 0x94, //上传暂存数据
PHYCmdSetWorkMode = 0xB1, //设置工作模式
PHYCmdReadWorkMode = 0xB2,
PHYCmdSetTestMode = 0xB3, //设置测试模式
PHYCmdReadTestMode = 0xB4,
PHYCmdSetVibrationState = 0xB5, //设置震动开关
PHYCmdReadVibrationState = 0xB6,
PHYCmdSetDeviceName = 0xB7, //设置设备名称
PHYCmdReadDeviceName = 0xB8,
PHYCmdSetTailed = 0xB9, //设置结尾回车
PHYCmdSetAutomacticScanMode = 0xBA, //设置自动连续扫描模式
PHYCmdSetVoiceState = 0xBB, //设置声音开关
PHYCmdSetConvstr = 0xBC, //设置字母大小写转换
PHYCmdSetAutomacticScanInterval = 0xBD, //设置自动连续间隔时间
PHYCmdReadScanData = 0xC1, //显示扫描数据
};
解析模型HYDataResolveModel
当接收到蓝牙数据返回后,通过
HYCmdGenerator
中的+ (HYDataResolveModel *_Nullable)resolveData:(NSData *)data;
方法得到该模型,其中type
属性就是区别功能的,content
是有效的字节数据,具体的解析查看Demo
xxxxxxxxxx
//指令标志
@property (nonatomic, assign) PHYCmdType type;
//有效数据内容
@property (nonatomic, strong) NSData *content;
配置信息模型HYDeviceConfigInfo
该模型是读取配置信息和设置配置信息时使用,当读取时,通过
HYCmdGenerator
中的+ (HYDeviceConfigInfo *_Nullable)resolveInfoData:(NSData *)data;
解析得到;当设置配置信息时,传输的参数就是该模型对象
xxxxxxxxxx
/// @param longDropTime 长鸣时长,(3~30),单位0.1s,默认值:5
/// @param shortDropTime 短鸣时长,(1~5),单位0.1s,默认值:1
/// @param shortDropIntv 短鸣间隔时长,(1~5),单位0.1s,默认值:2
/// @param shortDropNum 短鸣次数,(1~10),默认值:1
/// @param vibrationTime 震动时长,(3~30),单位0.1s,默认值:5
/// @param tailed 结尾回车,0:不添加回车,1:添加回车 默认值:1
/// @param convstr 大小写字母转换,(0~2),0:所有字母保持原样,1:小写,2:大写,默认值:0
/// @param volume 声音大小,(1~255),默认值:50
/// @param vibrationVol 暂时保留,50
/// @param sleepTime 无按键关闭扫描头时间,取值范围 3-60 秒(默认值=10 秒)
/// @param shutdownTime 无按键自动关机时间,取值范围 3-60 分钟(默认值=10 分 钟)
/// @param scanMode 自动连续扫描模式, 0:关闭自动模式,1:开启,默认是开启
/// @param isVox 声音,默认开启
/// @param isVibrate 震动,默认是关闭
/// @param scanIntvTime 连续扫描间隔时间(100-5000),单位ms 默认500ms
描述
该类是解析数据和获取下发数据,接口详情看下面
描述
该类是导入开放类头文件,导入SDK后,只需要将该类导入就能使用SDK的开放类了
描述
xxxxxxxxxx
读取设备配置信息;数据发送后,通过HYPrinterInterface类中的- (void)HYReceiveDataCallBack:(HYReceiveDataBlock)receiveDataCallBack方法得到蓝牙返回数据,将返回数据通过+ (HYDeviceConfigInfo *_Nullable)resolveInfoData:(NSData *)data方法解析得到配置模型
接口
xxxxxxxxxx
+ (NSData *)readDeviceConfigInfo;
代码
xxxxxxxxxx
let info = HYCmdGenerator.readDeviceConfigInfo()
HYPrinterInterface.shared()?.sendData(toPeripheral: info)
HYPrinterInterface.shared()?.hyReceiveDataCallBack({[weak self] (data) in
guard let self = self else { return }
guard let data = data else { return }
if let model = HYCmdGenerator.resolveInfoData(data) {
self.infoModel = model
}
self.tableView.reloadData()
})
HYPrinterInterface.shared()?.hySendDataFailCallBack({
SVProgressHUD.showError(withStatus: "Data send failed".localized)
})
HYPrinterInterface.shared()?.hySendDataSuccessCallBack(nil)
HYPrinterInterface.shared()?.hySendDataProgressCallBack(nil)
描述
xxxxxxxxxx
设置配置信息,参数是传入配置模型
接口
xxxxxxxxxx
/// 配置信息
/// @param info 信息模型
+ (NSData *)configDeviceInfoModel:(HYDeviceConfigInfo *)info;
代码
xxxxxxxxxx
let data = HYCmdGenerator.configDeviceInfoModel(infoModel)
HYPrinterInterface.shared()?.sendData(toPeripheral: data)
HYPrinterInterface.shared()?.hyReceiveDataCallBack({[weak self] (data) in
guard let self = self else { return }
guard let data = data else { return }
if let model = HYCmdGenerator.resolve(data) {
if model.type == .setInfo {
if model.content[0] == HYProtocolStatus.success.rawValue {
self.bk_presentWarningAlertController(title: "Setup succeeded".localized, message: "", style: .default)
}else {
self.bk_presentWarningAlertController(title: "Setup failed".localized, message: "", style: .default)
}
}
}
})
HYPrinterInterface.shared()?.hySendDataFailCallBack({
SVProgressHUD.showError(withStatus: "Data send failed".localized)
})
HYPrinterInterface.shared()?.hySendDataSuccessCallBack(nil)
HYPrinterInterface.shared()?.hySendDataProgressCallBack(nil)
描述
xxxxxxxxxx
设置灯光模式,参数范围是1~3,1表示常亮, 2表示闪烁, 3表示长灭; 数据发送后,通过HYPrinterInterface类中的- (void)HYReceiveDataCallBack:(HYReceiveDataBlock)receiveDataCallBack方法得到蓝牙返回数据,将返回数据通过+ (HYDataResolveModel *_Nullable)resolveData:(NSData *)data方法解析得到解析模型,通过该模型中的type字段判断当前设置的功能,content是有效字节数据,以下的接口都是按照这种方式,具体的解析查看Demo
接口
xxxxxxxxxx
/// 设置灯光模式
/// @param mode 1~3,1:长亮 2:闪烁 3:长灭
+ (NSData *)setDeviceLightWithMode:(NSInteger)mode;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
设置声音模式
接口
xxxxxxxxxx
/// 设置声音模式
/// @param mode 1~2, 1:长滴 2:短滴
/// @param dropNumber 次数, 1~10
+ (NSData *)setDeviceVoiceWithMode:(NSInteger)mode dropNumber:(NSInteger)dropNumber;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
设置设备震动时长
接口
xxxxxxxxxx
/// 设置设备震动时长
/// @param time 震动时长,1~30,单位0.1s
+ (NSData *)setDeviceVibrationWithTime:(NSInteger)time;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
设置设备关机
接口
xxxxxxxxxx
+ (NSData *)setDeviceShutdown;
Content解析
xxxxxxxxxx
返回一个字节数据 0x01表示1秒内关闭设备电源
描述
xxxxxxxxxx
设置设备恢复出厂设置
接口
xxxxxxxxxx
+ (NSData *)setDeviceToRestoreFactorySettings;
Content解析
xxxxxxxxxx
返回一个字节数据 0x01表示已恢复出厂设置
描述
xxxxxxxxxx
读取设备Mac地址
接口
xxxxxxxxxx
+ (NSData *)readDeviceMac;
Content解析
xxxxxxxxxx
返回6个字节数据,将每个字节数据用:分割就是mac地址
描述
xxxxxxxxxx
读取设备电量
接口
xxxxxxxxxx
+ (NSData *)readDeviceBattery;
Content解析
xxxxxxxxxx
返回3个字节数据,前面2个字节表示电压,高位在前;第三个字节表示电量
描述
xxxxxxxxxx
配置设备工作模式
接口
xxxxxxxxxx
/// 配置设备工作模式
/// @param mode 1:GATT透传 2:HID
+ (NSData *)configDeviceWorkingMode:(NSInteger)mode;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
读取设备工作模式
接口
xxxxxxxxxx
+ (NSData *)readDeviceWorkingMode;
Content解析
xxxxxxxxxx
返回一个字节数据,0x01表示GATT,0x02表示HID
描述
xxxxxxxxxx
设置设备测试模式
接口
xxxxxxxxxx
/// 设置设备测试模式
/// @param mode 0:测试模式关闭,1:开启
+ (NSData *)setDeviceTestMode:(NSInteger)mode;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
读取设备测试模式
接口
xxxxxxxxxx
+ (NSData *)readDeviceTestMode;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示关闭,0x01表示开启
描述
xxxxxxxxxx
设置设备震动开关
接口
xxxxxxxxxx
/// 设置设备震动开关
/// @param state 0:关闭震动 1:开启震动
+ (NSData *)setDeviceVibrationWithState:(NSInteger)state;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
读取设备震动开关
接口
xxxxxxxxxx
+ (NSData *)readDeviceVibrationMode;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示关闭,0x01表示开启
描述
xxxxxxxxxx
修改设备名称,参数长度12字节以内,且只能英文、数字或者空格
接口
xxxxxxxxxx
/// 修改设备名称
/// @param deviceName 设备名,长度12字节以内,且只能英文、数字或者空格,默认值:HPRT SCANER
+ (NSData *)resetDeviceName:(NSString *)deviceName;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
读取设备名称
接口
xxxxxxxxxx
+ (NSData *)readDeviceName;
Content解析
xxxxxxxxxx
将数据用ascii解析即可
描述
xxxxxxxxxx
配置结尾回车
接口
xxxxxxxxxx
/// 配置结尾回车
/// @param tailed 0:不添加回车 1:添加回车
+ (NSData *)configDeviceTailed:(NSInteger)tailed;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
配置自动连续扫描模式
接口
xxxxxxxxxx
/// 配置自动连续扫描模式
/// @param mode 0:关闭自动连续扫描模式,1:开启自动扫描模式
+ (NSData *)configDeviceAutomaticScanMode:(NSInteger)mode;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
配置自动连续扫描间隔时间
接口
xxxxxxxxxx
/// 配置自动连续扫描间隔时间
/// @param interval 间隔时间 100-5000,单位ms
+ (NSData *)configDeviceAutomaticScanInterval:(NSInteger)interval;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
配置设备的声音状态
接口
xxxxxxxxxx
/// 配置设备的声音状态
/// @param state 0:关闭声音 1:开启声音
+ (NSData *)configDeviceVoiceWithState:(NSInteger)state;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
配置大小写字母转换
接口
xxxxxxxxxx
/// 配置大小写字母转换
/// @param mode 0:所有字母保持原样 1:小写 2:大写
+ (NSData *)configDeviceConversionWithMode:(NSInteger)mode;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
设置暂存功能开关
接口
xxxxxxxxxx
/// 设置暂存功能开关
/// @param state 0:关闭暂存功能,启用实时上传, 1:开启暂存功能,默认值:0
+ (NSData *)setDeviceTemporaryFunctionWithState:(NSInteger)state;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
暂存数据统计,该接口可获取已经暂存的条数和剩余暂存的条数,也可获取暂存功能是否开启
接口
xxxxxxxxxx
+ (NSData *)readDeviceTemporaryDataQuantity;
Content解析
xxxxxxxxxx
返回5个字节数据,第1、2个字节表示已经暂存的条数(高位在前),第3、4个字节表示已经暂存的条数(高位在前),最后一个字节如果是0x00表示暂存功能关闭,0x01表示开启
描述
xxxxxxxxxx
清空暂存数据
接口
xxxxxxxxxx
+ (NSData *)removeDeviceTemporaryData;
Content解析
xxxxxxxxxx
返回一个字节数据,0x00表示成功,0x01表示失败
描述
xxxxxxxxxx
上传暂存数据,当第一个参数为0,第二个参数是255时,表示获取所有的暂存条数
接口
xxxxxxxxxx
/// 上传暂存数据
/// @param startNum 起始条数,表示从第几条开始读取
/// @param totalNum 读取的条数,1-254表示读取的条数,255表示读取的总条数
+ (NSData *)uploadDeviceTemporaryDataWithStartNum:(NSInteger)startNum totalNum:(NSInteger)totalNum;
Content解析
xxxxxxxxxx
从第2个字节开始将数据用ascii解析,第一个字节表示是否后续是否有暂存数据