• Jens Hauke's avatar
    Fix for missed scan response data (BLEScan). (#4358) · 82670b96
    Jens Hauke authored
    This is a fix for missing scan responses after a first successfull scan.
    
    While running the BLE_scan.ino sketch with wantDuplicates=false, i got
    only one result with correct advertising and scan response length (31,26):
    
    pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks(), false);
    pBLEScan->start(scanTime, false);
    ...
    [W][BLEScan.cpp:109] handleGAPEvent(): bytes length: 31 + 26, addr type: 1
    
    All following calls to start() just returned the advertising data without
    scan response data:
    
    pBLEScan->start(scanTime, false);
    [W][BLEScan.cpp:109] handleGAPEvent(): bytes length: 31 + 0, addr type: 1
    
    With "wantDuplicates=true" i got:
    
    pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks(), true);
    pBLEScan->start(scanTime, false);
    [W][BLEScan.cpp:109] handleGAPEvent(): bytes length: 31 + 26, addr type: 1
    [W][BLEScan.cpp:109] handleGAPEvent(): bytes length: 31 + 26, addr type: 1
    [W][BLEScan.cpp:73] handleGAPEvent(): ESP_GAP_SEARCH_INQ_CMPL_EVT
    Devices found: 1
    Scan done!
    pBLEScan->start(scanTime, false);
    [W][BLEScan.cpp:109] handleGAPEvent(): bytes length: 31 + 0, addr type: 1
    [W][BLEScan.cpp:109] handleGAPEvent(): bytes length: 0 + 26, addr type: 1
    [W][BLEScan.cpp:109] handleGAPEvent(): bytes length: 31 + 0, addr type: 1
    [W][BLEScan.cpp:109] handleGAPEvent(): bytes length: 0 + 26, addr type: 1
    
    Explicitly initializing m_scan_params.scan_duplicate of BLEScan solves
    this issue (In my case the un-initialized value was
    m_scan_params.scan_duplicate == 1073599044).
    Co-authored-by: default avatarMe No Dev <me-no-dev@users.noreply.github.com>
    82670b96
BLEScan.cpp 9.56 KB