Sorry if this has been asked before, but I am experimenting with the arduinoBLE library, to see how well it works to talk to devices that use BLE to communicate.
For example, the current XBox One controller firmware now uses BLE. Likewise, I have a Microsoft Mouse that uses BLE.
Background, I do most of my work (playing) using Teensy boards by PJRC, and have done a lot of work on the library USBHost_t36 which includes a Bluetooth object, which has support for several Bluetooth devices, including many keyboards, mice, game controllers, usb to serial devices... But currently it does not support BLE.
So I am investigating potential ways to add BLE support and found this library. For the fun of it, I forked it and created a new branch: KurtE/ArduinoBLE at Teensy_USBHost (github.com)
Which now runs most if not all of the examples.
However, If I try to modify the PeripheralExplorer sketch to find out details about
the XBox or the Microsoft Mouse it fails to retrieve the attributes.
Here is looking at the Surface Arc Mouse with debug turned off:
Bluetooth® Low Energy Central - Peripheral Explorer
Found 53:08:1a:39:04:73 ''
Found 36:e4:ac:0c:51:a1 ''
Found 6e:0f:d1:0f:00:d6 ''
Found 52:33:7d:22:31:d9 ''
Found 03:62:65:50:ad:d5 '' fd6f
Found 51:05:16:28:5e:ac ''
Found c5:8a:6c:4f:c0:9c ''
Found e1:59:47:79:f2:be 'Surface Arc Mouse' 1812
Connecting ...
Connected
Discovering attributes ...
Attribute discovery failed!
Here is a version looking for the XBox one with your debug turned on as well as my debug code in the Teensy transport layer
HCITeensyTransportClass::begin() called
HCITeensyTransportClass::claim(0x20004e00, 0, 0x20003ee9, 209) called
class:ff this=20003080 vid:pid=a5c:21e8
HCITeensyTransportClass claim this=20003080 vid:pid=a5c:21e8
09 04 00 00 03 ff 01 01 00 07 05 81 03 10 00 01 07 05 82 02 40 00 01 07 05 02 02 40 00 01 09 04 01 00 02 ff 01 01 00 07 05 83 01 00 00 01 07 05 03 01 00 00 01 09 04 01 01 02 ff 01 01 00 07 05
83 01 09 00 01 07 05 03 01 09 00 01 09 04 01 02 02 ff 01 01 00 07 05 83 01 11 00 01 07 05 03 01 11 00 01 09 04 01 03 02 ff 01 01 00 07 05 83 01 19 00 01 07 05 03 01 19 00 01 09 04 01 04 02 ff
01 01 00 07 05 83 01 21 00 01 07 05 03 01 21 00 01 09 04 01 05 02 ff 01 01 00 07 05 83 01 31 00 01 07 05 03 01 31 00 01 09 04 02 00 02 ff ff ff 00 07 05 84 02 20 00 01 07 05 04 02 20 00 01 09
04 03 00 00 fe 01 01 00 09 21 05 88 13 40 00 10 01
rxep=1(16) txep=2(64) rx2ep=2(64)
HCI COMMAND TX -> 01030C00
>>(CMD, 763):03 0C 00
Control callback (bluetooth): 0 : 03 0c 00
<<(EVT, 4, H:0 T:0)0E 04 01 03 0C 00
HCI EVENT RX <- 040E0401030C00
HCI COMMAND TX -> 01011000
>>(CMD, 0):01 10 00
Control callback (bluetooth): 0 : 01 10 00
<<(EVT, 2, H:7 T:7)0E 0C 01 01 10 00 06 00 10 06 0F 00 0E 22
HCI EVENT RX <- 040E0C01011000060010060F000E22
HCI COMMAND TX -> 01010C08FFFFFFFFFFFFFF3F
>>(CMD, 0):01 0C 08 FF FF FF FF FF FF FF 3F
Control callback (bluetooth): 0 : 01 0c 08 ff ff ff ff ff ff ff 3f
<<(EVT, 2, H:22 T:22)0E 04 01 01 0C 00
HCI EVENT RX <- 040E0401010C00
HCI COMMAND TX -> 01012008FF03000000000000
>>(CMD, 0):01 20 08 FF 03 00 00 00 00 00 00
Control callback (bluetooth): 0 : 01 20 08 ff 03 00 00 00 00 00 00
<<(EVT, 2, H:29 T:29)0E 04 01 01 20 00
HCI EVENT RX <- 040E0401012000
HCI COMMAND TX -> 01022000
>>(CMD, 0):02 20 00
Control callback (bluetooth): 0 : 02 20 00
<<(EVT, 2, H:36 T:36)0E 07 01 02 20 00 1B 00 0F
HCI EVENT RX <- 040E07010220001B000F
Bluetooth® Low Energy Central - Peripheral Explorer
HCI COMMAND TX -> 010C20020001
>>(CMD, 0):0C 20 02 00 01
Control callback (bluetooth): 0 : 0c 20 02 00 01
<<(EVT, 2, H:46 T:46)0E 04 01 0C 20 0C
HCI EVENT RX <- 040E04010C200C
HCI COMMAND TX -> 010B200701200020000000
>>(CMD, 0):0B 20 07 01 20 00 20 00 00 00
Control callback (bluetooth): 0 : 0b 20 07 01 20 00 20 00 00 00
<<(EVT, 2, H:53 T:53)0E 04 01 0B 20 00
HCI EVENT RX <- 040E04010B2000
HCI COMMAND TX -> 010C20020101
>>(CMD, 0):0C 20 02 01 01
Control callback (bluetooth): 0 : 0c 20 02 01 01
<<(EVT, 2, H:60 T:60)0E 04 01 0C 20 00
HCI EVENT RX <- 040E04010C2000
<<(EVT, 10, H:67 T:67)3E 1D 02 01 00 01 AC 5E 28 16 05 51 11 02 01 1A
<<(EVT, 2, H:84 T:84)02 0A 03 0A FF 4C 00 10 05 01 18 7B 67 1D AA
HCI EVENT RX <- 043E1D02010001AC5E281605511102011A020A030AFF4C00100501187B671DAA
<<(EVT, 2, H:99 T:99)3E 0C 02 01 04 01 AC 5E 28 16 05 51 00 AC
HCI EVENT RX <- 043E0C02010401AC5E2816055100AC
Found 51:05:16:28:5e:ac ''
<<(EVT, 18, H:114 T:114)3E 1F 02 01 00 00 16 AC B3 26 3F C8 13 02 01 06
<<(EVT, 2, H:131 T:131)02 0A 14 03 19 C4 03 04 FF 06 00 00 03 03 12 18
<<(EVT, 2, H:147 T:147)BC
HCI EVENT RX <- 043E1F0201000016ACB3263FC813020106020A140319C40304FF06000003031218BC
<<(EVT, 2, H:148 T:148)3E 26 02 01 04 00 16 AC B3 26 3F C8 1A 19 09 58
<<(EVT, 2, H:165 T:165)62 6F 78 20 57 69 72 65 6C 65 73 73 20 43 6F 6E
<<(EVT, 2, H:181 T:181)74 72 6F 6C 6C 65 72 C5
HCI EVENT RX <- 043E260201040016ACB3263FC81A190958626F7820576972656C65737320436F6E74726F6C6C6572C5
Found c8:3f:26:b3:ac:16 'Xbox Wireless Controller' 1812
HCI COMMAND TX -> 010C20020000
>>(CMD, 0):0C 20 02 00 00
Control callback (bluetooth): 0 : 0c 20 02 00 00
<<(EVT, 4, H:189 T:189)0E 04 01 0C 20 00
HCI EVENT RX <- 040E04010C2000
Connecting ...
HCI COMMAND TX -> 010D201960003000000016ACB3263FC80006000C000000C80004000600
>>(CMD, 0):0D 20 19 60 00 30 00 00 00 16 AC B3 26 3F C8 00 06 00 0C 00 00 00 C8 00 04 00 06 00
Control callback (bluetooth): 0 : 0d 20 19 60 00 30 00 00 00 16 ac b3 26 3f c8 00 06 00 0c 00 00 00 c8 00 04 00 06 00
<<(EVT, 2, H:196 T:196)0F 04 00 01 0D 20
HCI EVENT RX <- 040F0400010D20
<<(EVT, 22, H:203 T:203)3E 13 01 00 40 00 00 00 16 AC B3 26 3F C8 0C 00
<<(EVT, 2, H:220 T:220)00 00 C8 00 05
HCI EVENT RX <- 043E1301004000000016ACB3263FC80C000000C80005
Connected
Discovering attributes ...
HCI ACLDATA TX -> 024000070003000400021200
>>(ACLDATA, 0):40 00 07 00 03 00 04 00 02 12 00
tx_data callback (bluetooth):40 00 07 00 03 00 04 00 02 12 00
<<(ACLDATA, 880):40 20 07 00 03 00 04 00 03 12 00
HCI ACLDATA RX <- 024020070003000400031200
HCI ACLDATA TX -> 0240000B0007000400100100FFFF0028
>>(ACLDATA, 27):40 00 0B 00 07 00 04 00 10 01 00 FF FF 00 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 10 01 00 FF FF 00 28
<<(EVT, 16, H:237 T:237)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
<<(ACLDATA, 30):40 20 12 00 0E 00 04 00 11 06 01 00 07 00 00 18 08 00 08 00 01 18
HCI ACLDATA RX <- 02402012000E0004001106010007000018080008000118
HCI ACLDATA TX -> 0240000B0007000400100900FFFF0028
>>(ACLDATA, 14):40 00 0B 00 07 00 04 00 10 09 00 FF FF 00 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 10 09 00 FF FF 00 28
<<(ACLDATA, 30):40 20 12 00 0E 00 04 00 11 06 09 00 11 00 0A 18 12 00 15 00 0F 18
HCI ACLDATA RX <- 02402012000E0004001106090011000A18120015000F18
HCI ACLDATA TX -> 0240000B0007000400101600FFFF0028
>>(ACLDATA, 30):40 00 0B 00 07 00 04 00 10 16 00 FF FF 00 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 10 16 00 FF FF 00 28
<<(EVT, 16, H:35 T:35)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
<<(ACLDATA, 30):40 20 0C 00 08 00 04 00 11 06 16 00 23 00 12 18
HCI ACLDATA RX <- 0240200C00080004001106160023001218
HCI ACLDATA TX -> 0240000B0007000400102400FFFF0028
>>(ACLDATA, 14):40 00 0B 00 07 00 04 00 10 24 00 FF FF 00 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 10 24 00 FF FF 00 28
<<(ACLDATA, 30):40 20 09 00 05 00 04 00 01 10 24 00 80
HCI ACLDATA RX <- 0240200900050004000110240080
HCI ACLDATA TX -> 0240000B000700040008010007000328
>>(ACLDATA, 30):40 00 0B 00 07 00 04 00 08 01 00 07 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 01 00 07 00 03 28
<<(EVT, 16, H:74 T:74)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
<<(ACLDATA, 30):40 20 14 00 10 00 04 00 09 07 02 00 02 03 00 00 2A 04 00 02 05 00 01 2A
HCI ACLDATA RX <- 02402014001000040009070200020300002A0400020500012A
HCI ACLDATA TX -> 0240000B000700040008060007000328
>>(ACLDATA, 14):40 00 0B 00 07 00 04 00 08 06 00 07 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 06 00 07 00 03 28
<<(ACLDATA, 30):40 20 0D 00 09 00 04 00 09 07 06 00 02 07 00 04 2A
HCI ACLDATA RX <- 0240200D000900040009070600020700042A
HCI ACLDATA TX -> 0240000B000700040008080007000328
>>(ACLDATA, 30):40 00 0B 00 07 00 04 00 08 08 00 07 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 08 00 07 00 03 28
<<(EVT, 16, H:125 T:125)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
<<(ACLDATA, 30):40 20 09 00 05 00 04 00 01 08 08 00 01
HCI ACLDATA RX <- 0240200900050004000108080001
HCI ACLDATA TX -> 0240000B000700040008080008000328
>>(ACLDATA, 14):40 00 0B 00 07 00 04 00 08 08 00 08 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 08 00 08 00 03 28
<<(ACLDATA, 30):40 20 09 00 05 00 04 00 01 08 08 00 0A
HCI ACLDATA RX <- 024020090005000400010808000A
HCI ACLDATA TX -> 0240000B000700040008090011000328
>>(ACLDATA, 30):40 00 0B 00 07 00 04 00 08 09 00 11 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 09 00 11 00 03 28
<<(EVT, 16, H:161 T:161)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
<<(ACLDATA, 30):40 20 14 00 10 00 04 00 09 07 0A 00 02 0B 00 29 2A 0C 00 02 0D 00 50 2A
HCI ACLDATA RX <- 02402014001000040009070A00020B00292A0C00020D00502A
HCI ACLDATA TX -> 0240000B0007000400080E0011000328
>>(ACLDATA, 14):40 00 0B 00 07 00 04 00 08 0E 00 11 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 0E 00 11 00 03 28
<<(ACLDATA, 30):40 20 14 00 10 00 04 00 09 07 0E 00 02 0F 00 26 2A 10 00 02 11 00 25 2A
HCI ACLDATA RX <- 02402014001000040009070E00020F00262A1000021100252A
HCI ACLDATA TX -> 0240000B000700040008120011000328
>>(ACLDATA, 30):40 00 0B 00 07 00 04 00 08 12 00 11 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 12 00 11 00 03 28
<<(EVT, 16, H:219 T:219)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
<<(ACLDATA, 30):40 20 09 00 05 00 04 00 01 08 12 00 01
HCI ACLDATA RX <- 0240200900050004000108120001
HCI ACLDATA TX -> 0240000B000700040008120015000328
>>(ACLDATA, 14):40 00 0B 00 07 00 04 00 08 12 00 15 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 12 00 15 00 03 28
<<(ACLDATA, 30):40 20 0D 00 09 00 04 00 09 07 13 00 12 14 00 19 2A
HCI ACLDATA RX <- 0240200D000900040009071300121400192A
HCI ACLDATA TX -> 0240000B000700040008150015000328
>>(ACLDATA, 30):40 00 0B 00 07 00 04 00 08 15 00 15 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 15 00 15 00 03 28
<<(EVT, 16, H:3 T:3)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
<<(ACLDATA, 30):40 20 09 00 05 00 04 00 01 08 15 00 0A
HCI ACLDATA RX <- 024020090005000400010815000A
HCI ACLDATA TX -> 0240000B000700040008160023000328
>>(ACLDATA, 14):40 00 0B 00 07 00 04 00 08 16 00 23 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 16 00 23 00 03 28
<<(ACLDATA, 30):40 20 14 00 10 00 04 00 09 07 17 00 02 18 00 4A 2A 19 00 04 1A 00 4C 2A
HCI ACLDATA RX <- 024020140010000400090717000218004A2A1900041A004C2A
HCI ACLDATA TX -> 0240000B0007000400081B0023000328
>>(ACLDATA, 30):40 00 0B 00 07 00 04 00 08 1B 00 23 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 1B 00 23 00 03 28
<<(EVT, 16, H:50 T:50)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
<<(ACLDATA, 30):40 20 14 00 10 00 04 00 09 07 1B 00 02 1C 00 4B 2A 1D 00 12 1E 00 4D 2A
HCI ACLDATA RX <- 02402014001000040009071B00021C004B2A1D00121E004D2A
HCI ACLDATA TX -> 0240000B0007000400081F0023000328
>>(ACLDATA, 14):40 00 0B 00 07 00 04 00 08 1F 00 23 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 1F 00 23 00 03 28
<<(ACLDATA, 30):40 20 0D 00 09 00 04 00 09 07 21 00 0E 22 00 4D 2A
HCI ACLDATA RX <- 0240200D0009000400090721000E22004D2A
HCI ACLDATA TX -> 0240000B000700040008230023000328
>>(ACLDATA, 30):40 00 0B 00 07 00 04 00 08 23 00 23 00 03 28
tx_data callback (bluetooth):40 00 0B 00 07 00 04 00 08 23 00 23 00 03 28
<<(EVT, 16, H:101 T:101)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
<<(ACLDATA, 30):40 20 09 00 05 00 04 00 01 08 23 00 0A
HCI ACLDATA RX <- 024020090005000400010823000A
HCI ACLDATA TX -> 0240000900050004000404000500
>>(ACLDATA, 14):40 00 09 00 05 00 04 00 04 04 00 05 00
tx_data callback (bluetooth):40 00 09 00 05 00 04 00 04 04 00 05 00
<<(ACLDATA, 30):40 20 0A 00 06 00 04 00 05 01 04 00 03 28
HCI ACLDATA RX <- 0240200A0006000400050104000328
HCI ACLDATA TX -> 0240000900050004000405000500
>>(ACLDATA, 30):40 00 09 00 05 00 04 00 04 05 00 05 00
tx_data callback (bluetooth):40 00 09 00 05 00 04 00 04 05 00 05 00
<<(EVT, 16, H:138 T:138)13 05 01 40 00 02 00
HCI EVENT RX <- 0413050140000200
Attribute discovery failed!
HCI COMMAND TX -> 01060403400013
>>(CMD, 4984):06 04 03 40 00 13
Control callback (bluetooth): 0 : 06 04 03 40 00 13
<<(EVT, 2, H:146 T:146)0F 04 00 01 06 04
HCI EVENT RX <- 040F0400010604
<<(EVT, 1899, H:153 T:153)05 04 00 40 00 22
HCI EVENT RX <- 04050400400022
HCI COMMAND TX -> 010A200101
>>(CMD, 0):0A 20 01 01
Control callback (bluetooth): 0 : 0a 20 01 01
<<(EVT, 2, H:160 T:160)0E 04 01 0A 20 00
HCI EVENT RX <- 040E04010A2000
Note: I tried using an app on my WIndows 11 computer and it is showing some information on the XBox One.
Still investigating!
Anyone else had some luck?

