Data Loss after ble_nus_data_send

In uart_event_handle case  APP_UART_DATA_READY

UNUSED_VARIABLE(app_uart_get(&data_array[array_index]));
if ((array_index >= 240))
{
   memcpy(Ble_array_to_apk, data_array, sizeof(data_array));
   memset(data_array, 0, sizeof(data_array));
   overflowflag = true;
   length = array_index;
   array_index = 0;
}
In main fun inside for loop 
if (overflowflag == true)
{
  sequence += 1
  overflowflag = false;
  err_code = ble_nus_data_send(&m_nus, Ble_array_to_apk, &length, m_conn_handle); 
  memset(Ble_array_to_apk, 0, sizeof(Ble_array_to_apk));
}
err_code is success and also data loss is happen 
In stm32 transmitting 240 bytes with 20ms timer 
Parents
  • Hello,

    err_code is success and also data loss is happen 

    It does not seem like you are checking the returned error code for your call to ble_nus_data_send in the shared code.
    Please make sure to pass the returned error code to an APP_ERROR_CHECK to be notified whether an error has occured.
    In addition, please make sure to have DEBUG added to your preprocessor defines like shown in the included image, as this will make your logger output a detailed error message whenever a non-NRF_SUCCESS error code is passed to an APP_ERROR_CHECK.



    Best regards,
    Karl

  • Yes i am checking 
    in stm side i am transmitting 240 with 20ms timer interval gap
    if (overflowflag == true)
    {
    // sent = 'T';
    sequence += 1;
    overflowflag = false;
    // NRF_LOG_INFO("DATA: %s\n", Ble_array_to_apk);
    err_code = ble_nus_data_send(&m_nus, Ble_array_to_apk, &length, m_conn_handle);
    memset(Ble_array_to_apk, 0, sizeof(Ble_array_to_apk));
    NRF_LOG_INFO("err_code: %d,sequence: %d\n", err_code,sequence);
    }
    NRF view:
  • Hello,

    Yes, but the APP_ERROR_CHECK is more certain than catching an change from 0 in a log updating each 20 ms.
    Please share the full log file here using the Insert -> File option so that I may examine the activity around the time in which data is dropped or lost.

    Best regards,
    Karl

  • 00> <info> app_timer: RTC: initialized.
    00> 
    00> <info> app: Debug logging for UART over RTT started.
    00> 
    00> <info> app: Connected
    00> 
    00> <info> app: Data len is set to 0xF4(244)
    00> 
    00> <info> app: err_code: 0,sequence: 1
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 2
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 3
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 4
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 5
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 6
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 7
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 8
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 9
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 10
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 11
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 12
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 13
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 14
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 15
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 16
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 17
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 18
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 19
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 20
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 21
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 22
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 23
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 24
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 25
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 26
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 27
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 28
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 29
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 30
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 31
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 32
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 33
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 34
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 35
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 36
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 37
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 38
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 39
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 40
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 41
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 42
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 43
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 44
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 45
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 46
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 47
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 48
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 49
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 50
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 51
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 52
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 53
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 54
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 55
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 56
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 57
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 58
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 59
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 60
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 61
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 62
    00> 
    00> 
    00> <info> app: err_code: 19,sequence: 63
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 64
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 65
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 66
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 67
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 68
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 69
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 70
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 71
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 72
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 73
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 74
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 75
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 76
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 77
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 78
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 79
    00> 
    00> 
    00> <info> app: err_code: 19,sequence: 80
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 81
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 82
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 83
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 84
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 85
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 86
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 87
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 88
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 89
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 90
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 91
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 92
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 93
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 94
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 95
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 96
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 97
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 98
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 99
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 100
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 101
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 102
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 103
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 104
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 105
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 106
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 107
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 108
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 109
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 110
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 111
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 112
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 113
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 114
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 115
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 116
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 117
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 118
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 119
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 120
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 121
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 122
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 123
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 124
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 125
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 126
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 127
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 128
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 129
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 130
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 131
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 132
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 133
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 134
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 135
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 136
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 137
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 138
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 139
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 140
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 141
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 142
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 143
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 144
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 145
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 146
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 147
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 148
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 149
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 150
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 151
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 152
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 153
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 154
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 155
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 156
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 157
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 158
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 159
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 160
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 161
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 162
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 163
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 164
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 165
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 166
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 167
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 168
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 169
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 170
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 171
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 172
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 173
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 174
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 175
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 176
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 177
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 178
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 179
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 180
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 181
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 182
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 183
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 184
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 185
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 186
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 187
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 188
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 189
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 190
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 191
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 192
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 193
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 194
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 195
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 196
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 197
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 198
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 199
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 200
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 201
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 202
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 203
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 204
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 205
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 206
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 207
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 208
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 209
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 210
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 211
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 212
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 213
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 214
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 215
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 216
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 217
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 218
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 219
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 220
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 221
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 222
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 223
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 224
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 225
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 226
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 227
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 228
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 229
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 230
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 231
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 232
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 233
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 234
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 235
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 236
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 237
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 238
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 239
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 240
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 241
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 242
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 243
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 244
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 245
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 246
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 247
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 248
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 249
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 250
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 251
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 252
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 253
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 254
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 255
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 256
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 257
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 258
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 259
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 260
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 261
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 262
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 263
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 264
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 265
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 266
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 267
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 268
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 269
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 270
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 271
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 272
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 273
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 274
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 275
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 276
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 277
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 278
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 279
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 280
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 281
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 282
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 283
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 284
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 285
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 286
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 287
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 288
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 289
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 290
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 291
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 292
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 293
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 294
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 295
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 296
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 297
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 298
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 299
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 300
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 301
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 302
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 303
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 304
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 305
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 306
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 307
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 308
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 309
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 310
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 311
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 312
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 313
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 314
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 315
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 316
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 317
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 318
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 319
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 320
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 321
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 322
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 323
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 324
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 325
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 326
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 327
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 328
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 329
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 330
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 331
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 332
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 333
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 334
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 335
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 336
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 337
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 338
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 339
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 340
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 341
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 342
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 343
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 344
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 345
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 346
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 347
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 348
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 349
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 350
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 351
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 352
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 353
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 354
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 355
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 356
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 357
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 358
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 359
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 360
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 361
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 362
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 363
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 364
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 365
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 366
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 367
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 368
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 369
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 370
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 371
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 372
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 373
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 374
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 375
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 376
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 377
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 378
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 379
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 380
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 381
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 382
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 383
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 384
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 385
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 386
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 387
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 388
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 389
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 390
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 391
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 392
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 393
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 394
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 395
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 396
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 397
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 398
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 399
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 400
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 401
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 402
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 403
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 404
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 405
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 406
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 407
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 408
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 409
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 410
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 411
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 412
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 413
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 414
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 415
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 416
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 417
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 418
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 419
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 420
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 421
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 422
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 423
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 424
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 425
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 426
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 427
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 428
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 429
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 430
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 431
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 432
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 433
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 434
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 435
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 436
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 437
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 438
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 439
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 440
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 441
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 442
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 443
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 444
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 445
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 446
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 447
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 448
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 449
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 450
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 451
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 452
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 453
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 454
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 455
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 456
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 457
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 458
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 459
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 460
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 461
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 462
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 463
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 464
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 465
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 466
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 467
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 468
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 469
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 470
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 471
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 472
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 473
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 474
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 475
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 476
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 477
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 478
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 479
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 480
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 481
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 482
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 483
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 484
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 485
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 486
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 487
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 488
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 489
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 490
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 491
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 492
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 493
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 494
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 495
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 496
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 497
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 498
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 499
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 500
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 501
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 502
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 503
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 504
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 505
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 506
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 507
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 508
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 509
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 510
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 511
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 512
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 513
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 514
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 515
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 516
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 517
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 518
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 519
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 520
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 521
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 522
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 523
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 524
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 525
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 526
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 527
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 528
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 529
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 530
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 531
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 532
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 533
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 534
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 535
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 536
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 537
    00> 
    00> 
    00> <info> app: err_code: 0,sequence: 538

    1)in receiving side is any issue 

    #define MIN_CONN_INTERVAL MSEC_TO_UNITS(20, UNIT_1_25_MS) 
    #define MAX_CONN_INTERVAL MSEC_TO_UNITS(75, UNIT_1_25_MS) 
    #define SLAVE_LATENCY 0 
    #define CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS) 
    #define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000) 
    #define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(30000) 
    #define MAX_CONN_PARAMS_UPDATE_COUNT 3

    2)changes done in sdk config

    #define BLE_NUS_ENABLED 1
    NRF_SDH_BLE_GATT_MAX_MTU_SIZE 245
    kindly clear me on the maximum and minimum connection interval with some good example. I have not understood the connection intervals clearly
    is this affect my data while receiving
  • Hello,

    Thank you for sharing your log.
    From the shared log you are occasionally getting error 19, which is ENODEV - No such device

    The reason why you are getting data loss in this case is because your application does not actually do any error handling - such as retrying the previous call to queue the data for transfer. You should implement handling of failed calls so that you are prepared for this happening for instance as a result of the buffer filling up due to the devices operating at the edge of connectivity or in a poor RF environment.

    manobala12 said:
    kindly clear me on the maximum and minimum connection interval with some good example. I have not understood the connection intervals clearly

    The connection interval parameter on the central device decides how frequent the communication between the two devices will be. With a connection interval of 20 ms the central will send a packet to the peer every 20 ms.

    You can see this documentation for throughput measurements here as well.

    Best regards,
    Karl

