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

Parents
  • 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.

Reply
  • 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.

Children
No Data
Related