ArduinoBLE - trying to connect to XBox One controller and other BLE devices

Wondering to self (and others),

If this is the best place to discuss some of this, and/or Issues or mainly on the PJRC forum thread:
USBHost Bluetooth -> BLE -> ArduinoBLE? (pjrc.com)

With The XBox one controller, the PC BlueTooth LE Explorer was able to show there are 5 services
and the like, and it enumerated the services and the like:

And for example, for the first 4 Services it was able to show data:
Service Name: GenericAccess
Service Name: GenericAttribute
Service Name: DeviceInformation
Service Name: Battery

Only when it got to the 5th Service, it was not able to give you all of the information:

On those the value looks like an error: ...

And then looking at my traces after it connects, until it shows that it failed, it looks like lots of messages were transferred back and forth between the two:

Connected
Discovering attributes ...
Data tx ->  0x2 0x40 0x0 0x7 0x0 0x3 0x0 0x4 0x0 0x2 0x12 0x0.
>>(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, 10033):40 20 07 00 03 00 04 00 03 12 00 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x10 0x1 0x0 0xFF 0xFF 0x0 0x28.
>>(ACLDATA, 26):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:77 T:77)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
<<(ACLDATA, 31):40 20 12 00 0E 00 04 00 11 06 01 00 07 00 00 18 08 00 08 00 01 18 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x10 0x9 0x0 0xFF 0xFF 0x0 0x28.
>>(ACLDATA, 15):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, 29):40 20 12 00 0E 00 04 00 11 06 09 00 11 00 0A 18 12 00 15 00 0F 18 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x10 0x16 0x0 0xFF 0xFF 0x0 0x28.
>>(ACLDATA, 29):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:131 T:131)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
<<(ACLDATA, 30):40 20 0C 00 08 00 04 00 11 06 16 00 23 00 12 18 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x10 0x24 0x0 0xFF 0xFF 0x0 0x28.
>>(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 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x1 0x0 0x7 0x0 0x3 0x28.
>>(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:170 T:170)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
<<(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 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x6 0x0 0x7 0x0 0x3 0x28.
>>(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 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x8 0x0 0x7 0x0 0x3 0x28.
>>(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:221 T:221)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
<<(ACLDATA, 30):40 20 09 00 05 00 04 00 01 08 08 00 01 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x8 0x0 0x8 0x0 0x3 0x28.
>>(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 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x9 0x0 0x11 0x0 0x3 0x28.
>>(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:1 T:1)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
<<(ACLDATA, 45):40 20 14 00 10 00 04 00 09 07 0A 00 02 0B 00 29 2A 0C 00 02 0D 00 50 2A 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0xE 0x0 0x11 0x0 0x3 0x28.
>>(ACLDATA, 29):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 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x12 0x0 0x11 0x0 0x3 0x28.
>>(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:59 T:59)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
<<(ACLDATA, 30):40 20 09 00 05 00 04 00 01 08 12 00 01 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x12 0x0 0x15 0x0 0x3 0x28.
>>(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 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x15 0x0 0x15 0x0 0x3 0x28.
>>(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:99 T:99)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
<<(ACLDATA, 30):40 20 09 00 05 00 04 00 01 08 15 00 0A 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x16 0x0 0x23 0x0 0x3 0x28.
>>(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 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x1B 0x0 0x23 0x0 0x3 0x28.
>>(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:146 T:146)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
<<(ACLDATA, 31):40 20 14 00 10 00 04 00 09 07 1B 00 02 1C 00 4B 2A 1D 00 12 1E 00 4D 2A 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x1F 0x0 0x23 0x0 0x3 0x28.
>>(ACLDATA, 15):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, 29):40 20 0D 00 09 00 04 00 09 07 21 00 0E 22 00 4D 2A 
Data tx ->  0x2 0x40 0x0 0xB 0x0 0x7 0x0 0x4 0x0 0x8 0x23 0x0 0x23 0x0 0x3 0x28.
>>(ACLDATA, 29):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:197 T:197)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
<<(ACLDATA, 45):40 20 09 00 05 00 04 00 01 08 23 00 0A 
Data tx ->  0x2 0x40 0x0 0x9 0x0 0x5 0x0 0x4 0x0 0x4 0x4 0x0 0x5 0x0.
>>(ACLDATA, 29):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 
Data tx ->  0x2 0x40 0x0 0x9 0x0 0x5 0x0 0x4 0x0 0x4 0x5 0x0 0x5 0x0.
>>(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:234 T:234)13 05 01 40 00 02 00 
HCI event: 13
Outstanding packets: 0
Data[0]: 0x64
Data[1]: 0x2
Attribute discovery failed!
Command tx ->  0x1 0x6 0x4 0x3 0x40 0x0 0x13

Next up, decoding the received messages and see if the current code is doing some form of all or nothing. That is if the code has properly identified all of the same data up to this, point but then fails to fully decode that last service, will it return the valid data that it has retrieved or will it error out the whole thing.

Edit: Not that it is related, but I pushed up some changes to my fork/branch to the PeriperalExplorer sketch, where when I see 16bit UUIDs, I try to print out the logical names
From the Bluetooth Assigned numbers list.

So my trace of the Mouse (debug turned off)

Device name: Surface Arc Mouse
Appearance: 0x0

Service 1800	//Generic Access service
	Characteristic 2a00, properties 0xA, value 0x5375726661636520417263204D6F757365	//Device Name
		Descriptor 2803, value 0x020500012A	//Characteristic
		Descriptor 2a01, value 0xC203	//Appearance
	Characteristic 2a01, properties 0x2, value 0xC203	//Appearance
		Descriptor 2803, value 0x020700042A	//Characteristic
		Descriptor 2a04, value 0x060006003C002C01	//Peripheral Preferred Connection Parameters
	Characteristic 2a04, properties 0x2, value 0x060006003C002C01	//Peripheral Preferred Connection Parameters
Service 1801	//Generic Attribute service
Service 180a	//Device Information service
	Characteristic 2a29, properties 0x2	//Manufacturer Name String
		Descriptor 2803, value 0x020D00502A	//Characteristic
		Descriptor 2a50, value 0x	//PnP ID
	Characteristic 2a50, properties 0x2	//PnP ID
Service 180f	//Battery service
	Characteristic 2a19, properties 0x12	//Battery Level
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
Service 1812	//Human Interface Device service
	Characteristic 2a4e, properties 0x6	//Protocol Mode
		Descriptor 2803, value 0x1A16004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x1A1A004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x1A1E004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x1A22004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x1A26004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x1A2A004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x1A2E004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x1A32004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x1A36004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x1A3A004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0x1A	//Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x0E3E004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0xE	//Report
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x0E41004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0xE	//Report
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x0A44004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0xA	//Report
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x0A47004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0xA	//Report
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x0A4A004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0xA	//Report
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x0A4D004D2A	//Characteristic
		Descriptor 2a4d, value 0x	//Report
	Characteristic 2a4d, properties 0xA	//Report
		Descriptor 2908, value 0x	//Report Reference
		Descriptor 2803, value 0x0250004B2A	//Characteristic
		Descriptor 2a4b, value 0x	//Report Map
	Characteristic 2a4b, properties 0x2	//Report Map
		Descriptor 2803, value 0x1A5200332A	//Characteristic
		Descriptor 2a33, value 0x	//Boot Mouse Input Report
	Characteristic 2a33, properties 0x1A	//Boot Mouse Input Report
		Descriptor 2902, value 0x0000	//Client Characteristic Configuration
		Descriptor 2803, value 0x0255004A2A	//Characteristic
		Descriptor 2a4a, value 0x	//HID Information
	Characteristic 2a4a, properties 0x2	//HID Information
		Descriptor 2803, value 0x0457004C2A	//Characteristic
		Descriptor 2a4c, value 0x	//HID Control Point
	Characteristic 2a4c, properties 0x4	//HID Control Point

Disconnecting ...
Disconnected