通过BluetoothSocket进行ESC/POS通信的问题

问题描述 投票:0回答:1

我正在尝试通过蓝牙使用 ESC/POS 设置通信。我正确获取蓝牙热敏打印机,并且插座指示已连接。

但是,当我传递以下命令(只是想喂食)时,什么也没有发生。事实上,我尝试发送的任何命令都没有任何反应。

    private fun getDeviceByAddress(address: String): BluetoothDevice? {
        return bluetoothManager.adapter.bondedDevices.find { it.address == address }
    }

    suspend fun feed(printer: Printer, lines: Int = 1) {
        getDeviceByAddress(printer.address)?.let { device ->
            device.createRfcommSocketToServiceRecord(SPP_UUID)
                .let { socket ->
                    try {
                        socket.connect()
                        socket.outputStream.write(byteArrayOf(0x1B, 0x40))
                        socket.outputStream.write(byteArrayOf(0x1B, 0x64, lines.toByte()))
                        socket.outputStream.flush()
                    } catch (e: Exception) {
                        e.printStackTrace()
                    } finally {
                        withTimeout(100) {
                            socket.close()
                        }
                    }
                }
        }
    }

可能出了什么问题?我也不知道如何验证字节是否已写入打印机。

(我知道有一个针对该特定品牌的 SDK,但我正在尝试严格通过 ESC/POS 执行此操作)

android kotlin bluetooth thermal-printer escpos
1个回答
0
投票

根据你在问题中所写的内容,操作可能与你提供的源代码一致。

连接后发送的第一个 ESC@(=0x1B, 0x40) 会重置打印机,因此之前发送的所有数据都将被清除。

下一个 ESCd(=0x1B, 0x64,lines.toByte()) 命令然后将指定的行数送入纸张。

如果您想使用问题中提供的 feed() 函数打印之前发送到打印机的数据然后送纸,则不应发送 ESC@

© www.soinside.com 2019 - 2024. All rights reserved.