mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-16 16:20:50 +00:00
mesh: extract mesh_configuration_server
This commit is contained in:
parent
669135eb20
commit
2ea7db52ab
@ -28,7 +28,7 @@ file(GLOB SOURCES_LIBUSB "../../platform/libusb/*.c" "../../platform/
|
||||
file(GLOB SOURCES_OFF "../../src/ble/le_device_db_memory.c" "../../src/ble/le_device_db_memory.h" "../../src/ble/le_device_db_tlv.c" "../../src/ble/le_device_db_tlv.h")
|
||||
list(REMOVE_ITEM SOURCES_BLE ${SOURCES_OFF})
|
||||
|
||||
set(SOURCES_MESH_NEW main.c mesh_access.c mesh_access.h mesh_transport.c mesh_transport.h mesh_foundation.c mesh_foundation.h mesh_keys.c mesh_keys.h mesh_virtual_addresses.c mesh_virtual_addresses.h mesh_peer.c mesh_peer.h provisioner.c provisioning.c provisioning.h provisioning_device.c provisioning_device.h provisioning_provisioner.c provisioning_provisioner.h )
|
||||
set(SOURCES_MESH_NEW main.c mesh_access.c mesh_access.h mesh_configuration_server.c mesh_transport.c mesh_transport.h mesh_foundation.c mesh_foundation.h mesh_keys.c mesh_keys.h mesh_virtual_addresses.c mesh_virtual_addresses.h mesh_peer.c mesh_peer.h provisioner.c provisioning.c provisioning.h provisioning_device.c provisioning_device.h provisioning_provisioner.c provisioning_provisioner.h )
|
||||
|
||||
set(SOURCES
|
||||
${SOURCES_POSIX}
|
||||
|
@ -53,7 +53,7 @@ LDFLAGS += $(shell pkg-config libusb-1.0 --libs)
|
||||
LDFLAGS += -lCppUTest -lCppUTestExt
|
||||
|
||||
|
||||
mesh: mesh.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${SM_OBJ} pb_adv.o pb_gatt.o mesh_foundation.o mesh_provisioning_service_server.o mesh_crypto.o provisioning_device.o mesh_network.o mesh_peer.o mesh_lower_transport.o mesh_transport.o mesh_virtual_addresses.o mesh_keys.o mesh_access.o mesh.o
|
||||
mesh: mesh.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${SM_OBJ} pb_adv.o pb_gatt.o mesh_foundation.o mesh_provisioning_service_server.o mesh_crypto.o provisioning_device.o mesh_network.o mesh_peer.o mesh_lower_transport.o mesh_transport.o mesh_virtual_addresses.o mesh_keys.o mesh_access.o mesh_configuration_server.o mesh.o
|
||||
${CC} $(filter-out mesh.h,$^) ${CFLAGS} ${LDFLAGS} -o $@
|
||||
|
||||
provisioner: ${CORE_OBJ} ${COMMON_OBJ} ${SM_OBJ} pb_adv.o mesh_crypto.o provisioning_provisioner.o provisioner.o
|
||||
|
1828
test/mesh/mesh.c
1828
test/mesh/mesh.c
File diff suppressed because it is too large
Load Diff
@ -80,6 +80,10 @@ void mesh_access_set_primary_element_address(uint16_t unicast_address){
|
||||
primary_element.unicast_address = unicast_address;
|
||||
}
|
||||
|
||||
uint16_t mesh_access_get_primary_element_address(void){
|
||||
return primary_element.unicast_address;
|
||||
}
|
||||
|
||||
void mesh_access_set_primary_element_location(uint16_t location){
|
||||
primary_element.loc = location;
|
||||
}
|
||||
@ -513,7 +517,7 @@ mesh_transport_pdu_t * mesh_access_setup_segmented_message(const mesh_access_mes
|
||||
}
|
||||
|
||||
|
||||
static mesh_operation_t * mesh_model_lookup_operation(mesh_model_t * model, mesh_pdu_t * pdu){
|
||||
static const mesh_operation_t * mesh_model_lookup_operation(mesh_model_t * model, mesh_pdu_t * pdu){
|
||||
|
||||
uint32_t opcode = 0;
|
||||
uint16_t opcode_size = 0;
|
||||
@ -523,7 +527,7 @@ static mesh_operation_t * mesh_model_lookup_operation(mesh_model_t * model, mesh
|
||||
uint16_t len = mesh_pdu_len(pdu);
|
||||
|
||||
// find opcode in table
|
||||
mesh_operation_t * operation = model->operations;
|
||||
const mesh_operation_t * operation = model->operations;
|
||||
if (operation == NULL) return NULL;
|
||||
for ( ; operation->handler != NULL ; operation++){
|
||||
if (operation->opcode != opcode) continue;
|
||||
@ -570,7 +574,7 @@ static void mesh_access_message_process_handler(mesh_pdu_t * pdu){
|
||||
while (mesh_model_iterator_has_next(&model_it)){
|
||||
mesh_model_t * model = mesh_model_iterator_next(&model_it);
|
||||
// find opcode in table
|
||||
mesh_operation_t * operation = mesh_model_lookup_operation(model, pdu);
|
||||
const mesh_operation_t * operation = mesh_model_lookup_operation(model, pdu);
|
||||
if (operation == NULL) break;
|
||||
operation->handler(model, pdu);
|
||||
return;
|
||||
@ -588,7 +592,7 @@ static void mesh_access_message_process_handler(mesh_pdu_t * pdu){
|
||||
mesh_model_t * model = mesh_model_iterator_next(&model_it);
|
||||
if (mesh_model_contains_subscription(model, dst)){
|
||||
// find opcode in table
|
||||
mesh_operation_t * operation = mesh_model_lookup_operation(model, pdu);
|
||||
const mesh_operation_t * operation = mesh_model_lookup_operation(model, pdu);
|
||||
if (operation == NULL) break;
|
||||
operation->handler(model, pdu);
|
||||
return;
|
||||
@ -649,6 +653,85 @@ int mesh_model_contains_subscription(mesh_model_t * mesh_model, uint16_t address
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint32_t mesh_transport_key_tag_for_appkey_index(uint16_t appkey_index){
|
||||
return ((uint32_t) 'M' << 24) | ((uint32_t) 'A' << 16) | ((uint32_t) appkey_index);
|
||||
}
|
||||
|
||||
// Mesh App Keys
|
||||
|
||||
typedef struct {
|
||||
uint16_t netkey_index;
|
||||
uint16_t appkey_index;
|
||||
uint8_t aid;
|
||||
uint8_t key[16];
|
||||
} mesh_persistent_app_key_t;
|
||||
|
||||
#define MESH_APPKEY_INDEX_MAX (16)
|
||||
|
||||
void mesh_store_app_key(uint16_t netkey_index, uint16_t appkey_index, uint8_t aid, const uint8_t * application_key){
|
||||
mesh_access_setup_tlv();
|
||||
|
||||
if (appkey_index >= MESH_APPKEY_INDEX_MAX){
|
||||
printf("Warning: AppKey with AppKey Index %x (>= %u) are not persisted\n", appkey_index, MESH_APPKEY_INDEX_MAX);
|
||||
}
|
||||
mesh_persistent_app_key_t data;
|
||||
printf("Store AppKey: AppKey Index 0x%06x, AID %02x: ", appkey_index, aid);
|
||||
printf_hexdump(application_key, 16);
|
||||
uint32_t tag = mesh_transport_key_tag_for_appkey_index(appkey_index);
|
||||
data.netkey_index = netkey_index;
|
||||
data.appkey_index = appkey_index;
|
||||
data.aid = aid;
|
||||
memcpy(data.key, application_key, 16);
|
||||
btstack_tlv_singleton_impl->store_tag(btstack_tlv_singleton_context, tag, (uint8_t *) &data, sizeof(data));
|
||||
}
|
||||
|
||||
void mesh_load_app_key(uint16_t appkey_index){
|
||||
mesh_access_setup_tlv();
|
||||
|
||||
mesh_persistent_app_key_t data;
|
||||
uint32_t tag = mesh_transport_key_tag_for_appkey_index(appkey_index);
|
||||
int app_key_len = btstack_tlv_singleton_impl->get_tag(btstack_tlv_singleton_context, tag, (uint8_t *) &data, sizeof(data));
|
||||
if (app_key_len == 0) return;
|
||||
|
||||
mesh_transport_key_t * key = btstack_memory_mesh_transport_key_get();
|
||||
if (key == NULL) return;
|
||||
|
||||
key->appkey_index = data.appkey_index;
|
||||
key->netkey_index = data.netkey_index;
|
||||
key->aid = data.aid;
|
||||
key->akf = 1;
|
||||
memcpy(key->key, data.key, 16);
|
||||
mesh_transport_key_add(key);
|
||||
printf("Load AppKey: AppKey Index 0x%06x, AID %02x: ", key->appkey_index, key->aid);
|
||||
printf_hexdump(key->key, 16);
|
||||
}
|
||||
|
||||
void mesh_delete_app_key(uint16_t appkey_index){
|
||||
mesh_access_setup_tlv();
|
||||
|
||||
uint32_t tag = mesh_transport_key_tag_for_appkey_index(appkey_index);
|
||||
btstack_tlv_singleton_impl->delete_tag(btstack_tlv_singleton_context, tag);
|
||||
}
|
||||
|
||||
void mesh_load_app_keys(void){
|
||||
printf("Load App Keys\n");
|
||||
// TODO: use TLV iterator
|
||||
uint16_t appkey_index;
|
||||
for (appkey_index = 0; appkey_index < MESH_APPKEY_INDEX_MAX; appkey_index++){
|
||||
mesh_load_app_key(appkey_index);
|
||||
}
|
||||
}
|
||||
|
||||
void mesh_delete_app_keys(void){
|
||||
printf("Delete App Keys\n");
|
||||
// TODO: use TLV iterator
|
||||
uint16_t appkey_index;
|
||||
for (appkey_index = 0; appkey_index < MESH_APPKEY_INDEX_MAX; appkey_index++){
|
||||
mesh_delete_app_key(appkey_index);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Model to Appkey List
|
||||
|
||||
#define MESH_MODEL_INDEX_MAX (16)
|
||||
|
@ -83,7 +83,7 @@ typedef struct mesh_model {
|
||||
uint32_t model_identifier;
|
||||
|
||||
// model operations
|
||||
mesh_operation_t * operations;
|
||||
const mesh_operation_t * operations;
|
||||
|
||||
// publication model if supported
|
||||
mesh_publication_model_t * publication_model;
|
||||
@ -145,6 +145,8 @@ mesh_element_t * mesh_primary_element(void);
|
||||
|
||||
void mesh_access_set_primary_element_address(uint16_t unicast_address);
|
||||
|
||||
uint16_t mesh_access_get_primary_element_address(void);
|
||||
|
||||
void mesh_access_set_primary_element_location(uint16_t location);
|
||||
|
||||
void mesh_element_add(mesh_element_t * element);
|
||||
@ -173,6 +175,8 @@ mesh_model_t * mesh_model_iterator_next(mesh_model_iterator_t * iterator);
|
||||
|
||||
mesh_model_t * mesh_model_get_by_identifier(mesh_element_t * element, uint32_t model_identifier);
|
||||
|
||||
uint32_t mesh_model_get_model_identifier_bluetooth_sig(uint16_t model_id);
|
||||
|
||||
int mesh_model_is_bluetooth_sig(uint32_t model_identifier);
|
||||
|
||||
uint16_t mesh_model_get_model_id(uint32_t model_identifier);
|
||||
@ -186,6 +190,13 @@ uint16_t mesh_pdu_netkey_index(mesh_pdu_t * pdu);
|
||||
uint16_t mesh_pdu_len(mesh_pdu_t * pdu);
|
||||
uint8_t * mesh_pdu_data(mesh_pdu_t * pdu);
|
||||
|
||||
// Mesh Appkeys
|
||||
void mesh_store_app_key(uint16_t netkey_index, uint16_t appkey_index, uint8_t aid, const uint8_t * application_key);
|
||||
void mesh_load_app_key(uint16_t appkey_index);
|
||||
void mesh_delete_app_key(uint16_t appkey_index);
|
||||
void mesh_load_app_keys(void);
|
||||
void mesh_delete_app_keys(void);
|
||||
|
||||
// Mesh Model Subscriptions
|
||||
uint8_t mesh_model_add_subscription(mesh_model_t * mesh_model, uint16_t address);
|
||||
void mesh_model_delete_subscription(mesh_model_t * mesh_model, uint16_t address);
|
||||
|
1817
test/mesh/mesh_configuration_server.c
Normal file
1817
test/mesh/mesh_configuration_server.c
Normal file
File diff suppressed because it is too large
Load Diff
55
test/mesh/mesh_configuration_server.h
Normal file
55
test/mesh/mesh_configuration_server.h
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2018 BlueKitchen GmbH
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the copyright holders nor the names of
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* 4. Any redistribution, use, or modification is done solely for
|
||||
* personal benefit and not for any commercial purpose or for
|
||||
* monetary gain.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
|
||||
* RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* Please inquire about commercial licensing options at
|
||||
* contact@bluekitchen-gmbh.com
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __MESH_CONFIGURATION_SERVER_H
|
||||
#define __MESH_CONFIGURATION_SERVER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "mesh_access.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
const mesh_operation_t * mesh_configuration_server_get_operations(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* end of extern "C" */
|
||||
#endif
|
||||
|
||||
#endif
|
@ -52,6 +52,122 @@ extern "C"
|
||||
#define MESH_TTL_MAX 0x7f
|
||||
#define MESH_FOUNDATION_STATE_NOT_SUPPORTED 2
|
||||
|
||||
// Mesh Model Identifiers
|
||||
#define MESH_SIG_MODEL_ID_CONFIGURATION_SERVER 0x0000u
|
||||
#define MESH_SIG_MODEL_ID_CONFIGURATION_CLIENT 0x0001u
|
||||
#define MESH_SIG_MODEL_ID_HEALTH_SERVER 0x0002u
|
||||
#define MESH_SIG_MODEL_ID_HEALTH_CLIENT 0x0003u
|
||||
#define MESH_SIG_MODEL_ID_GENERIC_ON_OFF_SERVER 0x1000u
|
||||
#define MESH_SIG_MODEL_ID_GENERIC_ON_OFF_CLIENT 0x1001u
|
||||
|
||||
// Foundation Model Operations
|
||||
#define MESH_FOUNDATION_OPERATION_APPKEY_ADD 0x00
|
||||
#define MESH_FOUNDATION_OPERATION_APPKEY_UPDATE 0x01
|
||||
#define MESH_FOUNDATION_OPERATION_COMPOSITION_DATA_STATUS 0x02
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_SET 0x03
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_CURRENT_STATUS 0x04
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_STATUS 0x05
|
||||
#define MESH_FOUNDATION_OPERATION_HEARTBEAT_PUBLICATION_STATUS 0x06
|
||||
#define MESH_FOUNDATION_OPERATION_APPKEY_DELETE 0x8000
|
||||
#define MESH_FOUNDATION_OPERATION_APPKEY_GET 0x8001
|
||||
#define MESH_FOUNDATION_OPERATION_APPKEY_LIST 0x8002
|
||||
#define MESH_FOUNDATION_OPERATION_APPKEY_STATUS 0x8003
|
||||
#define MESH_FOUNDATION_OPERATION_ATTENTION_GET 0x8004
|
||||
#define MESH_FOUNDATION_OPERATION_ATTENTION_SET 0x8005
|
||||
#define MESH_FOUNDATION_OPERATION_ATTENTION_SET_UNACKNOWLEDGED 0x8006
|
||||
#define MESH_FOUNDATION_OPERATION_ATTENTION_STATUS 0x8007
|
||||
#define MESH_FOUNDATION_OPERATION_COMPOSITION_DATA_GET 0x8008
|
||||
#define MESH_FOUNDATION_OPERATION_BEACON_GET 0x8009
|
||||
#define MESH_FOUNDATION_OPERATION_BEACON_SET 0x800a
|
||||
#define MESH_FOUNDATION_OPERATION_BEACON_STATUS 0x800b
|
||||
#define MESH_FOUNDATION_OPERATION_DEFAULT_TTL_GET 0x800c
|
||||
#define MESH_FOUNDATION_OPERATION_DEFAULT_TTL_SET 0x800d
|
||||
#define MESH_FOUNDATION_OPERATION_DEFAULT_TTL_STATUS 0x800e
|
||||
#define MESH_FOUNDATION_OPERATION_FRIEND_GET 0x800f
|
||||
#define MESH_FOUNDATION_OPERATION_FRIEND_SET 0x8010
|
||||
#define MESH_FOUNDATION_OPERATION_FRIEND_STATUS 0x8011
|
||||
#define MESH_FOUNDATION_OPERATION_GATT_PROXY_GET 0x8012
|
||||
#define MESH_FOUNDATION_OPERATION_GATT_PROXY_SET 0x8013
|
||||
#define MESH_FOUNDATION_OPERATION_GATT_PROXY_STATUS 0x8014
|
||||
#define MESH_FOUNDATION_OPERATION_KEY_REFRESH_PHASE_GET 0x8015
|
||||
#define MESH_FOUNDATION_OPERATION_KEY_REFRESH_PHASE_SET 0x8016
|
||||
#define MESH_FOUNDATION_OPERATION_KEY_REFRESH_PHASE_STATUS 0x8017
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_GET 0x8018
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_STATUS 0x8019
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET 0x801a
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_ADD 0x801b
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_DELETE 0x801c
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_DELETE_ALL 0x801d
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_OVERWRITE 0x801e
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_STATUS 0x801f
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD 0x8020
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE 0x8021
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE 0x8022
|
||||
#define MESH_FOUNDATION_OPERATION_NETWORK_TRANSMIT_GET 0x8023
|
||||
#define MESH_FOUNDATION_OPERATION_NETWORK_TRANSMIT_SET 0x8024
|
||||
#define MESH_FOUNDATION_OPERATION_NETWORK_TRANSMIT_STATUS 0x8025
|
||||
#define MESH_FOUNDATION_OPERATION_RELAY_GET 0x8026
|
||||
#define MESH_FOUNDATION_OPERATION_RELAY_SET 0x8027
|
||||
#define MESH_FOUNDATION_OPERATION_RELAY_STATUS 0x8028
|
||||
#define MESH_FOUNDATION_OPERATION_SIG_MODEL_SUBSCRIPTION_GET 0x8029
|
||||
#define MESH_FOUNDATION_OPERATION_SIG_MODEL_SUBSCRIPTION_LIST 0x802a
|
||||
#define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_SUBSCRIPTION_GET 0x802b
|
||||
#define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_SUBSCRIPTION_LIST 0x802c
|
||||
#define MESH_FOUNDATION_OPERATION_LOW_POWER_NODE_POLL_TIMEOUT_GET 0x802d
|
||||
#define MESH_FOUNDATION_OPERATION_LOW_POWER_NODE_POLL_TIMEOUT_STATUS 0x802e
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_CLEAR 0x802f
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_CLEAR_UNACKNOWLEDGED 0x8030
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_GET 0x8031
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_TEST 0x8032
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_TEST_UNACKNOWLEDGED 0x8033
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_GET 0x8034
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_SET 0x8035
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_SET_UNACKNOWLEDGED 0x8036
|
||||
#define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_STATUS 0x8037
|
||||
#define MESH_FOUNDATION_OPERATION_HEARTBEAT_PUBLICATION_GET 0x8038
|
||||
#define MESH_FOUNDATION_OPERATION_HEARTBEAT_PUBLICATION_SET 0x8039
|
||||
#define MESH_FOUNDATION_OPERATION_HEARTBEAT_SUBSCRIPTION_GET 0x803a
|
||||
#define MESH_FOUNDATION_OPERATION_HEARTBEAT_SUBSCRIPTION_SET 0x803b
|
||||
#define MESH_FOUNDATION_OPERATION_HEARTBEAT_SUBSCRIPTION_STATUS 0x803c
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_APP_BIND 0x803d
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_APP_STATUS 0x803e
|
||||
#define MESH_FOUNDATION_OPERATION_MODEL_APP_UNBIND 0x803f
|
||||
#define MESH_FOUNDATION_OPERATION_NETKEY_ADD 0x8040
|
||||
#define MESH_FOUNDATION_OPERATION_NETKEY_DELETE 0x8041
|
||||
#define MESH_FOUNDATION_OPERATION_NETKEY_GET 0x8042
|
||||
#define MESH_FOUNDATION_OPERATION_NETKEY_LIST 0x8043
|
||||
#define MESH_FOUNDATION_OPERATION_NETKEY_STATUS 0x8044
|
||||
#define MESH_FOUNDATION_OPERATION_NETKEY_UPDATE 0x8045
|
||||
#define MESH_FOUNDATION_OPERATION_NODE_IDENTITY_GET 0x8046
|
||||
#define MESH_FOUNDATION_OPERATION_NODE_IDENTITY_SET 0x8047
|
||||
#define MESH_FOUNDATION_OPERATION_NODE_IDENTITY_STATUS 0x8048
|
||||
#define MESH_FOUNDATION_OPERATION_NODE_RESET 0x8049
|
||||
#define MESH_FOUNDATION_OPERATION_NODE_RESET_STATUS 0x804a
|
||||
#define MESH_FOUNDATION_OPERATION_SIG_MODEL_APP_GET 0x804b
|
||||
#define MESH_FOUNDATION_OPERATION_SIG_MODEL_APP_LIST 0x804c
|
||||
#define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_APP_GET 0x804d
|
||||
#define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_APP_LIST 0x804e
|
||||
|
||||
// Foundation Models Status Codes
|
||||
#define MESH_FOUNDATION_STATUS_SUCCESS 0x00
|
||||
#define MESH_FOUNDATION_STATUS_INVALID_ADDRESS 0x01
|
||||
#define MESH_FOUNDATION_STATUS_INVALID_MODEL 0x02
|
||||
#define MESH_FOUNDATION_STATUS_INVALID_APPKEY_INDEX 0x03
|
||||
#define MESH_FOUNDATION_STATUS_INVALID_NETKEY_INDEX 0x04
|
||||
#define MESH_FOUNDATION_STATUS_INSUFFICIENT_RESOURCES 0x05
|
||||
#define MESH_FOUNDATION_STATUS_KEY_INDEX_ALREADY_STORED 0x06
|
||||
#define MESH_FOUNDATION_STATUS_INVALID_PUBLISH_PARAMETER 0x07
|
||||
#define MESH_FOUNDATION_STATUS_NOT_A_SUBSCRIPTION_MODEL 0x08
|
||||
#define MESH_FOUNDATION_STATUS_STORAGE_FAILURE 0x09
|
||||
#define MESH_FOUNDATION_STATUS_FEATURE_NOT_SUPPORTED 0x0a
|
||||
#define MESH_FOUNDATION_STATUS_CANNOT_UPDATE 0x0b
|
||||
#define MESH_FOUNDATION_STATUS_CANNOT_REMOVE 0x0c
|
||||
#define MESH_FOUNDATION_STATUS_CANNOT_BIND 0x0d
|
||||
#define MESH_FOUNDATION_STATUS_TEMPORARILY_UNABLE_TO_CHANGE_STATE 0x0e
|
||||
#define MESH_FOUNDATION_STATUS_CANNOT_SET 0x0f
|
||||
#define MESH_FOUNDATION_STATUS_UNSPECIFIED_ERROR 0x10
|
||||
#define MESH_FOUNDATION_STATUS_INVALID_BINDING 0x11
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ttl
|
||||
|
Loading…
x
Reference in New Issue
Block a user