2022-06-28 04:00 AM
What I want to do is quite simple in theory :
1) Load the BLE Beacon application from the BlueNRG-LP Development Kit (DK) on the first BlueNRG-LP board and run
2) Verify with an Android BLE Scanner Phone app that the BLE Beacon app on the BlueNRG-LP is periodically updating (like RSSI values)
3) Start from some application in the DK (say the BLE_RC_LongRange project)
4) Modify this project source code to perform a passive scan on the 1M PHY (neutering connections as I am not interested in those for this experiment)
5) Override the hci_le_extended_advertising_report_event and hci_le_advertising_report_event callbacks recompile and place them in the project with breakpoints and run on the second BlueNRG-LP board
Result: Not hitting callback breakpoints on second board which I would expect because first board is constantly beaconing.
I left out a lot of details to keep the question as concise as I can.
My question is: Am I going about this the proper way and if not can you suggest two DK sample apps I can start from so I can slay this?
Thanks for any guidance..
JRW
2022-06-29 09:56 AM
It seems like this user was trying to achieve (and had a bit more success than I did) the same.
https://community.st.com/s/question/0D53W000008kpV1SAI/how-to-get-a-detailed-scan-response
2022-07-01 10:27 PM
I could REALLY use help from someone.
I have been trying with little success.
In a nutshell: I want to Broadcast a Beacon from the Beacon app in the SDK and detect and read it in a break-pointed callback on a second BlueNRG-LP board.
I am not interested in any "Connection" type scenario with GATT / known addresses.. etc. I simply want to "detect" the Beacon that is being Broadcast by the one BlueNRG-LP board.
After the standard initializations (System and BLE SYS CLock, BLE Stack, UART, BSP IO power save ,....etc,) here is my code snippet for the "scanning" board:
uint8_t role = GAP_OBSERVER_ROLE | GAP_CENTRAL_ROLE;
uint8_t bdaddr[] = {BD_ADDR_MASTER};
uint8_t device_name[]={'N', 'o', 'd', 'e'};
uint8_t ret;
uint16_t service_handle, dev_name_char_handle, appearance_char_handle;
/* Configure Public address */
ret = aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, bdaddr);
if(ret != BLE_STATUS_SUCCESS) {
PRINTF("aci_hal_write_config_data() failed: 0x%02x\r\n", ret);
return ret;
}
/* Set the TX power */
aci_hal_set_tx_power_level(0, OUTPUT_POWER_LEVEL);
/* GAP Init */
ret = aci_gap_init(role , 0, 0x07, 0x00, &service_handle, &dev_name_char_handle, &appearance_char_handle);
if(ret){
PRINTF("aci_gap_Init() failed: 0x%02x\r\n", ret);
return ret;
}
/* Set the device name */
ret = Gap_profile_set_dev_name(0, sizeof(device_name), device_name);
if(ret){
PRINTF("Gap_profile_set_dev_name() failed: 0x%02x\r\n", ret);
return ret;
}
ret = aci_gap_set_scan_configuration(DUPLICATE_FILTER_ENABLED, SCAN_ACCEPT_ALL, LE_1M_PHY_BIT, ACTIVE_SCAN, SCAN_INTERVAL, SCAN_WINDOW);
printf("Scan configuration for LE_1M_PHY: 0x%02X\n", ret);
//ret = aci_gap_set_scan_configuration(DUPLICATE_FILTER_ENABLED, SCAN_ACCEPT_ALL, LE_CODED_PHY_BIT, ACTIVE_SCAN, SCAN_INTERVAL, SCAN_WINDOW);
//printf("Scan configuration for LE_CODED_PHY: 0x%02X\n", ret);
ret = aci_gap_start_procedure(GAP_OBSERVATION_PROC /*GAP_GENERAL_DISCOVERY_PROC*/,LE_1M_PHY_BIT,0,0);
printf("GAP Start Procedure for LE_1M_PHY: 0x%02X\n", ret);
debounce_timer.callback = DebounceTimeoutCB;
scanningLEDTimerHandle.callback = ScanningLEDTimeoutCB;
writeTimerHandle.callback = writeTimeoutCB;
statsTimerHandle.callback = statsTimeoutCB;
return BLE_STATUS_SUCCESS;
.... and my callbacks:
void hci_le_extended_advertising_report_event(uint8_t Num_Reports,
Extended_Advertising_Report_t Extended_Advertising_Report[])
{
Extended_Advertising_Report_t * ptr = Extended_Advertising_Report;
return;
}
void hci_le_advertising_report_event(uint8_t Num_Reports,
Advertising_Report_t Advertising_Report[])
{
return;
}
I had also tried explicitly enabling the events through the event mask mechanism:
/* --- JRW Hopefully ticket out of purgatory */
ret = hci_le_set_event_mask(LE_Event_Mask);
if(ret)
{
PRINTF("hci_le_set_event_mask 0x%02X\n",ret);
}
where event mask:
static uint8_t LE_Event_Mask[8]={
HCI_LE_EVT_MASK_BYTE0_ADVERTISING_REPORT ,
HCI_LE_EVT_MASK_BYTE1_EXTENDED_ADVERTISING_REPORT | HCI_LE_EVT_MASK_BYTE1_PHY_UPDATE_COMPLETE,
0x00,
0x00,
0x00,
0x00};
I cannot get the callbacks to fire for BlueNRG-LP (running the stock ST Micro SDK Beacon Demo)
Any suggestions? I just need a hint (other than give up) not the answer...
2022-07-01 10:53 PM
Naturally, after I hit the send for SOS button, I got it working...
2022-08-02 02:49 AM
Hi @JWill.8
Same as you, I'm trying to receive data from a verified BLE Beacon app on another device.
I see that you got it working, could you please suggest which DK sample app you have used for the scanner?
If possible to share your source code for this it would be awesome, but any hint would be welcome, for a start entering the callback would be enough.
Thanks in advance for any guidance
2022-08-02 07:41 AM
Certainly. In a nutshell, here is what I did:
Does that help?..
JRW
2022-08-03 01:04 AM
Thanks for your fast response!!
Unfortunately I just realized that your using BlueNRG-LP while I'm using BueNRG-1. Probably there's a lot of similarity between them so I'll try to use your guidance, but I'll have to dive deeper into it because there's no 'BLE LongRange' example in the BlueNRG1 DK.
in any case, many thanks for your help! I really appreciate the time you invested in replying my msg
2022-08-03 03:12 AM
Sure thing. FYI, there really is nothing special about the BLE LongRange example code, as most of the coded PHY and GATT portions I commented out anyway. It is just a two-radio starting point I picked at random. It was really the GAP portion of that sample code I was interested in. Also, I believe you can download it from here:https://www.st.com/en/embedded-software/stsw-bnrglp-dk.html. Finally, much of the code is already attached to this ticket earlier. If you don't make any progress, I can attach further code snippets but you should be able to start from any two-radio sample code in the BlueNRG1 DK. Or perhaps I can look at the BlueNRG1 DK.....
2022-08-03 04:26 AM
Update: I just took a brief look at the BlueNRG-1 DK and now I see what you are up against. The aci_gap API's differ between the two platforms, unfortunately. So it is not as easy as I made it sound earlier (sorry about that). I think the BLE_MS_Formula example under Project->BLE_Examples in the BlueNRG-1 DK may be the best starting point.... And BLE_Beacon under Project->BLE_Examples
2022-08-03 04:46 AM
So I'm using this one BLE_MS_Formula as a starting point, and it proved as a good guess because I've managed to receive some advertising data.
Thank you @JWill.8 for your help!
Actually I was expecting no reply, this community isn't very active as it seems from other inquiries. So your help was much above expectations!
many thanks :folded_hands: :clinking_beer_mugs: