Hello
Im trying to find a way to send multiple messages (unreliable) in a row within a Mesh network in order to measure time taken,
Im using a modified version of the light switch example project files where the client node sends specified(e.g. 20) number of messages.
To do this Im simply pressing a board button that triggers a for-loop where I use access_model_publish() and an error check, but I receive NRF_ERROR_NO_MEM on about 16/20 messages and the remaining is successfully sent. Do I need to release resources to other event or something? how would I do this
Ive tried searching for other doing the same but cant find any answers except for using the health model to measure throughput but that's not what I'm after
access_message_tx_t message;
void msg_set(uint8_t *msg, uint16_t length){
send_command_msg_t command_msg;
command_msg.length = length;
strncpy(command_msg.command, msg, length);
message.opcode.opcode = SEND_COMMAND;
message.opcode.company_id = ACCESS_COMPANY_ID_NORDIC;
message.p_buffer = (const uint8_t*) &command_msg;
message.length = length;
}
void msg_send(){
for(int i = 0;i<20;i++){
status = send_command_client(&m_clients[0]);
if (status == NRF_ERROR_INVALID_STATE ||
status == NRF_ERROR_NO_MEM ||
status == NRF_ERROR_BUSY) {
__LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "Cannot send. Device is busy: 0x%08lX \r\n", status);
} else {
ERROR_CHECK(status);
}
nrf_delay_ms(50);
}
}
uint32_t send_command_client(simple_on_off_client_t *p_client)
{
uint32_t status = NRF_SUCCESS;
status = access_model_publish(p_client->model_handle, &message);
return status;
}
Tried with different delays between each send as well from 0 to 50micro up to 500 ms