无法从 Linux 系统连接 BLE 打印机,原因为 0x13

无法从 Linux 系统连接 BLE 打印机,原因为 0x13

我正在开发嵌入式Linux系统(5.10.24),系统中有WIFI+BT控制器。

我已经在系统中构建并安装了 Bluez5-5.54,我想连接 BLE 打印机来测试 BLE 连接。

bluetoothctl可以运行power onscan onscan off、 命令来获取打印机的 MAC 地址,然后我尝试pairconnect,两个命令都失败了。

内核登录加载驱动程序,

[   70.181414] ---Forced switching Host mode!
[   70.910063] usb 1-1: new high-speed USB device number 2 using dwc2
[   71.160557] usb 1-1: New USB device found, idVendor=0bda, idProduct=d723, bcdDevice= 2.00
[   71.169025] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[   71.176450] usb 1-1: Product: 802.11n WLAN Adapter
[   71.181429] usb 1-1: Manufacturer: Realtek
[   71.185681] usb 1-1: SerialNumber: 00e04c000001
[   71.191108] rtk_btusb: btusb_probe intf->cur_altsetting->desc.bInterfaceNumber 0
[   71.198765] rtk_btusb: btusb_probe can_wakeup 1, may wakeup 0
[   71.204738] rtk_btusb: patch_add
[   71.208072] rtk_btusb: auto suspend is disabled
[   71.212790] rtk_btusb: pid = 0xd723
[   71.216398] rtk_btusb: patch_add: Reset gEVersion to 0xff
[   71.222029] rtk_btusb: set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
[   71.229240] rtk_btusb: btusb_probe: done
[   71.233653] rtk_btusb: btusb_open start
[   71.237630] rtk_btusb: btusb_open hdev->promisc ==0
[   71.242731] rtk_btusb: download_patch start
[   71.247057] rtk_btusb: chip type value: 0x71
[   71.251506] rtk_btusb: HCI reset.
[   71.264497] rtk_btusb: read_ver_rsp->lmp_subver = 0x8723
[   71.270004] rtk_btusb: read_ver_rsp->hci_rev = 0xd
[   71.274998] rtk_btusb: patch_entry->lmp_sub = 0x8723
[   71.280173] rtk_btusb: load_firmware start
[   71.284411] rtk_btusb: lmp_version = 0x8723
[   71.288732] rtk_btusb: config filename rtl8723du_config
[   71.295693] rtk_btusb: no bdaddr file /opt/bdaddr
[   71.300582] rtk_btusb: Origin cfg len 22
[   71.304643] rtk_btusb: 55 ab 23 87 10 00 d9 00 01 0f e4 00 01 08 8d 00
[   71.311462] rtk_btusb: 01 fa 8f 00 01 bf
[   71.315542] rtk_btusb: New cfg len 22
[   71.319350] rtk_btusb: 55 ab 23 87 10 00 d9 00 01 0f e4 00 01 08 8d 00
[   71.326207] rtk_btusb: 01 fa 8f 00 01 bf
[   71.330314] rtk_btusb: fw name is  rtl8723du_fw
[   71.341712] rtk_btusb: This is not 8723a, use new patch style!
[   71.347755] rtk_btusb: rtk_get_eversion: gEVersion 255
[   71.354513] rtk_btusb: eversion->status = 0x0, eversion->version = 0x2
[   71.361309] rtk_btusb: load_firmware: New gEVersion 2
[   71.366540] rtk_btusb: rtk_get_fw_project_id: opcode 0, len 1, data 9
[   71.373268] rtk_btusb: lmp_version is 8723, project_id is 8723, match!
[   71.380049] rtk_btusb: fw_version = 0x82a82df4
[   71.384644] rtk_btusb: number_of_total_patch = 3
[   71.389411] rtk_btusb: chipID 3
[   71.392687] rtk_btusb: patch_length 0x7e6c
[   71.396927] rtk_btusb: start_offset 0x00004940
[   71.401554] rtk_btusb: Svn version:    24645
[   71.405972] rtk_btusb: Coexistence: BTCOEX_20210106-3b3b
[   71.411500] rtk_btusb: buf_len = 0x7e82
[   71.415513] rtk_btusb: fw: exists, config file: exists
[   71.420861] rtk_btusb: load_firmware done
[   71.425022] rtk_btusb: download_data start
[   71.540411] dwc2 13500000.otg: dwc2_hc_chhltd_intr_dma: Channel 1 - ChHltd set, but reason is unknown
[   71.549945] dwc2 13500000.otg: hcint 0x00000002, intsts 0x06000029
[   71.556338] dwc2 13500000.otg: dwc2_update_urb_state_abn(): trimming xfer length
[   71.564078] ====>_BlockWrite 81 i:0
[   71.567746] ====>_WriteFW 160
[   71.571909] dwc2 13500000.otg: dwc2_hc_chhltd_intr_dma: Channel 2 - ChHltd set, but reason is unknown
[   71.581451] dwc2 13500000.otg: hcint 0x00000002, intsts 0x04000029
[   71.587833] dwc2 13500000.otg: dwc2_update_urb_state_abn(): trimming xfer length
[   71.595582] ====>_BlockWrite 81 i:4
[   71.599256] ====>_WriteFW 160
[   71.745490] rtk_btusb: download_data done
[   71.749663] rtk_btusb: HCI reset.
[   71.762479] rtk_btusb: read_ver_rsp->lmp_subver = 0x2df4
[   71.767971] rtk_btusb: read_ver_rsp->hci_rev = 0x82a8
[   71.773226] rtk_btusb: patch_entry->lmp_sub = 0x8723
[   71.778359] rtk_btusb: Rtk patch end 0
[   71.782384] rtk_btusb: btusb_open set HCI_RUNNING
[   71.787283] rtk_btcoex: Open BTCOEX
[   71.790922] rtk_btusb: btusb_open end
[   71.797497] rtk_btcoex: BTCOEX hci_rev 0x82a8
[   71.802187] rtk_btcoex: BTCOEX lmp_subver 0x2df4
[   71.822523] rtk_btusb: btusb_notify: hci0 evt 3
[   73.920072] rtk_btusb: btusb_flush add delay
[   73.934988] rtk_btusb: btusb_close
[   73.948960] rtk_btcoex: Close BTCOEX
[   73.952693] rtk_btcoex: -x
.....