Reply
  • Hello,

    Thank you for sharing your log.
    From the shared log you are occasionally getting error 19, which is ENODEV - No such device

    The reason why you are getting data loss in this case is because your application does not actually do any error handling - such as retrying the previous call to queue the data for transfer. You should implement handling of failed calls so that you are prepared for this happening for instance as a result of the buffer filling up due to the devices operating at the edge of connectivity or in a poor RF environment.

    manobala12 said:
    kindly clear me on the maximum and minimum connection interval with some good example. I have not understood the connection intervals clearly

    The connection interval parameter on the central device decides how frequent the communication between the two devices will be. With a connection interval of 20 ms the central will send a packet to the peer every 20 ms.

    You can see this documentation for throughput measurements here as well.

    Best regards,
    Karl

Children
  • Hello Karl

     Transmitting NO\n  1 time via uart to nrf52840

    In NRF side

    case APP_UART_DATA_READY:
    app_uart_get(&data_array[array_index]);
    array_index++;
    buff = data_array[0];
    NRF_LOG_INFO("DATA: %s",data_array);
    if ((data_array[array_index - 1] == '\n'))
    {
    switch (buff)
    {
    // err_code = ble_nus_data_send(&m_nus, data_array, &length, m_conn_handle);
    // index = 0;
    case 'N':
    array_index = 0;
    // NRF_LOG_INFO("BLE_ON\n");
    sequence = 0;
    ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
    break;
    case 'L':
    array_index = 0;
    // APP_ERROR_CHECK(err_code);
    // NRF_LOG_INFO("BLE_OFF\n");
    if ((sent == 67) || (sent == 82))
    {
    sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
    }
    else
    sd_ble_gap_adv_stop(m_advertising.adv_handle);
    break;
    }
    }
    break;
    Result in RTT viewer:
    Why it printing 3 time how its working 
  • Hello,

    Please use the Insert -> Code feature when sharing code here on DevZone.

    It is not apparent from the code you have shared why NO is printed multiple times from the UART.
    Please share more of the relevant code.

    Best regards,
    Karl

  • #include <stdint.h>
    #include <string.h>
    #include <stddef.h>
    #include "nordic_common.h"
    #include "nrf.h"
    #include "ble_hci.h"
    #include "ble_advdata.h"
    #include "ble_advertising.h"
    #include "ble_conn_params.h"
    #include "nrf_sdh.h"
    #include "nrf_sdh_soc.h"
    #include "nrf_sdh_ble.h"
    #include "nrf_ble_gatt.h"
    #include "nrf_ble_qwr.h"
    #include "app_timer.h"
    #include "ble_nus.h"
    #include "app_uart.h"
    #include "app_util_platform.h"
    #include "bsp_btn_ble.h"
    #include "nrf_pwr_mgmt.h"
    #include "nrf_delay.h"
    #include "SEGGER_RTT.h"
    #include "nrf_gpio.h"
    #include "nrf_drv_uart.h"
    
    #if defined(UART_PRESENT)
    #include "nrf_uart.h"
    #endif
    #if defined(UARTE_PRESENT)
    #include "nrf_uarte.h"
    #endif
    
    #include "nrf_log.h"
    #include "nrf_log_ctrl.h"
    #include "nrf_log_default_backends.h"
    
    #define APP_BLE_CONN_CFG_TAG 1 /**< A tag identifying the SoftDevice BLE configuration. */
    
    #define DEVICE_NAME "CPAPR&D"                            /**< Name of device. Will be included in the advertising data. */
    #define NUS_SERVICE_UUID_TYPE BLE_UUID_TYPE_VENDOR_BEGIN /**< UUID type for the Nordic UART Service (vendor specific). */
    
    #define APP_BLE_OBSERVER_PRIO 3 /**< Application's BLE observer priority. You shouldn't need to modify this value. */
    
    #define APP_ADV_INTERVAL 64 /**< The advertising interval (in units of 0.625 ms. This value corresponds to 40 ms). */
    
    #define APP_ADV_DURATION 5000 /**< The advertising duration (180 seconds) in units of 10 milliseconds. */
    
    #define MIN_CONN_INTERVAL MSEC_TO_UNITS(20, UNIT_1_25_MS)    /**< Minimum acceptable connection interval (20 ms), Connection interval uses 1.25 ms units. */
    #define MAX_CONN_INTERVAL MSEC_TO_UNITS(75, UNIT_1_25_MS)    /**< Maximum acceptable connection interval (75 ms), Connection interval uses 1.25 ms units. */
    #define SLAVE_LATENCY 0                                      /**< Slave latency. */
    #define CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS)     /**< Connection supervisory timeout (4 seconds), Supervision Timeout uses 10 ms units. */
    #define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000) /**< Time from initiating event (connect or start of notification) to first time sd_ble_gap_conn_param_update is called (5 seconds). */
    #define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(30000) /**< Time between each call to sd_ble_gap_conn_param_update after the first call (30 seconds). */
    #define MAX_CONN_PARAMS_UPDATE_COUNT 3                       /**< Number of attempts before giving up the connection parameter negotiation. */
    
    APP_TIMER_DEF(m_TRAIL_timer_id);
    #define TRAIL_TIMER APP_TIMER_TICKS(1000)
    
    static uint8_t array_index = 0;
    uint8_t Ble_array_to_apk[240];
    static uint8_t data_array[251];
    bool overflowflag = false;
    bool uartrxrdyflag=false;
    uint16_t length;
    uint32_t sequence = 0;
    uint32_t err_code;
    
    #define DEAD_BEEF 0xDEADBEEF /**< Value used as error code on stack dump, can be used to identify stack location on stack unwind. */
    
    #define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */
    #define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */
    
    BLE_NUS_DEF(m_nus, NRF_SDH_BLE_TOTAL_LINK_COUNT); /**< BLE NUS service instance. */
    NRF_BLE_GATT_DEF(m_gatt);                         /**< GATT module instance. */
    NRF_BLE_QWR_DEF(m_qwr);                           /**< Context for the Queued Write module.*/
    BLE_ADVERTISING_DEF(m_advertising);               /**< Advertising module instance. */
    uint8_t sent = 0;
    int LED_BLINK = NRF_GPIO_PIN_MAP(1, 06);
    
    static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID;               /**< Handle of the current connection. */
    static uint16_t m_ble_nus_max_data_len = BLE_GATT_ATT_MTU_DEFAULT - 3; /**< Maximum length of data (in bytes) that can be transmitted to the peer by the Nordic UART service module. */
    static ble_uuid_t m_adv_uuids[] =                                      /**< Universally unique service identifier. */
        {
            {BLE_UUID_NUS_SERVICE, NUS_SERVICE_UUID_TYPE}};
    
    static void timeout_handler(void *p_context);
    void AppUartHandler();
    
    // static void advertising_start(void);
    static void advertising_init(void);
    /**@brief Function for assert macro callback.
     *
     * @details This function will be called in case of an assert in the SoftDevice.
     *
     * @warning This handler is an example only and does not fit a final product. You need to analyse
     *          how your product is supposed to react in case of Assert.
     * @warning On assert from the SoftDevice, the system can only recover on reset.
     *
     * @param[in] line_num    Line number of the failing ASSERT call.
     * @param[in] p_file_name File name of the failing ASSERT call.
     */
    void assert_nrf_callback(uint16_t line_num, const uint8_t *p_file_name)
    {
        app_error_handler(DEAD_BEEF, line_num, p_file_name);
    }
    
    /**@brief Function for initializing the timer module.
     */
    static void timers_init(void)
    {
        ret_code_t err_code = app_timer_init();
        APP_ERROR_CHECK(err_code);
    }
    
    /**@brief Function for the GAP initialization.
     *
     * @details This function will set up all the necessary GAP (Generic Access Profile) parameters of
     *          the device. It also sets the permissions and appearance.
     */
    static void gap_params_init(void)
    {
        uint32_t err_code;
        ble_gap_conn_params_t gap_conn_params;
        ble_gap_conn_sec_mode_t sec_mode;
    
        BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);
    
        err_code = sd_ble_gap_device_name_set(&sec_mode,
                                              (const uint8_t *)DEVICE_NAME,
                                              strlen(DEVICE_NAME));
        APP_ERROR_CHECK(err_code);
    
        memset(&gap_conn_params, 0, sizeof(gap_conn_params));
    
        gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL;
        gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL;
        gap_conn_params.slave_latency = SLAVE_LATENCY;
        gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT;
    
        err_code = sd_ble_gap_ppcp_set(&gap_conn_params);
        APP_ERROR_CHECK(err_code);
    }
    
    /**@brief Function for handling Queued Write Module errors.
     *
     * @details A pointer to this function will be passed to each service which may need to inform the
     *          application about an error.
     *
     * @param[in]   nrf_error   Error code containing information about what went wrong.
     */
    static void nrf_qwr_error_handler(uint32_t nrf_error)
    {
        APP_ERROR_HANDLER(nrf_error);
    }
    
    /**@brief Function for handling the data from the Nordic UART Service.
     *
     * @details This function will process the data received from the Nordic UART BLE Service and send
     *          it to the UART module.
     *
     * @param[in] p_evt       Nordic UART Service event.
     */
    /**@snippet [Handling the data received over BLE] */
    
    static void nus_data_handler(ble_nus_evt_t *p_evt)
    {
        // if (p_evt->type == BLE_NUS_EVT_RX_DATA)
        // {
        //     uint32_t err_code;
        //     NRF_LOG_DEBUG("Received data from BLE NUS. Writing data on UART.");
        //     NRF_LOG_INFO("NUS DATA");
        //     NRF_LOG_HEXDUMP_DEBUG(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
        //     for (uint32_t i = 0; i < p_evt->params.rx_data.length; i++)
        //     {
        //         do
        //         {
        //             err_code = app_uart_put(p_evt->params.rx_data.p_data[i]);
        //             if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY))
        //             {
        //                 NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code);
        //                 APP_ERROR_CHECK(err_code);
        //             }
        //         } while (err_code == NRF_ERROR_BUSY);
        //     }
        //     if (p_evt->params.rx_data.p_data[p_evt->params.rx_data.length - 1] == '\r')
        //     {
        //         while (app_uart_put('\n') == NRF_ERROR_BUSY)
        //             ;
        //     }
        // }
    }
    /**@snippet [Handling the data received over BLE] */
    
    /**@brief Function for initializing services that will be used by the application.
     */
    static void services_init(void)
    {
        uint32_t err_code;
        ble_nus_init_t nus_init;
        nrf_ble_qwr_init_t qwr_init = {0};
    
        // Initialize Queued Write Module.
        qwr_init.error_handler = nrf_qwr_error_handler;
    
        err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init);
        APP_ERROR_CHECK(err_code);
    
        // Initialize NUS.
        memset(&nus_init, 0, sizeof(nus_init));
    
        nus_init.data_handler = nus_data_handler;
    
        err_code = ble_nus_init(&m_nus, &nus_init);
        APP_ERROR_CHECK(err_code);
    }
    
    /**@brief Function for handling an event from the Connection Parameters Module.
     *
     * @details This function will be called for all events in the Connection Parameters Module
     *          which are passed to the application.
     *
     * @note All this function does is to disconnect. This could have been done by simply setting
     *       the disconnect_on_fail config parameter, but instead we use the event handler
     *       mechanism to demonstrate its use.
     *
     * @param[in] p_evt  Event received from the Connection Parameters Module.
     */
    static void on_conn_params_evt(ble_conn_params_evt_t *p_evt)
    {
        uint32_t err_code;
        if (p_evt->evt_type == BLE_CONN_PARAMS_EVT_FAILED)
        {
            err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_CONN_INTERVAL_UNACCEPTABLE);
            APP_ERROR_CHECK(err_code);
        }
    }
    
    /**@brief Function for handling errors from the Connection Parameters module.
     *
     * @param[in] nrf_error  Error code containing information about what went wrong.
     */
    static void conn_params_error_handler(uint32_t nrf_error)
    {
        APP_ERROR_HANDLER(nrf_error);
    }
    
    /**@brief Function for initializing the Connection Parameters module.
     */
    static void conn_params_init(void)
    {
        uint32_t err_code;
        ble_conn_params_init_t cp_init;
    
        memset(&cp_init, 0, sizeof(cp_init));
    
        cp_init.p_conn_params = NULL;
        cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY;
        cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY;
        cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT;
        cp_init.start_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID;
        cp_init.disconnect_on_fail = false;
        cp_init.evt_handler = on_conn_params_evt;
        cp_init.error_handler = conn_params_error_handler;
    
        err_code = ble_conn_params_init(&cp_init);
        APP_ERROR_CHECK(err_code);
    }
    
    /**@brief Function for putting the chip into sleep mode.
     *
     * @note This function will not return.
     */
    static void sleep_mode_enter(void)
    {
        uint32_t err_code = bsp_indication_set(BSP_INDICATE_IDLE);
        APP_ERROR_CHECK(err_code);
    
        // Prepare wakeup buttons.
        err_code = bsp_btn_ble_sleep_mode_prepare();
        APP_ERROR_CHECK(err_code);
    
        // Go to system-off mode (this function will not return; wakeup will cause a reset).
        err_code = sd_power_system_off();
        APP_ERROR_CHECK(err_code);
    }
    
    /**@brief Function for handling advertising events.
     *
     * @details This function will be called for advertising events which are passed to the application.
     *
     * @param[in] ble_adv_evt  Advertising event.
     */
    static void on_adv_evt(ble_adv_evt_t ble_adv_evt)
    {
        uint32_t err_code;
        switch (ble_adv_evt)
        {
        case BLE_ADV_EVT_FAST:
            err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); // for blinking LED1
            APP_ERROR_CHECK(err_code);
            break;
        case BLE_ADV_EVT_IDLE:
            NRF_LOG_INFO("Advertising event received %d", BLE_ADV_EVT_IDLE);
            // sleep_mode_enter();
            sd_ble_gap_adv_stop(m_advertising.adv_handle);
            break;
        default:
            break;
        }
    }
    
    /**@brief Function for handling BLE events.
     *
     * @param[in]   p_ble_evt   Bluetooth stack event.
     * @param[in]   p_context   Unused.
     */
    static void ble_evt_handler(ble_evt_t const *p_ble_evt, void *p_context)
    {
        uint32_t err_code;
    
        switch (p_ble_evt->header.evt_id)
        {
        case BLE_GAP_EVT_CONNECTED:
            sent = 67;
            NRF_LOG_INFO("Connected");
            // err_code = bsp_indication_set(BSP_INDICATE_CONNECTED);
            // APP_ERROR_CHECK(err_code);
            m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
            err_code = nrf_ble_qwr_conn_handle_assign(&m_qwr, m_conn_handle);
            APP_ERROR_CHECK(err_code);
            break;
    
        case BLE_GAP_EVT_DISCONNECTED:
            sent = 68;
            NRF_LOG_INFO("Disconnected");
            if (p_ble_evt->header.evt_id == BLE_GAP_EVT_DISCONNECTED)
            {
                sd_ble_gap_adv_stop(m_advertising.adv_handle);
            }
            // LED indication will be changed when advertising starts.
            // m_conn_handle = BLE_CONN_HANDLE_INVALID;
            break;
    
        case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
            NRF_LOG_DEBUG("PHY update request.");
            ble_gap_phys_t const phys =
                {
                    .rx_phys = BLE_GAP_PHY_AUTO,
                    .tx_phys = BLE_GAP_PHY_AUTO,
                };
            err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys);
            APP_ERROR_CHECK(err_code);
            break;
    
        case BLE_GAP_EVT_SEC_PARAMS_REQUEST:
            // Pairing not supported
            err_code = sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, NULL, NULL);
            APP_ERROR_CHECK(err_code);
            break;
    
        case BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST: // FILES
        {
            ble_gap_data_length_params_t dl_params;
    
            // Clearing the struct will effectivly set members to @ref BLE_GAP_DATA_LENGTH_AUTO
            memset(&dl_params, 0, sizeof(ble_gap_data_length_params_t));
            err_code = sd_ble_gap_data_length_update(p_ble_evt->evt.gap_evt.conn_handle, &dl_params, NULL);
            APP_ERROR_CHECK(err_code);
        }
        break;
    
        case BLE_GATTS_EVT_SYS_ATTR_MISSING:
            // No system attributes have been stored.
            err_code = sd_ble_gatts_sys_attr_set(m_conn_handle, NULL, 0, 0);
            APP_ERROR_CHECK(err_code);
            break;
    
        case BLE_GATTC_EVT_TIMEOUT:
            NRF_LOG_INFO("GATTC_TIMEOUT");
            // Disconnect on GATT Client timeout event.
            err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
            APP_ERROR_CHECK(err_code);
            break;
    
        case BLE_GATTS_EVT_TIMEOUT:
            NRF_LOG_INFO("GATTS_TIMEOUT");
            // Disconnect on GATT Server timeout event.
            err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gatts_evt.conn_handle,
                                             BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
            APP_ERROR_CHECK(err_code);
            break;
        case BLE_GATTS_EVT_WRITE:
            sent = 82; // Notification Enable
            // NRF_LOG_INFO("UART SERVICES\n");
            break;
        default:
            // No implementation needed.
            break;
        }
    }
    
    /**@brief Function for the SoftDevice initialization.
     *
     * @details This function initializes the SoftDevice and the BLE event interrupt.
     */
    static void ble_stack_init(void)
    {
        ret_code_t err_code;
        err_code = nrf_sdh_enable_request();
        APP_ERROR_CHECK(err_code);
        // Configure the BLE stack using the default settings.
        // Fetch the start address of the application RAM.
        uint32_t ram_start = 0;
        err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start);
        APP_ERROR_CHECK(err_code);
    
        // Enable BLE stack.
        err_code = nrf_sdh_ble_enable(&ram_start);
        APP_ERROR_CHECK(err_code);
    
        // Register a handler for BLE events.
        NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
    }
    
    /**@brief Function for handling events from the GATT library. */
    void gatt_evt_handler(nrf_ble_gatt_t *p_gatt, nrf_ble_gatt_evt_t const *p_evt)
    {
        if ((m_conn_handle == p_evt->conn_handle) && (p_evt->evt_id == NRF_BLE_GATT_EVT_ATT_MTU_UPDATED))
        {
            m_ble_nus_max_data_len = p_evt->params.att_mtu_effective - OPCODE_LENGTH - HANDLE_LENGTH;
            NRF_LOG_INFO("Data len is set to 0x%X(%d)", m_ble_nus_max_data_len, m_ble_nus_max_data_len);
        }
        NRF_LOG_DEBUG("ATT MTU exchange completed. central 0x%x peripheral 0x%x",
                      p_gatt->att_mtu_desired_central,
                      p_gatt->att_mtu_desired_periph);
    }
    
    /**@brief Function for initializing the GATT library. */
    void gatt_init(void)
    {
        ret_code_t err_code;
    
        err_code = nrf_ble_gatt_init(&m_gatt, gatt_evt_handler);
        APP_ERROR_CHECK(err_code);
    
        err_code = nrf_ble_gatt_att_mtu_periph_set(&m_gatt, NRF_SDH_BLE_GATT_MAX_MTU_SIZE);
        APP_ERROR_CHECK(err_code);
    }
    
    /**@brief Function for handling events from the BSP module.
     *
     * @param[in]   event   Event generated by button press.
     */
    void bsp_event_handler(bsp_event_t event)
    {
        uint32_t err_code;
        switch (event)
        {
        case BSP_EVENT_SLEEP:
            sleep_mode_enter();
            break;
    
        case BSP_EVENT_DISCONNECT:
            err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
            if (err_code != NRF_ERROR_INVALID_STATE)
            {
                APP_ERROR_CHECK(err_code);
            }
            break;
        case BSP_EVENT_WHITELIST_OFF:
            if (m_conn_handle == BLE_CONN_HANDLE_INVALID)
            {
                err_code = ble_advertising_restart_without_whitelist(&m_advertising);
                if (err_code != NRF_ERROR_INVALID_STATE)
                {
                    APP_ERROR_CHECK(err_code);
                }
            }
            break;
    
        default:
            break;
        }
    }
    
    /**@brief   Function for handling app_uart events.
     *
     * @details This function will receive a single character from the app_uart module and append it to
     *          a string. The string will be be sent over BLE when the last character received was a
     *          'new line' '\n' (hex 0x0A) or if the string has reached the maximum data length.
     */
    /**@snippet [Handling the data received over UART] */
    void uart_event_handle(app_uart_evt_t *p_event)
    {
        // int MacAddr;
        char buff;
        static uint8_t index = 0;
        uint32_t err_code;
        switch (p_event->evt_type)
        {
        case APP_UART_DATA_READY:
            // MacAddr = NRF_FICR->DEVICEADDR[0];
            NRF_LOG_INFO("UART_COMM_READY\n");
            uartrxrdyflag = true;
            // NRF_LOG_INFO("app_uart :%d\n",err_code);
            break;
    
        case APP_UART_COMMUNICATION_ERROR:
            NRF_LOG_INFO("UART_COMM_ERROR\n");
            // APP_ERROR_HANDLER(p_event->data.error_communication);
            break;
    
        case APP_UART_FIFO_ERROR:
            NRF_LOG_INFO("UART_FIFO_ERROR\n");
            // APP_ERROR_HANDLER(p_event->data.error_code);
            break;
        case APP_UART_TX_EMPTY:
            uartrxrdyflag = false;
            array_index = 0;
            // memset(data_array, 0, sizeof(data_array));
            // NRF_LOG_INFO("APP_UART_TX_EMPTY\n");
    
        break;
        default:
            break;
        }
    }
    void AppUartHandler()
    {
        char buff;
            // NRF_LOG_INFO("AppUartHandler\n");
    
        app_uart_get(&data_array[array_index]);
            array_index++;
            buff = data_array[0];
            NRF_LOG_INFO("DATA: %s",data_array);
    
            if(data_array[array_index] == 'T')
            {
                memcpy(Ble_array_to_apk, data_array, sizeof(data_array));
                memset(data_array, 0, sizeof(data_array));
                overflowflag = true;
                length = array_index;
                array_index = 0;
    
            }
            // if ((array_index >= 240))
            // {
            // }    
    
            if ((data_array[array_index - 1] == '\n'))
            {
                switch (buff)
                {
                //     err_code = ble_nus_data_send(&m_nus, data_array, &length, m_conn_handle);
                // index = 0;
                case 'N':
                    array_index = 0;
                    memset(data_array, 0, sizeof(data_array));
                    // NRF_LOG_INFO("BLE_ON\n");
                    sequence = 0;
                    ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
                    break;
                case 'L':
                    array_index = 0;
                    memset(data_array, 0, sizeof(data_array));
                    // APP_ERROR_CHECK(err_code);
                    // NRF_LOG_INFO("BLE_OFF\n");
                    if ((sent == 67) || (sent == 82))
                    {
                        sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
                    }
                    else
                        sd_ble_gap_adv_stop(m_advertising.adv_handle);
                    break;
                }
            }
    
    }
    /**@snippet [Handling the data received over UART] */
    
    /**@brief  Function for initializing the UART module.
     */
    /**@snippet [UART Initialization] */
    static void uart_init(void)
    {
        // NRF_LOG_INFO("uart_init..\n");
        uint32_t err_code;
        app_uart_comm_params_t const comm_params =
        {
            UART_APP_RX,
            UART_APP_TX,
            0,
            0,
            APP_UART_FLOW_CONTROL_DISABLED,
            false,
    #if defined(UART_PRESENT)
            .baud_rate = NRF_UART_BAUDRATE_115200
    #else
            .baud_rate = NRF_UARTE_BAUDRATE_115200
    #endif
        };
        APP_UART_FIFO_INIT(&comm_params,UART_RX_BUF_SIZE,UART_TX_BUF_SIZE,uart_event_handle,APP_IRQ_PRIORITY_HIGH,err_code);
        // APP_UART_INIT(&comm_params,uart_event_handle,APP_IRQ_PRIORITY_LOWEST,err_code);
        APP_ERROR_CHECK(err_code);
    }
    /**@snippet [UART Initialization] */
    
    /**@brief Function for initializing the Advertising functionality.
     */
    static void advertising_init(void)
    {
        // NRF_LOG_INFO("advertising_init..\n");
        uint32_t err_code;
        ble_advertising_init_t init;
    
        memset(&init, 0, sizeof(init));
    
        init.advdata.name_type = BLE_ADVDATA_FULL_NAME;
        init.advdata.include_appearance = false;
        init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;
    
        init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);
        init.srdata.uuids_complete.p_uuids = m_adv_uuids;
        init.config.ble_adv_fast_enabled = true;
        init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
        init.config.ble_adv_fast_timeout = APP_ADV_DURATION;
        init.evt_handler = on_adv_evt;
    
        err_code = ble_advertising_init(&m_advertising, &init);
        APP_ERROR_CHECK(err_code);
    
        ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
    }
    
    /**@brief Function for initializing the nrf log module.
     */
    static void log_init(void)
    {
        // NRF_LOG_INFO("LOG init..\n");
        ret_code_t err_code = NRF_LOG_INIT(NULL);
        APP_ERROR_CHECK(err_code);
    
        NRF_LOG_DEFAULT_BACKENDS_INIT();
    }
    
    /**@brief Function for initializing power management.
     */
    static void power_management_init(void)
    {
        // NRF_LOG_INFO("PWR_MAN init.\n");
        ret_code_t err_code;
        err_code = nrf_pwr_mgmt_init();
        APP_ERROR_CHECK(err_code);
    }
    
    /**@brief Function for handling the idle state (main loop).
     *
     * @details If there is no pending log operation, then sleep until next the next event occurs.
     */
    static void idle_state_handle(void)
    {
        if (NRF_LOG_PROCESS() == false)
        {
            nrf_pwr_mgmt_run();
        }
    }
    
    /**@brief Function for starting advertising.
     */
    // static void advertising_start(void)
    // {
    //     // nrf_gpio_pin_toggle(LED_BLINK)
    //     uint32_t err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
    //     APP_ERROR_CHECK(err_code);
    // }
    
    /**@brief Application main function.
     */
    int main(void)
    {
        uart_init();
        log_init();
        SEGGER_RTT_Init();
        timers_init();
        ble_stack_init();
        gap_params_init();
        gatt_init();
        services_init();
        advertising_init();
        conn_params_init();
        app_timer_create(&m_TRAIL_timer_id, APP_TIMER_MODE_REPEATED, timeout_handler);
        app_timer_start(m_TRAIL_timer_id, TRAIL_TIMER, NULL);
        // nrf_gpio_cfg_output(LED_BLINK);
    
        // Start execution.
    
        NRF_LOG_INFO("Debug logging for UART over RTT started.");
    
        // advertising_start();
        for (;;)
        {
            idle_state_handle();
            if(uartrxrdyflag == true)
            {
                 AppUartHandler();
            }
             if (overflowflag == true)
            {
                sequence += 1;
                overflowflag = false;
    
                err_code = ble_nus_data_send(&m_nus, Ble_array_to_apk, &length, m_conn_handle);
                // if(err_code == NRF_SUCCESS)
                // {
    
                // }
                memset(Ble_array_to_apk, 0, sizeof(Ble_array_to_apk));
                NRF_LOG_INFO("err_code: %d,sequence: %d\n", err_code, sequence);
            }
        }
    }
    
    static void timeout_handler(void *p_context)
    {
        // NRF_LOG_INFO("sent :%d\n",sent);
        UNUSED_PARAMETER(p_context);
        // NRF_LOG_INFO("trail started..\n");
        app_uart_put(sent);
    }
    /**
     * @}
     */

    In this way i trasmit 240 bytes every 10ms there will be loss happens.

    How can i rectify this 

  • Hello,

    manobala12 said:
    In this way i trasmit 240 bytes every 10ms there will be loss happens.

    Please be as specific as possible when you are writing about the issue.
    Do you mean that this code aims to send 240 bytes over BLE each second, but you are seeing the same kind of issue as you have described and illustrated with your logs earlier?

    Looking through your code it seems to me that you are trying to implement something very similar to the functionality in the unmodified BLE NUS peripheral example - could elaborate on how you would like to change the functionality of the original example?

    In your case you are for instance not checking the returned error code for the app_uart_get function, which if it fails will cause the remaining of your AppUartHandler to fail.
    I think your issue lies in the AppUartHandler in this case. Is your intention to just check the received UART data for some specific bytes (local commands, such as N and L), and then to also send this same data over BLE to another device? If so, have you ensured that this data never will contain the 'command symbols'?

    Please elaborate on the functionality you are trying to achieve here, so that I may best advice you on how to approach this.

    Best regards,
    Karl

Related