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

mesh network

Hi!

I am currently using SEGGER Embedded Studio version  4.12, nRF5 SDK version15.2.0,  nRF5 SDK for Mesh version 3.1.0,   Hardware BMD-300 Evaluation Board.

i using the uart to send data over the ble mesh and all work fine except that if i get data from the uart and sending it over the mesh(ble) in interval lowest from 2 sec between two message and the second one the ble doesn't sending it.

i changed in the header file  transport.h the parameters:

/** Default base TX retry timeout. */ TRANSPORT_SAR_TX_RETRY_BASE_TIMEOUT_DEFAULT_US  FROM: MS_TO_US(500)    TO: MS_TO_US(200)

and

/** Default number of retries before cancelling SAR TX session. */ TRANSPORT_SAR_TX_RETRIES_DEFAULT FROM: (4)       TO: (2)

and it fix my problem and for now all work fine.

those changes will cause problems/bugs? how those changes 'will affect my mesh network?

thanks!

Parents Reply
  • Hi Noamb, 

    Mesh should be able to handle 25bytes easily (using SAR packets). How many devices you used in your test ? Which message did you send ? was it acknowledged message or unacknowledged message ?

    By default we have the advertising interval of 20ms. So to be able to send 25 bytes (3 SAR packets) it can take only 60ms. 

    How do you know that the second message doesn't get sent ? We need to step into the code to know what could be wrong here. 

Children
  • its was acknowledged message.

    i know that the second message doesn't get sent because i get  NRF_ERROR_INVALID_STATE, i get this error from the function segmented_packet_tx in this function there is a comment: 

    /* According to the Mesh Profile Specification v1.0 Section 3.6.4.1, we should only ever send one
    * transport SAR packet at the same time between a given source and destination. Return FORBIDDEN if
    * there's a SAR session in progress with the same parameters. */

     

  • Could you check if the first packet is acknowledged before you send the next package ? 

    Have you check how long it takes to have the packet acknowledged ?  How many devices in the network you are testing  ? How do you send the message ? To a unicast address or to a group address ? 

  • i'm using 2 devices a client and a server. i'm sending a message from the server to the client using the function app_onoff_status_publish, so i don't check if i getting ack (do i need to add it to my code?).

    i sending the messages from the server to a group address  

  • I don't think calling app_onoff_status_publish() will send the message as acknowledged message. As far as I can see in the code ,that function would call access_model_publish() instead of   access_model_reliable_publish(). But I'm not sure what you have in your code.

    Could you add a mesh event handle and look for NRF_MESH_EVT_TX_COMPLETE event to check how long it would take to send the message ? 

    Are you observing that you can only send one message and can't send anything after that ? If not, how long it would take you to wait until you can send again ? 

    Could you provide your code ? 

  • yes you right i'm using access_model_publish() .

    I don't think calling app_onoff_status_publish() will send the message as acknowledged message. As far as I can see in the code ,that function would call access_model_publish() instead of   access_model_reliable_publish(). But I'm not sure what you have in your code.

    i will do it

    Could you add a mesh event handle and look for NRF_MESH_EVT_TX_COMPLETE event to check how long it would take to send the message ? 

    yes i can't sending anythings after that only after 2 sec maybe less

    Are you observing that you can only send one message and can't send anything after that ? If not, how long it would take you to wait until you can send again ? 
Related