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

Mesh reliable message

Hi, i am working on a message model based on the simple_on_off model. I am able to send and receive a buffer via unicast or multicast. Now i am trying to develop a reliable "send" as implemented in the simple_on_off model.

I don't know how to stop my model to send the reliable message. I think it comes from my function "reliable_message_cb" similar to "reliable_status_cb" ( from simple_on_off_client) which is the one that disable the transfer ("p_client->state.reliable_transfer_active = false;"). My function is never called...

Can you explain me how this function is called for the simple_on_off model ? 

Maybe the problem comes from somewhere else : after sending my reliable message from my client, the server respond with a very simple message (similar to the status message), maybe i am missing something in the reception of this message to stop the transfer ?

Thanks for your help

  • The calling function is access_reliable_rx_cb, now it works better, my problem was in the find_index function : the model handles were not the same. Now it stops sending after receiving the "ACK" message.
    Now i have an other doubt : the first reliable message sent is correct but if the server does not respond with an ACK, the others messages sent does not contain the right packet, they have the right size, but the content is different.

  • I am still investigating... The message is stored at that lines in add_reliable_message in access_reliable.c:

    memcpy(&(m_reliable.pool[index].params), p_message, sizeof(access_reliable_t));

    If i call this line after the memcpy:
    __LOG_XB(LOG_SRC_APP, LOG_LEVEL_INFO, "add reliable cpy %u :", m_reliable.pool[index].params.message.p_buffer, m_reliable.pool[index].params.message.length);

    I am able to print the correct message.

    Then the function "reliable_timer_cb" is the one that sends the others messages if no acks are received with the "access_model_publish" function.

    before the call of this function, in " else if (TIMER_OLDER_THAN(m_reliable.pool[i].next_timeout, timestamp))", i try to print my message and it does not work:

    __LOG_XB(LOG_SRC_APP, LOG_LEVEL_INFO, "msg rel pub:", m_reliable.pool[i].params.message.p_buffer, m_reliable.pool[i].params.message.length);

    My message was : 57686572652061726520796F75203F and it prints 01000000E7A80200D5A80200F5B502.

  • I found this in the SDK for Mesh V2.0.0 release note:

    BLE Mesh v2.0.0

    Known issues and limitations

    • Publish re-transmission settings are not supported

    Does this answer to my issue ? (i am not sure of the meaning of "publish retransmission")

    The V2.0.1 does not fix this issue, right ? 

    Do you have a date for a new release that would fix this problem, or a solution that i could implement ? 

  • Hi,

    I'm not sure I understand what you mean by "I don't know how to stop my model to send the reliable message". You need to make sure the server are sending you an ACK and after that ACK is received on the client, the client will call the callback. Can you give me more details about your issue and clarify what exactly that you are observing?

Related