这是bluetoothctl我得到的日志:

[bluetooth]# show
Controller YY:YY:YY:3B:F6:7B (public)
        Name: BlueZ 5.54
        Alias: BlueZ 5.54
        Class: 0x00000000
        Powered: no
        Discoverable: no
        DiscoverableTimeout: 0x000000b4
        Pairable: yes
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d0536
        Discovering: no
Advertising Features:
        ActiveInstances: 0x00
        SupportedInstances: 0x05
        SupportedIncludes: tx-power
        SupportedIncludes: appearance
        SupportedIncludes: local-name

[bluetooth]# info xx:xx:xx:05:BF:6C
Device xx:xx:xx:05:BF:6C (public)
        Name: printer-bf6c
        Alias: printer-bf6c
        Class: 0x00040680
        Icon: printer
        Paired: no
        Trusted: no
        Blocked: no
        Connected: no
        LegacyPairing: no
        UUID: Vendor specific           (ffcacade-afde-cade-defa-cade00000000)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: L2CAP                     (00000100-0000-1000-8000-00805f9b34fb)
        UUID: SDP                       (00000001-0000-1000-8000-00805f9b34fb)
        UUID: Serial Port               (00001101-0000-1000-8000-00805f9b34fb)
        UUID: RFCOMM                    (00000003-0000-1000-8000-00805f9b34fb)
        ManufacturerData Key: 0x0000
        ManufacturerData Value:
  xx xx xx 05 bf 6c                                ..z..l

[bluetooth]# connect xx:xx:xx:05:BF:6C
Attempting to connect to xx:xx:xx:05:BF:6C
[CHG] Device xx:xx:xx:05:BF:6C Connected: yes
[CHG] Device xx:xx:xx:05:BF:6C ServicesResolved: yes
Failed to connect: org.bluez.Error.NotAvailable
[CHG] Device xx:xx:xx:05:BF:6C ServicesResolved: no
[CHG] Device xx:xx:xx:05:BF:6C Connected: no


