1cc2a5f42SMilanka Ringwald /* 2cc2a5f42SMilanka Ringwald * Copyright (C) 2019 BlueKitchen GmbH 3cc2a5f42SMilanka Ringwald * 4cc2a5f42SMilanka Ringwald * Redistribution and use in source and binary forms, with or without 5cc2a5f42SMilanka Ringwald * modification, are permitted provided that the following conditions 6cc2a5f42SMilanka Ringwald * are met: 7cc2a5f42SMilanka Ringwald * 8cc2a5f42SMilanka Ringwald * 1. Redistributions of source code must retain the above copyright 9cc2a5f42SMilanka Ringwald * notice, this list of conditions and the following disclaimer. 10cc2a5f42SMilanka Ringwald * 2. Redistributions in binary form must reproduce the above copyright 11cc2a5f42SMilanka Ringwald * notice, this list of conditions and the following disclaimer in the 12cc2a5f42SMilanka Ringwald * documentation and/or other materials provided with the distribution. 13cc2a5f42SMilanka Ringwald * 3. Neither the name of the copyright holders nor the names of 14cc2a5f42SMilanka Ringwald * contributors may be used to endorse or promote products derived 15cc2a5f42SMilanka Ringwald * from this software without specific prior written permission. 16cc2a5f42SMilanka Ringwald * 4. Any redistribution, use, or modification is done solely for 17cc2a5f42SMilanka Ringwald * personal benefit and not for any commercial purpose or for 18cc2a5f42SMilanka Ringwald * monetary gain. 19cc2a5f42SMilanka Ringwald * 20cc2a5f42SMilanka Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 21cc2a5f42SMilanka Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22cc2a5f42SMilanka Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23cc2a5f42SMilanka Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 24cc2a5f42SMilanka Ringwald * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25cc2a5f42SMilanka Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26cc2a5f42SMilanka Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 27cc2a5f42SMilanka Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28cc2a5f42SMilanka Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29cc2a5f42SMilanka Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 30cc2a5f42SMilanka Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31cc2a5f42SMilanka Ringwald * SUCH DAMAGE. 32cc2a5f42SMilanka Ringwald * 33cc2a5f42SMilanka Ringwald * Please inquire about commercial licensing options at 34cc2a5f42SMilanka Ringwald * [email protected] 35cc2a5f42SMilanka Ringwald * 36cc2a5f42SMilanka Ringwald */ 37cc2a5f42SMilanka Ringwald 38cc2a5f42SMilanka Ringwald #ifndef __MESH_CONFIGURATION_CLIENT_H 39cc2a5f42SMilanka Ringwald #define __MESH_CONFIGURATION_CLIENT_H 40cc2a5f42SMilanka Ringwald 41cc2a5f42SMilanka Ringwald #include <stdint.h> 42cc2a5f42SMilanka Ringwald 43cc2a5f42SMilanka Ringwald #include "mesh/mesh_access.h" 44cc2a5f42SMilanka Ringwald 45cc2a5f42SMilanka Ringwald #ifdef __cplusplus 46cc2a5f42SMilanka Ringwald extern "C" 47cc2a5f42SMilanka Ringwald { 48cc2a5f42SMilanka Ringwald #endif 49cc2a5f42SMilanka Ringwald 501126947fSMilanka Ringwald 511126947fSMilanka Ringwald typedef struct { 521126947fSMilanka Ringwald const uint8_t * models; 531126947fSMilanka Ringwald uint16_t size; 541126947fSMilanka Ringwald uint16_t offset; 551126947fSMilanka Ringwald 561126947fSMilanka Ringwald uint32_t id; 571126947fSMilanka Ringwald } mesh_model_id_iterator_t; 581126947fSMilanka Ringwald 591126947fSMilanka Ringwald typedef struct { 601126947fSMilanka Ringwald const uint8_t * elements; 611126947fSMilanka Ringwald uint16_t size; 621126947fSMilanka Ringwald uint16_t offset; 631126947fSMilanka Ringwald 641126947fSMilanka Ringwald uint16_t loc; 651126947fSMilanka Ringwald 661126947fSMilanka Ringwald mesh_model_id_iterator_t sig_model_iterator; 671126947fSMilanka Ringwald mesh_model_id_iterator_t vendor_model_iterator; 681126947fSMilanka Ringwald } mesh_composite_data_iterator_t; 691126947fSMilanka Ringwald 70*f2ca42dfSMilanka Ringwald typedef struct { 71*f2ca42dfSMilanka Ringwald uint16_t publish_address_unicast; 72*f2ca42dfSMilanka Ringwald uint8_t publish_address_virtual[16]; 73*f2ca42dfSMilanka Ringwald uint16_t appkey_index; 74*f2ca42dfSMilanka Ringwald uint8_t credential_flag; 75*f2ca42dfSMilanka Ringwald uint8_t publish_ttl; 76*f2ca42dfSMilanka Ringwald uint8_t publish_period; 77*f2ca42dfSMilanka Ringwald uint8_t publish_retransmit_count; 78*f2ca42dfSMilanka Ringwald uint8_t publish_retransmit_interval_steps; 79*f2ca42dfSMilanka Ringwald } mesh_publication_model_config_t; 801126947fSMilanka Ringwald 811126947fSMilanka Ringwald /** 821126947fSMilanka Ringwald * @brief Initialize iterator for element descriptions list from Composition data in MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA event 831126947fSMilanka Ringwald * @param iterator 841126947fSMilanka Ringwald * @param elements 851126947fSMilanka Ringwald * @param size 861126947fSMilanka Ringwald */ 871126947fSMilanka Ringwald void mesh_composition_data_iterator_init(mesh_composite_data_iterator_t * iterator, const uint8_t * elements, uint16_t size); 881126947fSMilanka Ringwald 891126947fSMilanka Ringwald /** 901126947fSMilanka Ringwald * @brief Check if there is another element description in the list 911126947fSMilanka Ringwald * @param iterator 921126947fSMilanka Ringwald * @return has_next_element 931126947fSMilanka Ringwald */ 941126947fSMilanka Ringwald bool mesh_composition_data_iterator_has_next_element(mesh_composite_data_iterator_t * iterator); 951126947fSMilanka Ringwald 961126947fSMilanka Ringwald /** 971126947fSMilanka Ringwald * @brief Select the next element 981126947fSMilanka Ringwald * @param iterator 991126947fSMilanka Ringwald */ 1001126947fSMilanka Ringwald void mesh_composition_data_iterator_next_element(mesh_composite_data_iterator_t * iterator); 1011126947fSMilanka Ringwald 1021126947fSMilanka Ringwald /** 1031126947fSMilanka Ringwald * @brief Get the element location descriptor for the current element 1041126947fSMilanka Ringwald * @param iterator 1051126947fSMilanka Ringwald * @return loc 1061126947fSMilanka Ringwald */ 1071126947fSMilanka Ringwald uint16_t mesh_composition_data_iterator_element_loc(mesh_composite_data_iterator_t * iterator); 1081126947fSMilanka Ringwald 1091126947fSMilanka Ringwald /** 1101126947fSMilanka Ringwald * @brief Check if there is another SIG model in current element 1111126947fSMilanka Ringwald * @param iterator 1121126947fSMilanka Ringwald * @return has_next_sig_model 1131126947fSMilanka Ringwald */ 1141126947fSMilanka Ringwald bool mesh_composition_data_iterator_has_next_sig_model(mesh_composite_data_iterator_t * iterator); 1151126947fSMilanka Ringwald 1161126947fSMilanka Ringwald /** 1171126947fSMilanka Ringwald * @brief Select the next SIG model 1181126947fSMilanka Ringwald * @param iterator 1191126947fSMilanka Ringwald */ 120873d831bSMilanka Ringwald void mesh_composition_data_iterator_next_sig_model(mesh_composite_data_iterator_t * iterator); 1211126947fSMilanka Ringwald 1221126947fSMilanka Ringwald /** 1231126947fSMilanka Ringwald * @brief Get the SIG model ID for the current SIG model of the current element 1241126947fSMilanka Ringwald * @param iterator 1251126947fSMilanka Ringwald * @return loc 1261126947fSMilanka Ringwald */ 1271126947fSMilanka Ringwald uint16_t mesh_composition_data_iterator_sig_model_id(mesh_composite_data_iterator_t * iterator); 1281126947fSMilanka Ringwald 1291126947fSMilanka Ringwald 1301126947fSMilanka Ringwald /** 1311126947fSMilanka Ringwald * @brief Check if there is another vendor model in current element 1321126947fSMilanka Ringwald * @param iterator 1331126947fSMilanka Ringwald * @return has_next_vendor_model 1341126947fSMilanka Ringwald */ 1351126947fSMilanka Ringwald bool mesh_composition_data_iterator_has_next_vendor_model(mesh_composite_data_iterator_t * iterator); 1361126947fSMilanka Ringwald 1371126947fSMilanka Ringwald /** 1381126947fSMilanka Ringwald * @brief Select the next VVendor model 1391126947fSMilanka Ringwald * @param iterator 1401126947fSMilanka Ringwald */ 141873d831bSMilanka Ringwald void mesh_composition_data_iterator_next_vendor_model(mesh_composite_data_iterator_t * iterator); 1421126947fSMilanka Ringwald 1431126947fSMilanka Ringwald /** 1441126947fSMilanka Ringwald * @brief Get the Vendor model ID for the current vendor model of the current element 1451126947fSMilanka Ringwald * @param iterator 1461126947fSMilanka Ringwald * @return loc 1471126947fSMilanka Ringwald */ 1481126947fSMilanka Ringwald uint32_t mesh_composition_data_iterator_vendor_model_id(mesh_composite_data_iterator_t * iterator); 1491126947fSMilanka Ringwald 150cc2a5f42SMilanka Ringwald /** 151d61023b2SMilanka Ringwald * @brief Get field page from event MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA 152d61023b2SMilanka Ringwald * @param event packet 153d61023b2SMilanka Ringwald * @return page 154d61023b2SMilanka Ringwald * @note: btstack_type 1 155d61023b2SMilanka Ringwald */ 156d61023b2SMilanka Ringwald uint8_t mesh_subevent_configuration_composition_data_get_page(const uint8_t * event); 157d61023b2SMilanka Ringwald 158d61023b2SMilanka Ringwald /** 159d61023b2SMilanka Ringwald * @brief Get field cid from event MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA 160d61023b2SMilanka Ringwald * @param event packet 161d61023b2SMilanka Ringwald * @return cid 162d61023b2SMilanka Ringwald * @note: btstack_type 2 163d61023b2SMilanka Ringwald */ 164d61023b2SMilanka Ringwald uint16_t mesh_subevent_configuration_composition_data_get_cid(const uint8_t * event); 165d61023b2SMilanka Ringwald 166d61023b2SMilanka Ringwald /** 167d61023b2SMilanka Ringwald * @brief Get field pid from event MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA 168d61023b2SMilanka Ringwald * @param event packet 169d61023b2SMilanka Ringwald * @return pid 170d61023b2SMilanka Ringwald * @note: btstack_type 2 171d61023b2SMilanka Ringwald */ 172d61023b2SMilanka Ringwald uint16_t mesh_subevent_configuration_composition_data_get_pid(const uint8_t * event); 173d61023b2SMilanka Ringwald 174d61023b2SMilanka Ringwald /** 175d61023b2SMilanka Ringwald * @brief Get field vid from event MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA 176d61023b2SMilanka Ringwald * @param event packet 177d61023b2SMilanka Ringwald * @return vid 178d61023b2SMilanka Ringwald * @note: btstack_type 2 179d61023b2SMilanka Ringwald */ 180d61023b2SMilanka Ringwald uint16_t mesh_subevent_configuration_composition_data_get_vid(const uint8_t * event); 181d61023b2SMilanka Ringwald 182d61023b2SMilanka Ringwald /** 183d61023b2SMilanka Ringwald * @brief Get field crpl from event MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA 184d61023b2SMilanka Ringwald * @param event packet 185d61023b2SMilanka Ringwald * @return crpl 186d61023b2SMilanka Ringwald * @note: btstack_type 2 187d61023b2SMilanka Ringwald */ 188d61023b2SMilanka Ringwald uint16_t mesh_subevent_configuration_composition_data_get_crpl(const uint8_t * event); 189d61023b2SMilanka Ringwald 190d61023b2SMilanka Ringwald /** 191d61023b2SMilanka Ringwald * @brief Get field features from event MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA 192d61023b2SMilanka Ringwald * @param event packet 193d61023b2SMilanka Ringwald * @return features 194d61023b2SMilanka Ringwald * @note: btstack_type 2 195d61023b2SMilanka Ringwald */ 196d61023b2SMilanka Ringwald uint16_t mesh_subevent_configuration_composition_data_get_features(const uint8_t * event); 197d61023b2SMilanka Ringwald 198d61023b2SMilanka Ringwald /** 199d61023b2SMilanka Ringwald * @brief Get number elements from event MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA 200d61023b2SMilanka Ringwald **/ 201d61023b2SMilanka Ringwald uint16_t mesh_subevent_configuration_composition_data_get_num_elements(const uint8_t * event, uint16_t size); 202d61023b2SMilanka Ringwald 203d61023b2SMilanka Ringwald 204d61023b2SMilanka Ringwald /** 205cc2a5f42SMilanka Ringwald * @brief Register packet handler 206cc2a5f42SMilanka Ringwald * @param configuration_client_model 207cc2a5f42SMilanka Ringwald * @param events_packet_handler 208cc2a5f42SMilanka Ringwald */ 209aaf0c1d1SMilanka Ringwald void mesh_configuration_client_register_packet_handler(mesh_model_t *configuration_client_model, btstack_packet_handler_t events_packet_handler); 210aaf0c1d1SMilanka Ringwald 211aaf0c1d1SMilanka Ringwald /** 2125448198cSMilanka Ringwald * @brief Get the current Secure Network Beacon state of a node. 213aaf0c1d1SMilanka Ringwald * @param mesh_model 214aaf0c1d1SMilanka Ringwald * @param dest 215aaf0c1d1SMilanka Ringwald * @param netkey_index 216aaf0c1d1SMilanka Ringwald * @param appkey_index 2175448198cSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 218aaf0c1d1SMilanka Ringwald */ 2193013af6aSMilanka Ringwald uint8_t mesh_configuration_client_send_beacon_get(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index); 220cc2a5f42SMilanka Ringwald 2215448198cSMilanka Ringwald /** 2225448198cSMilanka Ringwald * @brief Get the current Secure Network Beacon state of a node. 2235448198cSMilanka Ringwald * @param mesh_model 2245448198cSMilanka Ringwald * @param dest 2255448198cSMilanka Ringwald * @param netkey_index 2265448198cSMilanka Ringwald * @param appkey_index 2275448198cSMilanka Ringwald * @param Beacon 0x01 The node is broadcasting a Secure Network beacon, 0x00 broadcastinis off 2285448198cSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 2295448198cSMilanka Ringwald */ 2303013af6aSMilanka Ringwald uint8_t mesh_configuration_client_send_beacon_set(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index, uint8_t beacon); 2313013af6aSMilanka Ringwald 2323013af6aSMilanka Ringwald /** 2333013af6aSMilanka Ringwald * @brief Read one page of the Composition Data. 2343013af6aSMilanka Ringwald * @param mesh_model 2353013af6aSMilanka Ringwald * @param dest 2363013af6aSMilanka Ringwald * @param netkey_index 2373013af6aSMilanka Ringwald * @param appkey_index 2383013af6aSMilanka Ringwald * @param page Page number of the Composition Data 2393013af6aSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 2403013af6aSMilanka Ringwald */ 2413013af6aSMilanka Ringwald uint8_t mesh_configuration_client_send_composition_data_get(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index, uint8_t page); 242cc2a5f42SMilanka Ringwald 243344d6549SMilanka Ringwald /** 244344d6549SMilanka Ringwald * @brief Get the current Default TTL state of a node 245344d6549SMilanka Ringwald * @param mesh_model 246344d6549SMilanka Ringwald * @param dest 247344d6549SMilanka Ringwald * @param netkey_index 248344d6549SMilanka Ringwald * @param appkey_index 249344d6549SMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 250344d6549SMilanka Ringwald */ 251344d6549SMilanka Ringwald uint8_t mesh_configuration_client_send_default_ttl_get(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index); 252344d6549SMilanka Ringwald 253344d6549SMilanka Ringwald /** 254344d6549SMilanka Ringwald * @brief Set Default TTL state of a node 255344d6549SMilanka Ringwald * @param mesh_model 256344d6549SMilanka Ringwald * @param dest 257344d6549SMilanka Ringwald * @param netkey_index 258344d6549SMilanka Ringwald * @param appkey_index 259344d6549SMilanka Ringwald * @param ttl allowed values: 0x00, 0x02–0x7F 260344d6549SMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 261344d6549SMilanka Ringwald */ 262344d6549SMilanka Ringwald uint8_t mesh_configuration_client_send_default_ttl_set(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index, uint8_t ttl); 263344d6549SMilanka Ringwald 264e38651d8SMilanka Ringwald /** 265e38651d8SMilanka Ringwald * @brief Get the current Default GATT proxy state of a node 266e38651d8SMilanka Ringwald * @param mesh_model 267e38651d8SMilanka Ringwald * @param dest 268e38651d8SMilanka Ringwald * @param netkey_index 269e38651d8SMilanka Ringwald * @param appkey_index 270e38651d8SMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 271e38651d8SMilanka Ringwald */ 272e38651d8SMilanka Ringwald uint8_t mesh_configuration_client_send_default_gatt_proxy_state_get(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index); 273e38651d8SMilanka Ringwald 274e38651d8SMilanka Ringwald /** 275e38651d8SMilanka Ringwald * @brief Set Default GATT proxy state of a node 276e38651d8SMilanka Ringwald * @param mesh_model 277e38651d8SMilanka Ringwald * @param dest 278e38651d8SMilanka Ringwald * @param netkey_index 279e38651d8SMilanka Ringwald * @param appkey_index 280e38651d8SMilanka Ringwald * @param gatt_proxy_state 0 - the proxy feature is supported and disabled, 1 - supported and enabled, 2 - not supported 281e38651d8SMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 282e38651d8SMilanka Ringwald */ 283e38651d8SMilanka Ringwald uint8_t mesh_configuration_client_send_default_gatt_proxy_state_set(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index, uint8_t gatt_proxy_state); 284e38651d8SMilanka Ringwald 285*f2ca42dfSMilanka Ringwald /** 286*f2ca42dfSMilanka Ringwald * @brief Get the publish address and parameters of an outgoing message that originates from a model 287*f2ca42dfSMilanka Ringwald * @param mesh_model 288*f2ca42dfSMilanka Ringwald * @param dest element_address 289*f2ca42dfSMilanka Ringwald * @param netkey_index 290*f2ca42dfSMilanka Ringwald * @param appkey_index 291*f2ca42dfSMilanka Ringwald * @param model_id 292*f2ca42dfSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 293*f2ca42dfSMilanka Ringwald */ 294*f2ca42dfSMilanka Ringwald uint8_t mesh_configuration_client_send_model_publication_get(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index, uint32_t model_id); 295*f2ca42dfSMilanka Ringwald 296*f2ca42dfSMilanka Ringwald /** 297*f2ca42dfSMilanka Ringwald * @brief Set the Model Publication state of an outgoing message that originates from a model. 298*f2ca42dfSMilanka Ringwald * @param mesh_model 299*f2ca42dfSMilanka Ringwald * @param dest element_address 300*f2ca42dfSMilanka Ringwald * @param netkey_index 301*f2ca42dfSMilanka Ringwald * @param appkey_index 302*f2ca42dfSMilanka Ringwald * @param model_id 303*f2ca42dfSMilanka Ringwald * @param publication_config 304*f2ca42dfSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 305*f2ca42dfSMilanka Ringwald */ 306*f2ca42dfSMilanka Ringwald uint8_t mesh_configuration_client_send_model_publication_set(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index, uint32_t model_id, mesh_publication_model_config_t * publication_config); 307*f2ca42dfSMilanka Ringwald 308*f2ca42dfSMilanka Ringwald /** 309*f2ca42dfSMilanka Ringwald * @brief Set the Model Publication state of an outgoing message that originates from a model. 310*f2ca42dfSMilanka Ringwald * @param mesh_model 311*f2ca42dfSMilanka Ringwald * @param dest element_address 312*f2ca42dfSMilanka Ringwald * @param netkey_index 313*f2ca42dfSMilanka Ringwald * @param appkey_index 314*f2ca42dfSMilanka Ringwald * @param model_id 315*f2ca42dfSMilanka Ringwald * @param publication_config 316*f2ca42dfSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if successful, otherwise BTSTACK_MEMORY_ALLOC_FAILED or ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 317*f2ca42dfSMilanka Ringwald */ 318*f2ca42dfSMilanka Ringwald uint8_t mesh_configuration_client_send_model_publication_virtual_address_set(mesh_model_t * mesh_model, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index, uint32_t model_id, mesh_publication_model_config_t * publication_config); 319*f2ca42dfSMilanka Ringwald 320cc2a5f42SMilanka Ringwald #ifdef __cplusplus 321cc2a5f42SMilanka Ringwald } /* end of extern "C" */ 322cc2a5f42SMilanka Ringwald #endif 323cc2a5f42SMilanka Ringwald 324cc2a5f42SMilanka Ringwald #endif 325