From d644f4b70bf39ba228974d589b74866b9146aafc Mon Sep 17 00:00:00 2001 From: hs36-kim <61130327+hs36-kim@users.noreply.github.com> Date: Wed, 19 Feb 2025 11:33:28 +0900 Subject: [PATCH] framework/ble_manager: Add interface (ble_manager_set_server_config) (#6670) --- framework/src/ble_manager/ble_manager_api.c | 8 ++++++++ framework/src/ble_manager/ble_manager_event.h | 1 + framework/src/ble_manager/ble_manager_lwnl.c | 10 ++++++++++ framework/src/ble_manager/ble_manager_state.c | 7 +++++++ os/include/tinyara/net/if/ble.h | 3 +++ os/net/blemgr/bledev.c | 13 +++++++++++++ 6 files changed, 42 insertions(+) diff --git a/framework/src/ble_manager/ble_manager_api.c b/framework/src/ble_manager/ble_manager_api.c index 646eda4456..c601b773a5 100644 --- a/framework/src/ble_manager/ble_manager_api.c +++ b/framework/src/ble_manager/ble_manager_api.c @@ -340,6 +340,14 @@ ble_result_e ble_client_operation_write_no_response(ble_client_ctx *ctx, ble_att } /* Server */ +ble_result_e ble_manager_set_server_config(ble_server_init_config *server_config) +{ + blemgr_msg_s msg = {BLE_CMD_SET_SERVER_CONFIG, BLE_MANAGER_FAIL, (void *)(server_config), NULL}; + int res = blemgr_post_message(&msg); + + RETURN_RESULT(res, msg); +} + ble_result_e ble_server_get_profile_count(uint16_t *count) { blemgr_msg_s msg = {BLE_CMD_GET_PROFILE_COUNT, BLE_MANAGER_FAIL, (void *)(count), NULL}; diff --git a/framework/src/ble_manager/ble_manager_event.h b/framework/src/ble_manager/ble_manager_event.h index 1e678da138..3912296f18 100644 --- a/framework/src/ble_manager/ble_manager_event.h +++ b/framework/src/ble_manager/ble_manager_event.h @@ -62,6 +62,7 @@ typedef enum { BLE_CMD_OP_WRITE_NO_RESP, // Server + BLE_CMD_SET_SERVER_CONFIG, BLE_CMD_GET_PROFILE_COUNT, BLE_CMD_CHARACT_NOTI, BLE_CMD_CHARACT_INDI, diff --git a/framework/src/ble_manager/ble_manager_lwnl.c b/framework/src/ble_manager/ble_manager_lwnl.c index 841f6e8af2..e2d9533a39 100644 --- a/framework/src/ble_manager/ble_manager_lwnl.c +++ b/framework/src/ble_manager/ble_manager_lwnl.c @@ -347,6 +347,16 @@ trble_result_e ble_drv_operation_write_no_response(trble_operation_handle *handl } /*** Peripheral(Server) ***/ +trble_result_e ble_drv_set_server_config(uint16_t *server_config) +{ + trble_result_e res = TRBLE_SUCCESS; + lwnl_msg msg = {BLE_INTF_NAME, {LWNL_REQ_BLE_SET_SERVER_CONFIG}, sizeof(uint16_t *), (void *)server_config, (void *)&res}; + if (_send_msg(&msg) < 0) { + res = TRBLE_FILE_ERROR; + } + return res; +} + trble_result_e ble_drv_get_profile_count(uint16_t *count) { trble_result_e res = TRBLE_SUCCESS; diff --git a/framework/src/ble_manager/ble_manager_state.c b/framework/src/ble_manager/ble_manager_state.c index ae96de17c0..f4da50ede4 100644 --- a/framework/src/ble_manager/ble_manager_state.c +++ b/framework/src/ble_manager/ble_manager_state.c @@ -869,6 +869,13 @@ ble_result_e blemgr_handle_request(blemgr_msg_s *msg) } break; // Server + case BLE_CMD_SET_SERVER_CONFIG: { + BLE_STATE_CHECK; + + trble_server_init_config *server = (trble_server_init_config *)msg->param; + ret = ble_drv_set_server_config(server); + } break; + case BLE_CMD_GET_PROFILE_COUNT: { BLE_STATE_CHECK; diff --git a/os/include/tinyara/net/if/ble.h b/os/include/tinyara/net/if/ble.h index f99dfc501c..db1353b1fe 100644 --- a/os/include/tinyara/net/if/ble.h +++ b/os/include/tinyara/net/if/ble.h @@ -115,6 +115,7 @@ typedef enum { LWNL_REQ_BLE_OP_WRITE_NO_RESP, // Server + LWNL_REQ_BLE_SET_SERVER_CONFIG, LWNL_REQ_BLE_GET_PROFILE_COUNT, LWNL_REQ_BLE_CHARACT_NOTI, LWNL_REQ_BLE_CHARACT_INDI, @@ -390,6 +391,7 @@ typedef trble_result_e (*trble_operation_write)(struct bledev *dev, trble_operat typedef trble_result_e (*trble_operation_write_no_response)(struct bledev *dev, trble_operation_handle *handle, trble_data *in_data); /*** Peripheral(Server) ***/ +typedef trble_result_e (*trble_set_server_config)(struct bledev *dev, trble_server_init_config *server); typedef trble_result_e (*trble_get_profile_count)(struct bledev *dev, uint16_t *count); // API for sending a characteristic value notification to the selected target(s). (notify to all clients conn_handle (notify all = 0x99)) typedef trble_result_e (*trble_charact_notify)(struct bledev *dev, trble_attr_handle attr_handle, trble_conn_handle con_handle, trble_data *data); @@ -463,6 +465,7 @@ struct trble_ops { trble_operation_write_no_response op_wrtie_no_resp; /* Peripheral(Server) */ + trble_set_server_config set_server_config; trble_get_profile_count get_profile_count; trble_charact_notify charact_noti; trble_charact_indicate charact_indi; diff --git a/os/net/blemgr/bledev.c b/os/net/blemgr/bledev.c index b5ff5d755d..17da1848df 100644 --- a/os/net/blemgr/bledev.c +++ b/os/net/blemgr/bledev.c @@ -423,6 +423,19 @@ int bledev_handle(struct bledev *dev, lwnl_req cmd, void *data, uint32_t data_le break; //Server + case LWNL_REQ_BLE_SET_SERVER_CONFIG: + { + lwnl_msg_params param = { 0, }; + if (data != NULL) { + memcpy(¶m, data, data_len); + } else { + return TRBLE_INVALID_ARGS; + } + + trble_server_init_config *t_server = (trble_server_init_config *)param.param[0]; + + TRBLE_DRV_CALL(ret, dev, set_server_config, (dev, t_server)); + } case LWNL_REQ_BLE_GET_PROFILE_COUNT: { uint16_t *count = NULL;