This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

clarification on RSSI value per packet received

Hello, we are trying to implement a system where multiple central devices (based on nRF52833)  act as a central. These are distributed in building access ways and doors etc. As part of the functionality we need, they will have a have a sub process that schedules them to send out an advertising packet periodically (every few seconds).

A peripheral device in the area would be able to move. It's initial functionality would be to scan the advertising channels,  detect the advertising packets from these multiple centrals, order the list based on RSSI of advertising packets it detects then, and then send a ADV_DIRECT_IND to the central device it considers the closest (based on RSSI).  No connections are made to this point.

Initially this may sound like the roles of central and peripheral are reversed however, after the initial contact the central device does act as central and the peripheral does act as peripheral. But these is definitely a mix of functionality (this is just a way of selecting the preferred device..

There are several concerns with the first being whether the SDK makes a distinction between the central and peripheral and prevents this cross functionality (can it be merged). The other is whether an RSSI value can be produced at the peripheral for each advertising packet it receives. There are some cases in devzone about this first point. Case 238689 is one which looks similar however the iBeacons used are peripherals and the nRF52 observer looks to be central (opposite to what we have)

On the RSSI question we seek clarity.  If this code below were executed on our peripheral node (as a result of receiving an advertising packet) would the RSSI value returned be the RSSI from that received advertising packet (and not some average value)?  So each packet would have a unique RSSI (no connections have been made at that stage)

   case BLE_GAP_EVT_ADV_REPORT:
     rssi_value = p_ble_evt->evt.gap_evt.params.adv_report.rssi;

appreciate any feedback

adrian

  • Hi Adrian,

    There are several concerns with the first being whether the SDK makes a distinction between the central and peripheral and prevents this cross functionality (can it be merged).

    The SoftDevice and SDK support both roles concurrently, as well as concurrent scanning and advertising. Some SoftDevice only support a subset though, see the SoftDevice overview table for details. You can see some multirole examples in the SDK under BLE Central & Peripheral.

    The other is whether an RSSI value can be produced at the peripheral for each advertising packet it receives.

    Yes, the RSSI is part of the advertising report.

    On the RSSI question we seek clarity.  If this code below were executed on our peripheral node (as a result of receiving an advertising packet) would the RSSI value returned be the RSSI from that received advertising packet (and not some average value)?

    Yes, it is for the specific advertising packet.

    Einar

  • Thank you for the timely reply. So far what we want to do looks possible. A further question comes up. The peripheral being used is based on a nRF52811. The SoC has an accelerometer connected. When the peripheral moves we wanted the 52811 to transmit packets+CTE consecutively on three channels that we reserve for this.

    When this movement based transmission occurs there will be no connection between peripheral and central. In fact the accelerometer wakes up the 52811 to start this transmission. Further we want to send the same packet (with CTE) on 3 channels consecutively then wait a period and repeat. So if we say that we reserve channels 9, 20 and 33 for this then the same packet is transmitted on 9, 20 and 33 wait say 0.5sec and repeat.. Kind of like how advertising works on 37, 38 and 39.  Our understanding is that channel mapping is not selecting this function (but for dicing up say long transmissions).

    Couple of questions WRT the SDK:

    1. Can a peripheral instigate a series of CTE transmissions on selected channels while being connectionless?
    2. Is there an automated way to have the 3 packets sent on those channels 9, 20 and 33 or does this have to be done manually ie send packet on ch 9, change channel then send on ch 20 etc
    3. We don’t want channel hopping for these transmissions
    4. We didn’t see that the API gave flexibility is selecting a particular channel to Transmit on. Is that supported. Ie how do I transmit a CTE packet on channel 9 for example?

    You guidance is much appreciated

    voot

  • Hi,

    Please make a new question for the Carrier Tone Extension as that is not related to the initial question. (Keeping separate topics in different threads make it easier to browse the forum, and equally important then each topic will be be handled by an application engineer with relevant experience.)

Related