Channel sounding using multiple reflectors

I am attempting to do channel sounding with one initiator and two reflectors.  Switching between reflectors, by connecting to each in turn, does work, but it is very slow.

I have tried both

  • connecting to both, enabling channel sounding at the time of connection and leaving it enabled
  • connecting to both, enabling and disabling channel sounding with one reflector connection at a time

Both methods lead to successful sounding at the time of connection, but from the point where there have been CS events between the initiator and the second reflector it only ever works with the last connection made, and infinite aborted sub-events with the first device connection, basically getting a subevent_done_status of  BT_CONN_LE_CS_SUBEVENT_ABORTED with the reason being declared BT_CONN_LE_CS_PROCEDURE_ABORT_CHMAP_INSTANT_PASSED.

What is this error, why is it happening?  More importantly, what would be the steps to enable rapid switching or simultaneous CS with two reflectors?

I had some hope that the question posed on  channel sounding cs channel map update instant passing would give some info, but 3 months later Swathy's update is still pending. 

Parents Reply Children
  • Hi,  
    I had not seen this page, and it looks quite useful--thanks.
    I can imagine that if the timing is off and the sounding procedures are stepping on each other's toes, this would cause issue.

    However, this would not be the case in the tests I ran where I was enabling channel sounding on each device in turn, with the other disabled.  In those cases, the last (second) device connected to would actually provide results whenever sounding was re-enabled, but the first would seem to attempt the measurement but always report those errors.


    Since they're going one at a time in that case, I'd think it can't be that the procedure is conflicting between the devices.

  • Hey Pat

    Have you had any progress with the channel sounding timing as reference to dive into this issue, or do you have any action points for Nordic on your end? I have not looked further into this on my end yet.

    Best regards,

    Simon

  • Well my question is does calling



    struct bt_le_cs_procedure_enable_param params = {
    .config_id = conndat->id,
    .enable = BT_CONN_LE_CS_PROCEDURES_DISABLED
    };

    int err = bt_le_cs_procedure_enable(conndat->connection, &params);

    do what I think it does. 

    Because (I think) I'm disabling the sounding procedures on one, then enabling on the other.  If this is the case, only one CS procedure is ever being called at once, so they can't be interfering with each other and it wouldn't be timing related.

    And this does work, partially.  

    Connect to A enabled sounding, works for reflector A.  Then I disable, connect to reflector B.  Sounding works for reflector B.  Then I disable B, re-enable A: errors, the "instant passed".  Disable A, re-enable B, works fine.  

    So the problem is unlikely to be timing related, it is something else, and I'm uncertain where the issue is or why it's these errors, so I'd really like to see a step-by-step of how to get multiple reflectors going, either simultaneously, or simply one at a time *while remaining connected to both*.

Related