-
包头
USB
命令总长度
< 1921e <1 byte 命令总长度> [命令...]
命令总长度
>= 1921e <2 bytes 命令总长度> [命令...]
破案了, 固件没有清零 USB 发送缓冲区, 所以会读到脏数据...
-
包头
BLE
[命令...]
-
命令
USB && BLE
命令按照顺序依次打包/解析
数据长度
< 192<1 byte 命令组> <1 byte 命令类型> <1 byte 数据长度> [数据...] [1 byte 校验和 初始=0]
数据长度
>= 192<1 byte 命令组> <1 byte 命令类型> <2 bytes 数据长度> [数据...] [1 byte 校验和 初始=0]
- 校验和
- 如果未启用校验, 则为
0x88
- 否则使用这个函数计算
命令[1..命令长度]
的校验和
- 如果未启用校验, 则为
-
0x2_
打印命令 (特殊命令)0x20
未知打印命令0x21
未知打印命令0x22
未知打印命令0x23
(X)0x24
(0x1f 0x24 0x00 cksum 打印机进纸后, 打印一行空白内容后出纸)0x25
(X)0x26
(X)0x27
打印标签宽度 待测试0x28
(0x1f 0x28 0x00 cksum 打印机进纸后, 打印一行空白内容后出纸)0x29
未知打印命令0x2a
打印 N 点的一行0x2b
打印有前导空白的一行0x2c
未知打印命令0x2d
未知打印命令0x2e
重复行0x2f
(X)
-
0x3_
0x30
(X)0x31
(X)0x32
(X)0x33
(X)0x34
(X)0x35
(X)0x36
(X)0x37
(X)0x38
(X)0x39
(X)0x3a
(X)0x3b
(X)0x3c
(X)0x3d
未知打印命令0x3e
(X)0x3f
(X)
-
0x4_
打印设置0x40
(X)0x41
(X)0x42
打印纸类型0x43
打印浓度0x44
打印速度0x45
打印纸间隔0x46
(X)0x47
# TODO 电机模式0x48
# TODO 自动关机时间(分钟)0x49
# TODO0x4a
(X)0x4b
(X)0x4c
(X)0x4d
# TODO0x4e
(X)0x4f
(X)
-
0x5_
0x50
(X)0x51
(X)0x52
# TODO 支持的纸张类型0x53
(X)0x54
(X)0x55
(X)0x56
(X)0x57
# TODO 支持的电机模式0x58
(X)0x59
# TODO 支持的语言0x5a
(X)0x5b
# TODO0x5c
(X)0x5d
(X)0x5e
(X)0x5f
(X)
-
0x7_
设备信息0x70
# TODO 打印机状态0x71
# TODO DPI0x72
# TODO 打印宽度, 出纸宽度0x73
# TODO 打印统计0x74
(X)0x75
制造商0x76
(X)0x77
# TODO0x78
# FIXME0x79
设备名0x7a
# TODO 硬件版本0x7b
# TODO0x7c
软件版本0x7d
# TODO 蓝牙mac地址0x7e
# TODO 打印机会重启0x7f
# TODO
-
0x52
# TODO SupportedGapTypes 支持的纸张类型02, 03, 04, 00
-
0x57
# TODO SupportedMotorModes 支持的电机模式0c
-
0x59
# TODO SupportedLanguages 支持的语言61, 01
-
0x5b
# TODO00, 00
-
连接方式 也许是打印机类型 (# FIXME 任何参数都返回
0x02 0x43
)主机->设备
0x78
- 参数
BLE
[0]
0x06
(i8)
- 参数
USB
[0]
0x10
(i8)
- 参数
-
0x70
# TODO 打印机状态00, 01, 02, 00, 00, 35, 01, 10
-
0x73
# TODO 打印统计00, 01, b6, 4b, 00, 01, 76, ce, 00, 00, 71, 58, 00, 00, 00, de
- workLines
- printLines
- nullLines
- printPages
-
0x77
# TODO32, 00, 00, 00, 00, 88, 00
32, 04, 00, 00, 20, 88, 00
- 0x32 = 0b00110010
-
0x7a
# TODO 硬件版本0x26, 0x01, 0x04, 0x01, 0x04
-
0x7d
# TODO 蓝牙mac地址10, 60, 6e, 41, 37, c4, 37, 14, 60, 6e, 41, 37, c4, 37
60:6e:41:37:c4:37
-
0x71
# TODO DPI (300)01, 2c
-
0x72
# TODO (0x0240=打印宽度576px, 0x023a=出纸宽度57.0mm)02, 40, 02, 3a, 00, 00, 00, 00, 00
-
0x7b
# TODO32
-
0x7e
# TODO 打印机会重启 -
0x7f
# TODO00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
- (# FIXME)
主机->设备
0x84
- 无参数
byte[] byteArray = dataPackage.toByteArray(); // 0x84
if (byteArray.length >= 25) {
this.printer_param_2.batteryCount = byteArray[23] & 255;
} else {
this.printer_param_2.batteryCount = 2;
}
this.printer_param_2.hardwareFlags = dataPackageReader.readInt();
if (dataPackageReader.getRemainingLength() >= 4) {
this.printer_param_2.softwareFlags = dataPackageReader.readInt();
} else {
this.printer_param_2.softwareFlags = 1 | (this.printer_param_2.hardwareFlags & 16);
}
- (# FIXME) 读取 peripheralFlags
主机->设备
0x83
- 无参数
- (# FIXME) peripheralFlags
设备->主机
0x83
- 如果数据长度 > 1 且
[0]
=0x01
:[1]
peripheralFlags
- 否则
[0]
peripheralFlags
- 如果数据长度 > 1 且
- (# FIXME) 读取打印头温度/电池电压和充电状态
主机->设备
0x88
- 参数 读取打印头温度
[0]
0x01
- 参数 读取电池电压和充电状态
[0]
0x02
- 参数 读取打印头温度
- (# FIXME) 打印头温度
设备->主机
0x88
[0]
0x01
[2:1]
((short) (((short) (((short) (0 | (readBytes[1] & 255))) << 8)) | (readBytes[2] & 255))) * 0.1d
- (# FIXME) 电池电压和充电状态
设备->主机
0x88
[0]
0x02
[1..]
if (readBytes.length > 10) { this.printer_param_2.chargeStatus = readBytes[10] & 255; } if (readBytes.length > 8) { this.printer_param_2.batteryVoltage = (((readBytes[7] & 255) << 8) + (readBytes[8] & 255)) * 0.01d; }
- (# FIXME)
主机->设备
0x9e
- (# FIXME)
主机->设备
0x9f
- 参数 读取芯片ID
[0]
0x0a
- 参数 读取生产日期
[0]
0x11
- 参数 读取升级CRC
[0]
0x29
- 参数 读取 stackHead, stackTail, heapHead, heapTail, maxStack, heapUnused, heapMinUnused
[0]
0x61
需要进一步确定
- 参数 读取芯片ID
- (# FIXME)
主机->设备
0x80
- 发送
> 0x80
的命令前, 需要发送这个命令 - 参数
[0]
0x7f
- 发送
- (# FIXME)
设备->主机
0x80
[0]
0x7f
- (已验证) 读取设备名
主机->设备
0x79
- 无参数
- (已验证) 设备名
设备->主机
0x79
[..]
以0x00
结尾的设备名型号-序列号
(str)
- (已验证) 读取软件版本
主机->设备
0x7c
- 无参数
- (已验证) 软件版本
设备->主机
0x7c
[..]
以0x00
结尾的软件版本x.y yyyymmdd
- (已验证) 读取制造商
主机->设备
0x75
- 无参数
- (已验证) 制造商
设备->主机
0x75
[..]
以0x00
结尾的制造商名(str)
gbk
/gb2312
编码
- 读取信息
主机->设备
0x75
- (已验证) 无参数 制造商
- 参数 系列 # FIXME
[0]
0x53
- 参数 内部型号 # FIXME
[0]
0x44
- (已验证) 制造商
设备->主机
0x75
[..]
以0x00
结尾的制造商名(str)
gbk
/gb2312
编码
- 系列
设备->主机
0x75
# FIXME[..]
以0x00
结尾的系列名(str)
- 内部型号
设备->主机
0x75
# FIXME[..]
以0x00
结尾的内部型号名(str)
- (已验证) 设置打印浓度
主机->设备
0x43
- 参数
[0]
要设置的浓度值(i8)
0x00
最淡 1- ...
0x03
较淡 4- ...
0x05
正常 6- ...
0x09
较浓 10- ...
0x0e
最浓 15
- 参数
- (已验证) 读取打印浓度
主机->设备
0x43
- 无参数
- (已验证) 打印浓度
设备->主机
0x43
[0]
打印浓度0x00
最淡 1- ...
0x03
较淡 4- ...
0x05
正常 6- ...
0x09
较浓 10- ...
0x0e
最浓 15
- (已验证) 设置打印速度
主机->设备
0x44
- 参数
[0]
要设置的打印速度值(i8)
0x00
最慢 10x01
较慢 20x02
正常 30x03
较快 40x04
最快 5
- 参数
- (已验证) 读取打印速度
主机->设备
0x44
- 无参数
- (已验证) 打印速度
设备->主机
0x44
[0]
打印速度0x00
最慢 10x01
较慢 20x02
正常 30x03
较快 40x04
最快 5
- (已验证) 设置打印纸类型
主机->设备
0x42
- 参数
[0]
要设置的打印纸类型(i8)
0x00
Ticket 小票纸0x02
Adhesive 不干胶0x03
CardPaper 卡纸0x04
Transparent 透明贴
- 参数
- (已验证) 读取打印纸类型
主机->设备
0x42
- 无参数
- (已验证) 打印纸类型
设备->主机
0x42
[0]
0x00
Ticket 小票纸0x02
Adhesive 不干胶0x03
CardPaper 卡纸0x04
Transparent 透明贴
- (已验证) 设置打印纸间隔
主机->设备
0x45
- 参数
[0]
/[1:0]
/[2:0]
要设置的打印纸间隔(0.01 mm)- 最小值 50 (0.5 mm)
- 参数
- (已验证) 读取打印纸间隔
主机->设备
0x45
- 无参数
- (已验证) 打印纸间隔
设备->主机
0x45
[0]
/[1:0]
/[2:0]
打印纸间隔(0.01 mm)
- 设置打印标签宽度
主机->设备
0x27
- 参数
[0]
要设置的打印标签宽度 (打印点数+7)/8设置打印标签的宽度, 取值为 (打印点数+7)/8。因为打印机打印分辨率为 8 个 点每毫米, 因此取值其实为打印标签的宽度毫米数。 DT20 和 DP20 系列打印机的有效打印最大宽度均为 48 毫米。
- 参数
-
电机模式
主机->设备
0x47
- 参数
[0]
未知(i8)
# TODO00
- 参数
-
0x48
# TODO 自动关机时间(分钟)00
-
0x49
# TODO61, 61, 10
-
0x4d
# TODO01, 02, 04, 00
-
0x1b 0x40
初始化打印参数初始化打印参数到默认值, 开始打印一张标签的第一个命令。
-
0x1b 0x4a n
走 N(0~255) 个空行 -
0x1f 0x2a nL nH [...]
打印 N 打印 N 点的一行,[...]
为需要打印的数据, 其字节数为(n+7)/ 8。nL nH 是用两个字节表示的点数, 低字节在前, 高字节在后。 打印数据按照从左到右的顺序排列, 一个比特位表示一个打印点, 比特位 1 表示需 要打印的点, 0 表示不需要打印的点, 靠左的点在一个字节的较高位。 如果指定的点数超过了标签的宽度, 则超出的打印内容将被忽略;如果指定的点数 不足标签的宽度, 则默认缺少的数据为 0, 即为不需要打印的内容。
-
0x1f 0x2b m n [...]
打印有前导空白的一行打印有前导空白的一行, m 为前导零的字节数(0 ~ 191), n 为打印数据的字节数 (0 ~ 191),
[...]
为需要打印的数据, 其字节数由 n 指定。 打印数据按照从左到右的顺序排列, 一个比特位表示一个打印点, 比特位 1 表示需 要打印的点, 0 表示不需要打印的点, 靠左的点在一个字节的较高位。 如果指定的前导零点数(m * 8) 加打印数据点数 (n * 8)超过了标签的宽度, 则超 出的打印内容将被忽略;如果指定的点数不足标签的宽度, 则默认缺少的数据为 0, 即 为不需要打印的内容。 本打印命令为 1F 2A 打印命令的数据压缩型命令, 对于一行打印数据有较多前导空 白(前导零, 即无需打印内容)的情况, 使用本命令能有效地压缩打印数据量。 -
0x1f 0x2e n
重复行打印和上一行一样内容的重复行。N 为重复行数-1, 比方说重复行数为 2, 则 N 的 取值为 1; 重复行数为 192, 则 N 的取值为 191, 类推。 注意: N 的取值要小于 192, 如果重复行数大于 192, 则需要拆分成多条打印重复 行命令。比方说如果实际重复行数为 256, 则需要拆分成下面两条打印重复行命令: 1F 2E BF 1F 2E 3F
-
0x0c
定位到下一纸张边界定位到下一张标签的边界, 结束一张标签的打印。