19#if CONFIG_RELAY_CLIENT_COUNT > 0
22#if CONFIG_ENABLE_CONFIG_SERVER
24#define CONFIG_SERVER_CB_MASK \
25 CONTROL_TASK_MSG_EVT_PUB_ADD \
26 | CONTROL_TASK_MSG_EVT_SUB_ADD \
27 | CONTROL_TASK_MSG_EVT_APP_KEY_BIND
28#define CONTROL_TASK_MSG_CODE_EVT_MASK CONTROL_TASK_MSG_EVT_TO_BLE_SET_ON_OFF
31#define MOD_SRC MODULE_ID_ELEMENT_SWITCH_RELAY_CLIENT
32#define RELAY_CLI_EL_STATE_CH_EVT_MASK CONTROL_TASK_MSG_EVT_EL_STATE_CH_SET_ON_OFF
34#define GET_RELATIVE_EL_IDX(_element_id) _element_id - relay_element_init_ctrl.element_id_start
35#define IS_EL_IN_RANGE(_element_id) (_element_id >= relay_element_init_ctrl.element_id_start && _element_id < relay_element_init_ctrl.element_id_end)
36#define RELAY_CLI_EL(_rel_el_id) relay_element_init_ctrl.el_list[_rel_el_id]
82 err = meshx_on_off_client_create(&
RELAY_CLI_EL(i).onoff_cli_model,
123 err = meshx_on_off_client_delete(&
RELAY_CLI_EL(i).onoff_cli_model);
173 dev_struct_t *pdev, uint16_t *start_idx, uint16_t n_max)
175 if (!pdev || !start_idx || !n_max)
187 for (uint16_t i = *start_idx; i < (n_max + *start_idx); i++)
217#if CONFIG_ENABLE_CONFIG_SERVER
238 size_t rel_el_id = 0;
239 uint16_t element_id = 0;
240 uint16_t base_el_id = 0;
241 bool nvs_save =
false;
300 size_t rel_el_id = 0;
349 meshx_onoff_client_model_t *model =
RELAY_CLI_EL(rel_el_id).onoff_cli_model;
354 if (MESHX_GEN_ON_OFF_CLI_MSG_SET == set_get)
361 meshx_gen_onoff_send_params_t params = {
362 .element_id = element_id,
367 .app_idx = el_ctx->
app_id,
368 .state = el_ctx->
state.on_off,
372 err = meshx_onoff_client_send_msg(¶ms);
404 const meshx_on_off_cli_el_msg_t *param
409 uint16_t element_id = param->model.el_id;
419 bool nvs_save =
false;
420 err = meshx_gen_on_off_state_change_handle(param, &el_ctx->
prev_state, &el_ctx->
state);
423 app_notify.
err_code = param->err_code;
484 "Relay Client Control Task: Set OnOff failed (%p)", (
void *)err);
490#if CONFIG_ENABLE_UNIT_TEST
521 MOD_SRC,
"Relay Client Unit Test: Invalid number of arguments");
526 uint8_t set_get = (cmd ==
RELAY_CLI_CMD_GET) ? MESHX_GEN_ON_OFF_CLI_MSG_GET : MESHX_GEN_ON_OFF_CLI_MSG_SET;
527 uint16_t el_id =
UT_GET_ARG(0, uint16_t, argv);
592 .ack = ack == MESHX_GEN_ON_OFF_CLI_MSG_ACK,
593 .set_get = MESHX_GEN_ON_OFF_CLI_MSG_SET,
616 .ack = MESHX_GEN_ON_OFF_CLI_MSG_ACK,
617 .set_get = MESHX_GEN_ON_OFF_CLI_MSG_GET,
653#if CONFIG_ENABLE_CONFIG_SERVER
679 MESHX_LOGE(
MOD_SRC,
"Relay Client element state change callback reg failed: (%d)", err);
682#if CONFIG_ENABLE_UNIT_TEST
691 err = meshx_on_off_client_init();
This file contains the API definitions for the MeshX application.
#define MESHX_ELEMENT_FUNC_ID_RELAY_SERVER_ONN_OFF
meshx_err_t meshx_send_msg_to_app(uint16_t element_id, uint16_t element_type, uint16_t func_id, uint16_t msg_len, const void *msg)
Sends a message to the BLE Mesh application.
struct meshx_api_relay_client_state meshx_api_relay_client_evt_t
Structure defines the payload for MESHX_ELEMENT_TYPE_RELAY_CLIENT.
@ MESHX_ELEMENT_TYPE_RELAY_CLIENT
meshx_err_t meshx_plat_add_element_to_composition(uint16_t index, meshx_ptr_t p_element_list, meshx_ptr_t p_sig_models, meshx_ptr_t p_ven_models, uint8_t sig_cnt, uint8_t ven_cnt)
Adds an element to the BLE Mesh composition.
meshx_err_t meshx_get_base_element_id(uint16_t *base_el_id)
Retrieves the base element ID for the BLE Mesh platform.
#define MESHX_MODEL_OP_GEN_ONOFF_SET_UNACK
#define MESHX_ADDR_UNASSIGNED
#define MESHX_MODEL_OP_GEN_ONOFF_GET
#define MESHX_MODEL_OP_GEN_ONOFF_SET
struct meshx_config_srv_cb_param meshx_config_srv_cb_param_t
control_task_msg_handle_t config_srv_cb_t
control_task_msg_handle_t prov_srv_cb_t
Common application definitions and includes for BLE Mesh Node.
#define REG_MESHX_ELEMENT_FN(_name, _type, _fn)
Register an element composition function.
struct dev_struct dev_struct_t
Structure representing the device composition and elements.
#define CONFIG_MAX_ELEMENT_COUNT
Total Element Count in the Composition.
Header file for the meshxuction configuration server model.
meshx_err_t meshx_config_server_cb_reg(config_srv_cb_t cb, uint32_t config_evt_bmap)
Registers a configuration server callback for specific events.
Header file for the control task in the BLE mesh node application.
CONTROL_TASK_MSG_EVT_SYSTEM_FRESH_BOOT
uint32_t control_task_msg_evt_t
Type definition for control task message event.
meshx_err_t(* control_task_msg_handle_t)(dev_struct_t *pdev, control_task_msg_evt_t evt, void *params)
Function pointer type for control task message handler.
@ CONTROL_TASK_MSG_CODE_EL_STATE_CH
@ CONTROL_TASK_MSG_CODE_TO_BLE
CONTROL_TASK_MSG_EVT_PUB_ADD
CONTROL_TASK_MSG_EVT_APP_KEY_BIND
CONTROL_TASK_MSG_EVT_TO_BLE_SET_ON_OFF
meshx_err_t control_task_msg_publish(control_task_msg_code_t msg_code, control_task_msg_evt_t msg_evt, const void *msg_evt_params, size_t sizeof_msg_evt_params)
Publish a control task message.
CONTROL_TASK_MSG_EVT_PUB_DEL
meshx_err_t control_task_msg_subscribe(control_task_msg_code_t msg_code, control_task_msg_evt_t evt_bmap, control_task_msg_handle_t callback)
Subscribe to a control task message.
meshx_err_t
MeshX Error Codes.
#define CONFIG_SERVER_CB_MASK
Configuration server callback event mask for cwww server.
#define MESHX_LOGW(module_id, format,...)
#define MESHX_LOGI(module_id, format,...)
#define MESHX_LOGE(module_id, format,...)
#define MESHX_LOGD(module_id, format,...)
Header file for MeshX Non-Volatile Storage (NVS) operations.
meshx_err_t meshx_nvs_element_ctx_set(uint16_t element_id, const void *blob, size_t blob_size)
Store the context of a specific element to NVS.
meshx_err_t meshx_nvs_element_ctx_get(uint16_t element_id, void *blob, size_t blob_size)
Retrieve the context of a specific element from NVS.
meshx_err_t meshx_prov_srv_reg_el_client_cb(prov_srv_cb_t cb)
Register a callback function for provisioning events.
#define CONTROL_TASK_MSG_CODE_EVT_MASK
static meshx_err_t meshx_add_relay_cli_model_to_element_list(dev_struct_t *pdev, uint16_t *start_idx, uint16_t n_max)
Add relay client models to the element list.
static meshx_err_t relay_cli_unit_test_cb_handler(int cmd_id, int argc, char **argv)
Callback handler for the Relay client unit test command.
static relay_client_element_ctrl_t relay_element_init_ctrl
static meshx_err_t meshx_relay_cli_reg_app_req_cb()
Registers a callback handler for relay application requests.
#define GET_RELATIVE_EL_IDX(_element_id)
meshx_err_t meshx_relay_el_get_state(uint16_t el_id)
Retrieves the current state of the relay element.
meshx_err_t create_relay_client_elements(dev_struct_t *pdev, uint16_t element_cnt)
Create Dynamic Relay Model Elements.
static meshx_err_t relay_cli_prov_srv_msg_handle(const dev_struct_t *pdev, control_task_msg_evt_t evt, const void *params)
Relay Client Provisioning Server Control Task Message Handler.
static meshx_err_t meshx_relay_client_element_state_change_handler(const dev_struct_t *pdev, control_task_msg_evt_t evt, const meshx_on_off_cli_el_msg_t *param)
Handles the relay client element message.
static meshx_err_t meshx_element_struct_deinit(void)
Deinitializes the mesh element structure.
meshx_err_t meshx_relay_el_set_state(uint16_t el_id, bool ack)
Set the On/Off state for a specific element in the BLE mesh network.
@ RELAY_CLI_CMD_SET_UNACK
static meshx_err_t relay_client_config_cli_cb(const dev_struct_t *pdev, control_task_msg_evt_t evt, const meshx_config_srv_cb_param_t *params)
Callback function for configuration client events.
static meshx_err_t meshx_element_struct_init(uint16_t n_max)
Initializes the mesh element structure.
static meshx_err_t meshx_relay_cli_el_state_change_reg_cb()
Registers a callback for relay element state change events.
#define IS_EL_IN_RANGE(_element_id)
#define RELAY_CLI_EL_STATE_CH_EVT_MASK
#define RELAY_CLI_EL(_rel_el_id)
static meshx_err_t meshx_relay_client_to_ble_handler(const dev_struct_t *pdev, control_task_msg_evt_t evt, const meshx_gen_on_off_cli_msg_t *msg)
Relay Client Element Application Request Handler.
static meshx_err_t meshx_relay_cli_send_onoff_msg(const dev_struct_t *pdev, uint16_t element_id, uint8_t set_get, uint8_t ack)
Sends a relay message over BLE mesh.
static meshx_err_t meshx_dev_create_relay_model_space(dev_struct_t const *pdev, uint16_t n_max)
Create Dynamic Relay Model Elements.
Header file for the Relay Client Model in BLE Mesh.
@ RELAY_CLI_SIG_ONOFF_MODEL_ID
struct relay_client_element_ctrl relay_client_element_ctrl_t
#define RELAY_CLI_MODEL_VEN_CNT
Number of Vendor models in a relay model element.
meshx_err_t create_relay_client_elements(dev_struct_t *pdev, uint16_t element_cnt)
Create Dynamic Relay Model Elements.
struct meshx_relay_client_model_ctx meshx_relay_client_model_ctx_t
Structure to hold the context of the relay client.
struct meshx_gen_on_off_cli_msg meshx_gen_on_off_cli_msg_t
Structure to hold the relay client message.
#define RELAY_CLI_MODEL_SIG_CNT
Number of SIG models in a relay model element.
struct relay_client_element relay_client_elements_t
Structure to hold the context and configuration for the relay client element.
@ MODULE_ID_ELEMENT_SWITCH_RELAY_CLIENT
meshx_app_store_t meshx_store
MESHX_ELEMENT elements[MAX_ELE_CNT]
meshx_cfg_srv_state_change_t state_change
meshx_on_off_cli_state_t prev_state
meshx_on_off_cli_state_t state
meshx_state_change_cfg_model_app_bind_t mod_app_bind
meshx_state_change_cfg_mod_pub_set_t mod_pub_set
meshx_err_t register_unit_test(module_id_t module_id, module_callback_t callback)
Register a unit test for a specific module.
#define UT_GET_ARG(_x, _type, _argv)
Macro to extract an argument from the argument list.