Skip to content

Commit 0b9e303

Browse files
committed
Merge branch 'bugfix/ble_mesh_client_msg_optimize' into 'master'
Bugfix/ble mesh client msg optimize See merge request espressif/esp-idf!9366
2 parents b08c288 + 0fcd0bb commit 0b9e303

21 files changed

+580
-1284
lines changed

components/bt/esp_ble_mesh/btc/btc_ble_mesh_config_model.c

Lines changed: 73 additions & 88 deletions
Large diffs are not rendered by default.

components/bt/esp_ble_mesh/btc/btc_ble_mesh_generic_model.c

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,6 @@ void bt_mesh_generic_client_cb_evt_to_btc(u32_t opcode, u8_t evt_type,
385385
{
386386
esp_ble_mesh_generic_client_cb_param_t cb_params = {0};
387387
esp_ble_mesh_client_common_param_t params = {0};
388-
size_t length = 0U;
389388
uint8_t act = 0U;
390389

391390
if (!model || !ctx) {
@@ -426,8 +425,7 @@ void bt_mesh_generic_client_cb_evt_to_btc(u32_t opcode, u8_t evt_type,
426425
cb_params.params = &params;
427426

428427
if (val && len) {
429-
length = (len <= sizeof(cb_params.status_cb)) ? len : sizeof(cb_params.status_cb);
430-
memcpy(&cb_params.status_cb, val, length);
428+
memcpy(&cb_params.status_cb, val, MIN(len, sizeof(cb_params.status_cb)));
431429
}
432430

433431
btc_ble_mesh_generic_client_callback(&cb_params, act);
@@ -454,7 +452,6 @@ void btc_ble_mesh_generic_client_call_handler(btc_msg_t *msg)
454452
btc_ble_mesh_generic_client_args_t *arg = NULL;
455453
esp_ble_mesh_generic_client_cb_param_t cb = {0};
456454
bt_mesh_client_common_param_t common = {0};
457-
bt_mesh_role_param_t role_param = {0};
458455

459456
if (!msg || !msg->arg) {
460457
BT_ERR("%s, Invalid parameter", __func__);
@@ -466,12 +463,6 @@ void btc_ble_mesh_generic_client_call_handler(btc_msg_t *msg)
466463
switch (msg->act) {
467464
case BTC_BLE_MESH_ACT_GENERIC_CLIENT_GET_STATE: {
468465
params = arg->generic_client_get_state.params;
469-
role_param.model = (struct bt_mesh_model *)params->model;
470-
role_param.role = params->msg_role;
471-
if (bt_mesh_set_client_model_role(&role_param)) {
472-
BT_ERR("Failed to set model role");
473-
break;
474-
}
475466
common.opcode = params->opcode;
476467
common.model = (struct bt_mesh_model *)params->model;
477468
common.ctx.net_idx = params->ctx.net_idx;
@@ -480,10 +471,10 @@ void btc_ble_mesh_generic_client_call_handler(btc_msg_t *msg)
480471
common.ctx.send_rel = params->ctx.send_rel;
481472
common.ctx.send_ttl = params->ctx.send_ttl;
482473
common.msg_timeout = params->msg_timeout;
474+
common.msg_role = params->msg_role;
483475

484476
cb.params = arg->generic_client_get_state.params;
485-
cb.error_code = bt_mesh_generic_client_get_state(&common,
486-
(void *)arg->generic_client_get_state.get_state, (void *)&cb.status_cb);
477+
cb.error_code = bt_mesh_generic_client_get_state(&common, arg->generic_client_get_state.get_state);
487478
if (cb.error_code) {
488479
/* If send failed, callback error_code to app layer immediately */
489480
btc_ble_mesh_generic_client_callback(&cb, ESP_BLE_MESH_GENERIC_CLIENT_GET_STATE_EVT);
@@ -492,12 +483,6 @@ void btc_ble_mesh_generic_client_call_handler(btc_msg_t *msg)
492483
}
493484
case BTC_BLE_MESH_ACT_GENERIC_CLIENT_SET_STATE: {
494485
params = arg->generic_client_set_state.params;
495-
role_param.model = (struct bt_mesh_model *)params->model;
496-
role_param.role = params->msg_role;
497-
if (bt_mesh_set_client_model_role(&role_param)) {
498-
BT_ERR("Failed to set model role");
499-
break;
500-
}
501486
common.opcode = params->opcode;
502487
common.model = (struct bt_mesh_model *)params->model;
503488
common.ctx.net_idx = params->ctx.net_idx;
@@ -506,10 +491,10 @@ void btc_ble_mesh_generic_client_call_handler(btc_msg_t *msg)
506491
common.ctx.send_rel = params->ctx.send_rel;
507492
common.ctx.send_ttl = params->ctx.send_ttl;
508493
common.msg_timeout = params->msg_timeout;
494+
common.msg_role = params->msg_role;
509495

510496
cb.params = arg->generic_client_set_state.params;
511-
cb.error_code = bt_mesh_generic_client_set_state(&common,
512-
(void *)arg->generic_client_set_state.set_state, (void *)&cb.status_cb);
497+
cb.error_code = bt_mesh_generic_client_set_state(&common, arg->generic_client_set_state.set_state);
513498
if (cb.error_code) {
514499
/* If send failed, callback error_code to app layer immediately */
515500
btc_ble_mesh_generic_client_callback(&cb, ESP_BLE_MESH_GENERIC_CLIENT_SET_STATE_EVT);
@@ -711,7 +696,6 @@ void bt_mesh_generic_server_cb_evt_to_btc(u8_t evt_type, struct bt_mesh_model *m
711696
const u8_t *val, size_t len)
712697
{
713698
esp_ble_mesh_generic_server_cb_param_t cb_params = {0};
714-
size_t length = 0U;
715699
uint8_t act = 0U;
716700

717701
if (model == NULL || ctx == NULL) {
@@ -745,8 +729,7 @@ void bt_mesh_generic_server_cb_evt_to_btc(u8_t evt_type, struct bt_mesh_model *m
745729
cb_params.ctx.send_ttl = ctx->send_ttl;
746730

747731
if (val && len) {
748-
length = (len <= sizeof(cb_params.value)) ? len : sizeof(cb_params.value);
749-
memcpy(&cb_params.value, val, length);
732+
memcpy(&cb_params.value, val, MIN(len, sizeof(cb_params.value)));
750733
}
751734

752735
btc_ble_mesh_generic_server_callback(&cb_params, act);

components/bt/esp_ble_mesh/btc/btc_ble_mesh_health_model.c

Lines changed: 36 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
#include "health_cli.h"
2222
#include "esp_ble_mesh_health_model_api.h"
2323

24-
extern s32_t health_msg_timeout;
25-
2624
/* Health Client Model related functions */
2725

2826
static inline void btc_ble_mesh_health_client_cb_to_app(esp_ble_mesh_health_client_cb_event_t event,
@@ -251,7 +249,6 @@ void bt_mesh_health_client_cb_evt_to_btc(u32_t opcode, u8_t evt_type,
251249
{
252250
esp_ble_mesh_health_client_cb_param_t cb_params = {0};
253251
esp_ble_mesh_client_common_param_t params = {0};
254-
size_t length = 0U;
255252
uint8_t act = 0U;
256253

257254
if (!model || !ctx) {
@@ -292,8 +289,7 @@ void bt_mesh_health_client_cb_evt_to_btc(u32_t opcode, u8_t evt_type,
292289
cb_params.params = &params;
293290

294291
if (val && len) {
295-
length = (len <= sizeof(cb_params.status_cb)) ? len : sizeof(cb_params.status_cb);
296-
memcpy(&cb_params.status_cb, val, length);
292+
memcpy(&cb_params.status_cb, val, MIN(len, sizeof(cb_params.status_cb)));
297293
}
298294

299295
btc_ble_mesh_health_client_callback(&cb_params, act);
@@ -317,7 +313,7 @@ void btc_ble_mesh_health_publish_callback(u32_t opcode, struct bt_mesh_model *mo
317313
static int btc_ble_mesh_health_client_get_state(esp_ble_mesh_client_common_param_t *params,
318314
esp_ble_mesh_health_client_get_state_t *get)
319315
{
320-
struct bt_mesh_msg_ctx ctx = {0};
316+
bt_mesh_client_common_param_t param = {0};
321317

322318
if (params == NULL) {
323319
BT_ERR("%s, Invalid parameter", __func__);
@@ -329,23 +325,25 @@ static int btc_ble_mesh_health_client_get_state(esp_ble_mesh_client_common_param
329325
return -EINVAL;
330326
}
331327

332-
ctx.net_idx = params->ctx.net_idx;
333-
ctx.app_idx = params->ctx.app_idx;
334-
ctx.addr = params->ctx.addr;
335-
ctx.send_rel = params->ctx.send_rel;
336-
ctx.send_ttl = params->ctx.send_ttl;
337-
338-
health_msg_timeout = params->msg_timeout;
328+
param.opcode = params->opcode;
329+
param.model = (struct bt_mesh_model *)params->model;
330+
param.ctx.net_idx = params->ctx.net_idx;
331+
param.ctx.app_idx = params->ctx.app_idx;
332+
param.ctx.addr = params->ctx.addr;
333+
param.ctx.send_rel = params->ctx.send_rel;
334+
param.ctx.send_ttl = params->ctx.send_ttl;
335+
param.msg_timeout = params->msg_timeout;
336+
param.msg_role = params->msg_role;
339337

340-
switch (params->opcode) {
338+
switch (param.opcode) {
341339
case ESP_BLE_MESH_MODEL_OP_ATTENTION_GET:
342-
return bt_mesh_health_attention_get(&ctx);
340+
return bt_mesh_health_attention_get(&param);
343341
case ESP_BLE_MESH_MODEL_OP_HEALTH_PERIOD_GET:
344-
return bt_mesh_health_period_get(&ctx);
342+
return bt_mesh_health_period_get(&param);
345343
case ESP_BLE_MESH_MODEL_OP_HEALTH_FAULT_GET:
346-
return bt_mesh_health_fault_get(&ctx, get->fault_get.company_id);
344+
return bt_mesh_health_fault_get(&param, get->fault_get.company_id);
347345
default:
348-
BT_ERR("Invalid Health Get opcode 0x%04x", params->opcode);
346+
BT_ERR("Invalid Health Get opcode 0x%04x", param.opcode);
349347
return -EINVAL;
350348
}
351349

@@ -355,40 +353,42 @@ static int btc_ble_mesh_health_client_get_state(esp_ble_mesh_client_common_param
355353
static int btc_ble_mesh_health_client_set_state(esp_ble_mesh_client_common_param_t *params,
356354
esp_ble_mesh_health_client_set_state_t *set)
357355
{
358-
struct bt_mesh_msg_ctx ctx = {0};
356+
bt_mesh_client_common_param_t param = {0};
359357

360358
if (params == NULL || set == NULL) {
361359
BT_ERR("%s, Invalid parameter", __func__);
362360
return -EINVAL;
363361
}
364362

365-
ctx.net_idx = params->ctx.net_idx;
366-
ctx.app_idx = params->ctx.app_idx;
367-
ctx.addr = params->ctx.addr;
368-
ctx.send_rel = params->ctx.send_rel;
369-
ctx.send_ttl = params->ctx.send_ttl;
363+
param.opcode = params->opcode;
364+
param.model = (struct bt_mesh_model *)params->model;
365+
param.ctx.net_idx = params->ctx.net_idx;
366+
param.ctx.app_idx = params->ctx.app_idx;
367+
param.ctx.addr = params->ctx.addr;
368+
param.ctx.send_rel = params->ctx.send_rel;
369+
param.ctx.send_ttl = params->ctx.send_ttl;
370+
param.msg_timeout = params->msg_timeout;
371+
param.msg_role = params->msg_role;
370372

371-
health_msg_timeout = params->msg_timeout;
372-
373-
switch (params->opcode) {
373+
switch (param.opcode) {
374374
case ESP_BLE_MESH_MODEL_OP_ATTENTION_SET:
375-
return bt_mesh_health_attention_set(&ctx, set->attention_set.attention, true);
375+
return bt_mesh_health_attention_set(&param, set->attention_set.attention, true);
376376
case ESP_BLE_MESH_MODEL_OP_ATTENTION_SET_UNACK:
377-
return bt_mesh_health_attention_set(&ctx, set->attention_set.attention, false);
377+
return bt_mesh_health_attention_set(&param, set->attention_set.attention, false);
378378
case ESP_BLE_MESH_MODEL_OP_HEALTH_PERIOD_SET:
379-
return bt_mesh_health_period_set(&ctx, set->period_set.fast_period_divisor, true);
379+
return bt_mesh_health_period_set(&param, set->period_set.fast_period_divisor, true);
380380
case ESP_BLE_MESH_MODEL_OP_HEALTH_PERIOD_SET_UNACK:
381-
return bt_mesh_health_period_set(&ctx, set->period_set.fast_period_divisor, false);
381+
return bt_mesh_health_period_set(&param, set->period_set.fast_period_divisor, false);
382382
case ESP_BLE_MESH_MODEL_OP_HEALTH_FAULT_TEST:
383-
return bt_mesh_health_fault_test(&ctx, set->fault_test.company_id, set->fault_test.test_id, true);
383+
return bt_mesh_health_fault_test(&param, set->fault_test.company_id, set->fault_test.test_id, true);
384384
case ESP_BLE_MESH_MODEL_OP_HEALTH_FAULT_TEST_UNACK:
385-
return bt_mesh_health_fault_test(&ctx, set->fault_test.company_id, set->fault_test.test_id, false);
385+
return bt_mesh_health_fault_test(&param, set->fault_test.company_id, set->fault_test.test_id, false);
386386
case ESP_BLE_MESH_MODEL_OP_HEALTH_FAULT_CLEAR:
387-
return bt_mesh_health_fault_clear(&ctx, set->fault_clear.company_id, true);
387+
return bt_mesh_health_fault_clear(&param, set->fault_clear.company_id, true);
388388
case ESP_BLE_MESH_MODEL_OP_HEALTH_FAULT_CLEAR_UNACK:
389-
return bt_mesh_health_fault_clear(&ctx, set->fault_clear.company_id, false);
389+
return bt_mesh_health_fault_clear(&param, set->fault_clear.company_id, false);
390390
default:
391-
BT_ERR("Invalid Health Set opcode 0x%04x", params->opcode);
391+
BT_ERR("Invalid Health Set opcode 0x%04x", param.opcode);
392392
return -EINVAL;
393393
}
394394

@@ -399,7 +399,6 @@ void btc_ble_mesh_health_client_call_handler(btc_msg_t *msg)
399399
{
400400
btc_ble_mesh_health_client_args_t *arg = NULL;
401401
esp_ble_mesh_health_client_cb_param_t cb = {0};
402-
bt_mesh_role_param_t role_param = {0};
403402

404403
if (!msg || !msg->arg) {
405404
BT_ERR("%s, Invalid parameter", __func__);
@@ -411,12 +410,6 @@ void btc_ble_mesh_health_client_call_handler(btc_msg_t *msg)
411410
switch (msg->act) {
412411
case BTC_BLE_MESH_ACT_HEALTH_CLIENT_GET_STATE: {
413412
cb.params = arg->health_client_get_state.params;
414-
role_param.model = (struct bt_mesh_model *)cb.params->model;
415-
role_param.role = cb.params->msg_role;
416-
if (bt_mesh_set_client_model_role(&role_param)) {
417-
BT_ERR("Failed to set model role");
418-
break;
419-
}
420413
cb.error_code = btc_ble_mesh_health_client_get_state(arg->health_client_get_state.params,
421414
arg->health_client_get_state.get_state);
422415
if (cb.error_code) {
@@ -427,12 +420,6 @@ void btc_ble_mesh_health_client_call_handler(btc_msg_t *msg)
427420
}
428421
case BTC_BLE_MESH_ACT_HEALTH_CLIENT_SET_STATE: {
429422
cb.params = arg->health_client_set_state.params;
430-
role_param.model = (struct bt_mesh_model *)cb.params->model;
431-
role_param.role = cb.params->msg_role;
432-
if (bt_mesh_set_client_model_role(&role_param)) {
433-
BT_ERR("Failed to set model role");
434-
break;
435-
}
436423
cb.error_code = btc_ble_mesh_health_client_set_state(arg->health_client_set_state.params,
437424
arg->health_client_set_state.set_state);
438425
if (cb.error_code) {

components/bt/esp_ble_mesh/btc/btc_ble_mesh_lighting_model.c

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@ void bt_mesh_lighting_client_cb_evt_to_btc(u32_t opcode, u8_t evt_type,
229229
{
230230
esp_ble_mesh_light_client_cb_param_t cb_params = {0};
231231
esp_ble_mesh_client_common_param_t params = {0};
232-
size_t length = 0U;
233232
uint8_t act = 0U;
234233

235234
if (!model || !ctx) {
@@ -270,8 +269,7 @@ void bt_mesh_lighting_client_cb_evt_to_btc(u32_t opcode, u8_t evt_type,
270269
cb_params.params = &params;
271270

272271
if (val && len) {
273-
length = (len <= sizeof(cb_params.status_cb)) ? len : sizeof(cb_params.status_cb);
274-
memcpy(&cb_params.status_cb, val, length);
272+
memcpy(&cb_params.status_cb, val, MIN(len, sizeof(cb_params.status_cb)));
275273
}
276274

277275
btc_ble_mesh_lighting_client_callback(&cb_params, act);
@@ -298,7 +296,6 @@ void btc_ble_mesh_lighting_client_call_handler(btc_msg_t *msg)
298296
btc_ble_mesh_lighting_client_args_t *arg = NULL;
299297
esp_ble_mesh_light_client_cb_param_t cb = {0};
300298
bt_mesh_client_common_param_t common = {0};
301-
bt_mesh_role_param_t role_param = {0};
302299

303300
if (!msg || !msg->arg) {
304301
BT_ERR("%s, Invalid parameter", __func__);
@@ -310,12 +307,6 @@ void btc_ble_mesh_lighting_client_call_handler(btc_msg_t *msg)
310307
switch (msg->act) {
311308
case BTC_BLE_MESH_ACT_LIGHTING_CLIENT_GET_STATE: {
312309
params = arg->light_client_get_state.params;
313-
role_param.model = (struct bt_mesh_model *)params->model;
314-
role_param.role = params->msg_role;
315-
if (bt_mesh_set_client_model_role(&role_param)) {
316-
BT_ERR("Failed to set model role");
317-
break;
318-
}
319310
common.opcode = params->opcode;
320311
common.model = (struct bt_mesh_model *)params->model;
321312
common.ctx.net_idx = params->ctx.net_idx;
@@ -324,10 +315,10 @@ void btc_ble_mesh_lighting_client_call_handler(btc_msg_t *msg)
324315
common.ctx.send_rel = params->ctx.send_rel;
325316
common.ctx.send_ttl = params->ctx.send_ttl;
326317
common.msg_timeout = params->msg_timeout;
318+
common.msg_role = params->msg_role;
327319

328320
cb.params = arg->light_client_get_state.params;
329-
cb.error_code = bt_mesh_light_client_get_state(&common,
330-
(void *)arg->light_client_get_state.get_state, (void *)&cb.status_cb);
321+
cb.error_code = bt_mesh_light_client_get_state(&common, arg->light_client_get_state.get_state);
331322
if (cb.error_code) {
332323
/* If send failed, callback error_code to app layer immediately */
333324
btc_ble_mesh_lighting_client_callback(&cb, ESP_BLE_MESH_LIGHT_CLIENT_GET_STATE_EVT);
@@ -336,12 +327,6 @@ void btc_ble_mesh_lighting_client_call_handler(btc_msg_t *msg)
336327
}
337328
case BTC_BLE_MESH_ACT_LIGHTING_CLIENT_SET_STATE: {
338329
params = arg->light_client_set_state.params;
339-
role_param.model = (struct bt_mesh_model *)params->model;
340-
role_param.role = params->msg_role;
341-
if (bt_mesh_set_client_model_role(&role_param)) {
342-
BT_ERR("Failed to set model role");
343-
break;
344-
}
345330
common.opcode = params->opcode;
346331
common.model = (struct bt_mesh_model *)params->model;
347332
common.ctx.net_idx = params->ctx.net_idx;
@@ -350,10 +335,10 @@ void btc_ble_mesh_lighting_client_call_handler(btc_msg_t *msg)
350335
common.ctx.send_rel = params->ctx.send_rel;
351336
common.ctx.send_ttl = params->ctx.send_ttl;
352337
common.msg_timeout = params->msg_timeout;
338+
common.msg_role = params->msg_role;
353339

354340
cb.params = arg->light_client_set_state.params;
355-
cb.error_code = bt_mesh_light_client_set_state(&common,
356-
(void *)arg->light_client_set_state.set_state, (void *)&cb.status_cb);
341+
cb.error_code = bt_mesh_light_client_set_state(&common, arg->light_client_set_state.set_state);
357342
if (cb.error_code) {
358343
/* If send failed, callback error_code to app layer immediately */
359344
btc_ble_mesh_lighting_client_callback(&cb, ESP_BLE_MESH_LIGHT_CLIENT_SET_STATE_EVT);
@@ -523,7 +508,6 @@ void bt_mesh_lighting_server_cb_evt_to_btc(u8_t evt_type, struct bt_mesh_model *
523508
const u8_t *val, size_t len)
524509
{
525510
esp_ble_mesh_lighting_server_cb_param_t cb_params = {0};
526-
size_t length = 0U;
527511
uint8_t act = 0U;
528512

529513
if (model == NULL || ctx == NULL) {
@@ -560,8 +544,7 @@ void bt_mesh_lighting_server_cb_evt_to_btc(u8_t evt_type, struct bt_mesh_model *
560544
cb_params.ctx.send_ttl = ctx->send_ttl;
561545

562546
if (val && len) {
563-
length = (len <= sizeof(cb_params.value)) ? len : sizeof(cb_params.value);
564-
memcpy(&cb_params.value, val, length);
547+
memcpy(&cb_params.value, val, MIN(len, sizeof(cb_params.value)));
565548
}
566549

567550
btc_ble_mesh_lighting_server_callback(&cb_params, act);

0 commit comments

Comments
 (0)