Device xx:xx:xx:05:BF:6C (public)
        Name: printer-bf6c
        Alias: printer-bf6c
        Class: 0x00040680
        Icon: printer
        Paired: no
        Trusted: no
        Blocked: no
        Connected: no
        LegacyPairing: yes
        UUID: Serial Port               (00001101-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v05ACp0239d0644
        ManufacturerData Key: 0x0000
        ManufacturerData Value:
  xx xx xx 05 bf 6c                                ..z..l

连接时显示的内核日志

[  388.391092] rtk_btusb: btusb_notify: hci0 evt 1
[  388.392517] rtk_btcoex: hci create connection, start paging
[  389.797526] rtk_btcoex: connected, handle 0002, status 0x00
[  389.797540] rtk_btcoex: Page success
[  389.822942] rtk_btcoex: l2cap op 2, len 16, out 1
[  389.822987] rtk_btcoex: TX l2cap conn req, hndl 0x0002, PSM 0x0001, scid 0x0040
[  389.822995] rtk_btcoex: PSM(0x0001) do not need parse
[  389.826726] rtk_btcoex: l2cap op 3, len 20, out 0
[  389.826772] rtk_btcoex: RX l2cap conn rsp, hndl 0x0002, dcid 0x0050, scid 0x0040, result 0x0001
[  389.925401] rtk_btcoex: l2cap op 3, len 20, out 0
[  389.925473] rtk_btcoex: RX l2cap conn rsp, hndl 0x0002, dcid 0x0050, scid 0x0040, result 0x0000
[  392.443287] rtk_btcoex: l2cap op 6, len 16, out 1
[  392.443361] rtk_btcoex: TX l2cap disconn req, hndl 0x0002, dcid 0x0050, scid 0x0040
[  392.443374] rtk_btcoex: handle_l2cap_discon_req: handle 0x0002, dcid 0x0050, scid 0x0040, dir 1
[  394.480081] rtk_btcoex: HCI Disconnect, handle 0002, reason 0x13
[  394.557527] rtk_btcoex: disconn cmpl evt: status 0x00, handle 0002, reason 0x16
[  394.557539] rtk_btcoex: process disconn complete event.
[  394.630054] rtk_btusb: btusb_notify: hci0 evt 2

HCI 因以下原因断开连接0x13

连接命令之后,info命令显示打印机的 UUID 与命令之前的不同connect

我用谷歌搜索了一下,0x13似乎主机和打印机之间不匹配。

我不知道为什么会发生这个错误,以及如何修复它。

更新了蓝牙的调试日志

运行时pair XX:XX:XX:05:BF:6C,bluetoothd显示先连接到打印机,然后断开连接。

[bluetooth]# info XX:XX:XX:05:BF:6C
Device XX:XX:XX:05:BF:6C (public)
        Name: printer-bf6c
        Alias: printer-bf6c
        Class: 0x00040680
        Icon: printer
        Paired: no
        Trusted: no
        Blocked: no
        Connected: no
        LegacyPairing: yes

[bluetooth]# trust XX:XX:XX:05:BF:6C

[bluetooth]# bluetoothd[1153]: src/device.c:btd_device_set_trusted() trusted 1
[CHG] Device XX:XX:XX:05:BF:6C Trusted: yes
Changing XX:XX:XX:05:BF:6C trust succeeded

[bluetooth]# pair XX:XX:XX:05:BF:6C

Attempting to pair with XX:XX:XX:05:BF:6C
bluetoothd[1153]: src/device.c:btd_device_set_temporary() temporary 0
bluetoothd[1153]: src/agent.c:agent_ref() 0x1730968: ref=2
bluetoothd[1153]: src/device.c:bonding_request_new() Requesting bonding for XX:XX:XX:05:BF:6C
bluetoothd[1153]: src/agent.c:agent_ref() 0x1730968: ref=3
bluetoothd[1153]: src/agent.c:agent_unref() 0x1730968: ref=2
bluetoothd[1153]: src/adapter.c:suspend_discovery()
bluetoothd[1153]: src/adapter.c:adapter_bonding_attempt() hci0 bdaddr XX:XX:XX:05:BF:6C type 0 io_cap 0x04
bluetoothd[1153]: src/adapter.c:add_whitelist_complete() XX:XX:XX:05:BF:6C added to kernel whitelist
[bluetooth]# bluetoothd[1153]: src/adapter.c:connected_callback() hci0 device XX:XX:XX:05:BF:6C connected eir_len 19
[CHG] Device XX:XX:XX:05:BF:6C Connected: yes
[printer-bf6c]# bluetoothd[1153]: src/adapter.c:new_link_key_callback() hci0 new key for XX:XX:XX:05:BF:6C type 4 pin_len 0 store_hint 1
bluetoothd[1153]: src/device.c:device_set_bonded()
bluetoothd[1153]: src/device.c:device_bonding_complete() bonding 0x1746f98 status 0x00
bluetoothd[1153]: src/device.c:device_bonding_complete() Proceeding with service discovery
bluetoothd[1153]: src/agent.c:agent_unref() 0x1730968: ref=1
bluetoothd[1153]: src/adapter.c:resume_discovery()
bluetoothd[1153]: src/adapter.c:pair_device_complete() Success (0x00)
bluetoothd[1153]: src/adapter.c:bonding_attempt_complete() hci0 bdaddr XX:XX:XX:05:BF:6C type 0 status 0x0
bluetoothd[1153]: src/device.c:device_bonding_complete() bonding (nil) status 0x00
bluetoothd[1153]: src/adapter.c:resume_discovery()
[CHG] Device XX:XX:XX:05:BF:6C Modalias: usb:v05ACp0239d0644
[printer-bf6c]# bluetoothd[1153]: src/device.c:device_probe_profiles() Probing profiles for device XX:XX:XX:05:BF:6C
bluetoothd[1153]: src/device.c:device_svc_resolved() /org/bluez/hci0/dev_02_00_7A_05_BF_6C err 0
[CHG] Device XX:XX:XX:05:BF:6C UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device XX:XX:XX:05:BF:6C UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device XX:XX:XX:05:BF:6C ServicesResolved: yes
[CHG] Device XX:XX:XX:05:BF:6C Paired: yes
Pairing successful

[printer-bf6c]# bluetoothd[1153]: src/adapter.c:dev_disconnected() Device XX:XX:XX:05:BF:6C disconnected, reason 2
bluetoothd[1153]: src/adapter.c:adapter_remove_connection()
bluetoothd[1153]: plugins/policy.c:disconnect_cb() reason 2
bluetoothd[1153]: src/adapter.c:bonding_attempt_complete() hci0 bdaddr XX:XX:XX:05:BF:6C type 0 status 0xe
bluetoothd[1153]: src/device.c:device_bonding_complete() bonding (nil) status 0x0e
bluetoothd[1153]: src/device.c:device_bonding_failed() status 14
bluetoothd[1153]: src/adapter.c:resume_discovery()
[CHG] Device XX:XX:XX:05:BF:6C ServicesResolved: no
[CHG] Device XX:XX:XX:05:BF:6C Connected: no

[bluetooth]# info XX:XX:XX:05:BF:6C
Device XX:XX:XX:05:BF:6C (public)
        Name: printer-bf6c
        Alias: printer-bf6c
        Class: 0x00040680
        Icon: printer
        Paired: yes
        Trusted: yes
        Blocked: no
        Connected: no
        LegacyPairing: yes
        UUID: Serial Port               (00001101-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v05ACp0239d0644
[bluetooth]# quit

然后,我尝试使用rfcomm命令绑定打印机并echo XXXXXX > /dev/rfcomm0打印文本。

这是命令和日志。

~# rfcomm show /dev/rfcomm0
rfcomm0: XX:XX:XX:05:BF:6C channel 1 closed
~# rfcomm release /dev/rfcomm0
~# rfcomm bind 0 XX:XX:XX:05:BF:6C

~# rfcomm show /dev/rfcomm0
rfcomm0: XX:XX:XX:05:BF:6C channel 1 clean
~# rfcomm show /dev/rfcomm0
rfcomm0: XX:XX:XX:05:BF:6C channel 1 clean
~# echo "XXXXXX " > /dev/rfcomm0
bluetoothd[1153]: src/adapter.c:connected_callback() hci0 device XX:XX:XX:05:BF:6C connected eir_len 19
bluetoothd[1153]: src/adapter.c:dev_disconnected() Device XX:XX:XX:05:BF:6C disconnected, reason 3
bluetoothd[1153]: src/adapter.c:adapter_remove_connection()
bluetoothd[1153]: plugins/policy.c:disconnect_cb() reason 3
bluetoothd[1153]: src/adapter.c:bonding_attempt_complete() hci0 bdaddr XX:XX:XX:05:BF:6C type 0 status 0xe
bluetoothd[1153]: src/device.c:device_bonding_complete() bonding (nil) status 0x0e
bluetoothd[1153]: src/device.c:device_bonding_failed() status 14
bluetoothd[1153]: src/adapter.c:resume_discovery()

而且什么也没有打印出来!

相关内容