title: Bluez blotoothctl scan vs hcitool scan
body: <p>I'm running bluez 5.50 on a Raspberry Pi (both Buster and Stretch). I have a ble sensor device that advertises data only when a button on the sensor device is pressed. So advertisements are asynchronous and there are no periodic advertisements in between (and all packets are unique, no duplicates). I'm having an issue with Bluez though where once a packet is received, Bluez seems to not report any additional packets from the device for the next approximately 11 seconds (very occasionally the interval is shorter). This is with the bluetoothctl line command tool as well as my own c++ application (based off the bluez client/main.c example). In both cases before starting a scan I clear the scan filter, set transport to le, and set duplicate-data reporting on. Conversely, when running hcitool scan I see all the packets from the sensor (it even seems to be reporting all 3 copies broadcast on the different advertisement channels). So my question is, is there a way to get those missing advertisements through the dbus api, possibly some additional setting somewhere? If not, is the hci api okay to use from c++ and should it do the trick? Any help appreciated, thanks!</p>
  <p>Edited per Alex's questions -</p>
  <blockquote>
  <p>Have you tried downloading the latest bluez (5.53) <a href="https://git.kernel.org/pub/scm/bluetooth/bluez.git" rel="nofollow noreferrer">https://git.kernel.org/pub/scm/bluetooth/bluez.git</a> ?</p>
  </blockquote>
  <p>Not yet, just wanted to check and see if this might be something known beforehand.</p>
  <blockquote>
  <p>Are you using hcitool scan or sudo hcitool lescan? If you are running hcitool scan, you are picking up bluetooth classic (not low energy packets). hcitool is a deprecated tool. I've found that sudo hcitool lescan only works with BLE 4.x controllers. The function fails on 5.x controller.</p>
  </blockquote>
  <p>hcitool lescan (under root), and yes, the hardware is a Pi Zero/W and a P3 so BLE 4.x controllers (I assume)</p>
  <blockquote>
  <p>Have you tried running sudo btmon to see all of the HCI communication during scanning?</p>
  </blockquote>
  <p>I have but can't remember exactly what I saw other than it didn't contradict anything else, i.e. missing packets w/ dbus api vs hci</p>
  <blockquote>
  <p>Can you provide code for your use of bluetoothctl, ie:</p>
  <pre><code>$bluetoothctl
  [bluetooth]# menu scan
  [bluetooth]# clear
  [bluetooth]# transport le
  [bluetooth]# duplicated-data on
  [bluetooth]# back
  [bluetooth]# scan on
  </code></pre>
  </blockquote>
  <p>always exactly as you've noted...</p>
  <blockquote>
  <p>Could you also provide the results of hciconfig -a</p>
  </blockquote>
  <pre><code>--- Results (P Zero) -
  
  hci0:   Type: Primary  Bus: UART
          BD Address: B8:27:EB:79:2E:3F  ACL MTU: 1021:8  SCO MTU: 64:1
          UP RUNNING
          RX bytes:55476 acl:126 sco:0 events:2012 errors:0
          TX bytes:6956 acl:114 sco:0 commands:444 errors:0
          Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
          Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
          Link policy: RSWITCH SNIFF
          Link mode: SLAVE ACCEPT
          Name: 'HubPi01'
          Class: 0x000000
          Service Classes: Unspecified
          Device Class: Miscellaneous,
          HCI Version: 4.1 (0x7)  Revision: 0x168
          LMP Version: 4.1 (0x7)  Subversion: 0x2209
          Manufacturer: Broadcom Corporation (15)
  
  --- Results (P3) -
  
  hci0:   Type: Primary  Bus: UART
          BD Address: B8:27:EB:2B:A2:A3  ACL MTU: 1021:8  SCO MTU: 64:1
          UP RUNNING
          RX bytes:10995 acl:0 sco:0 events:390 errors:0
          TX bytes:2145 acl:0 sco:0 commands:91 errors:0
          Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
          Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
          Link policy: RSWITCH SNIFF
          Link mode: SLAVE ACCEPT
          Name: 'HubPi02'
          Class: 0x000000
          Service Classes: Unspecified
          Device Class: Miscellaneous,
          HCI Version: 4.1 (0x7)  Revision: 0x168
          LMP Version: 4.1 (0x7)  Subversion: 0x2209
          Manufacturer: Broadcom Corporation (15)
  </code></pre>
  <p>Below is a scan covering about 20 seconds (editing out all unrelated packets),
  where I'm pressing down the button on the sensor about every 2 seconds and then
  holding it down for another 2 seconds before letting it up. The first chunk
  is from bluetoothctl, the second from &quot;hcidump --raw&quot; (on a second raspberry pi). The first four bytes
  in the bluetoothctl packet data is a little endian packet seq number
  incremented by the sensor for each new packet. The next byte indicates a
  button up/down action. You can see bluetoothctl reported packets numbered 05df,
  05e5, 05e9. In the raw dump the seq number is at the end of the top line. There
  you can see all packets are in order, reported 1 to 3 times (I assume it is
  reporting all advertising channels it catches). All packets are present 05df to
  05e9 in the hcidump scan. Lastly is the output from &quot;hcitool lescan --duplicates&quot;,
  which I'm not really sure how it maps...</p>
  <pre><code>
  ------ bluetoothctl
                                  .
  [NEW] Device E2:15:00:01:73:96 E2-15-00-01-73-96
  
  [CHG] Device E2:15:00:01:73:96 RSSI: -46
  [CHG] Device E2:15:00:01:73:96 ManufacturerData Key: 0x03da
  [CHG] Device E2:15:00:01:73:96 ManufacturerData Value:
    df 05 00 00 10 a1 ac 8a b4                       .........
  
  [CHG] Device E2:15:00:01:73:96 RSSI: -45
  [CHG] Device E2:15:00:01:73:96 ManufacturerData Key: 0x03da
  [CHG] Device E2:15:00:01:73:96 ManufacturerData Value:
    e5 05 00 00 10 e7 4f 67 6e                       ......Ogn
                                               .
  [CHG] Device E2:15:00:01:73:96 RSSI: -65
  [CHG] Device E2:15:00:01:73:96 ManufacturerData Key: 0x03da
  [CHG] Device E2:15:00:01:73:96 ManufacturerData Value:
    e9 05 00 00 10 f4 f9 f8 7d                       ........}
  
  ---------- hcidump --raw 
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 DF 05
    00 00 10 A1 AC 8A B4 C3
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 DF 05
    00 00 10 A1 AC 8A B4 BE
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E0 05
    00 00 11 11 0F 3E 24 B6
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E1 05
    00 00 10 F7 68 07 50 BE
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E1 05
    00 00 10 F7 68 07 50 CF
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E1 05
    00 00 10 F7 68 07 50 BA
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E2 05
    00 00 11 1D 18 A8 2A BF
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E2 05
    00 00 11 1D 18 A8 2A C0
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E2 05
    00 00 11 1D 18 A8 2A B8
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E3 05
    00 00 10 E2 29 C7 F7 BB
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E4 05
    00 00 11 57 F0 5C 76 BD
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E4 05
    00 00 11 57 F0 5C 76 C1
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E5 05
    00 00 10 E7 4F 67 6E CA
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E6 05
    00 00 11 77 63 92 CE C0
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E6 05
    00 00 11 77 63 92 CE BA
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E6 05
    00 00 11 77 63 92 CE BE
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E7 05
    00 00 10 2D 52 48 C2 BD
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E8 05
    00 00 11 EE 32 20 9D BD
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E8 05
    00 00 11 EE 32 20 9D C1
  
  &gt; 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E9 05
    00 00 10 F4 F9 F8 7D BC
  
  ------- hcitool lescan --duplicates
  
  E2:15:00:01:73:96 (unknown)
  E2:15:00:01:73:96 (unknown)
  E2:15:00:01:73:96 (unknown)
  
  E2:15:00:01:73:96 (unknown)
  
  E2:15:00:01:73:96 (unknown)
  E2:15:00:01:73:96 (unknown)
  
  E2:15:00:01:73:96 (unknown)
  
  </code></pre>