Wirepas SDK
wms_settings.h
Go to the documentation of this file.
1 /* Copyright 2019 Wirepas Ltd. All Rights Reserved.
2  *
3  * See file LICENSE.txt for full license details.
4  *
5  */
6 
22 #ifndef APP_LIB_SETTINGS_H_
23 #define APP_LIB_SETTINGS_H_
24 
25 #include <stdlib.h>
26 #include <stdint.h>
27 #include <stdbool.h>
28 
29 #include "wms_app.h"
30 
32 #define APP_LIB_SETTINGS_NAME 0x74ced676
33 
34 
35 #define APP_LIB_SETTINGS_VERSION 0x20d
36 
44 #define APP_LIB_SETTINGS_AES_KEY_NUM_BYTES 16
45 
46 // Device address definition is in app/app.h */
47 
53 typedef uint32_t app_lib_settings_net_addr_t;
54 
59 
64 #define CHANNEL_NO_CHANNEL 0
65 
66 typedef enum
67 {
87 
88 
93 typedef enum
94 {
102 
103 
137 typedef struct __attribute__((packed))
138 {
139  struct
140  {
141  const uint8_t (*encryption_key_p)
143  const uint8_t (*authentication_key_p)
146  } network_key_pair, management_key_pair;
147 
148  struct
149  {
154  uint8_t apply_flags : 1;
155 
158  uint8_t app_key_management_supported : 1;
159 
162  uint8_t app_key_management_configured : 1;
163 
166  uint8_t revoke_keys : 1;
167 
169  uint8_t reserved : 4;
170  } flags;
171 
175 
176 
182 typedef uint8_t app_lib_settings_role_t;
183 
205 typedef bool (*app_lib_settings_is_group_cb_f)(app_addr_t group_addr);
206 
229 
246  uint32_t * bits_p);
247 
260 
274 
295  const uint8_t * key_p);
296 
307 
323 
334  app_lib_settings_net_addr_t * addr_p);
335 
350 
360  app_lib_settings_net_channel_t * channel_p);
361 
382 
395  app_lib_settings_role_t * role_p);
396 
424 
439 
460  const uint8_t * key_p);
461 
476 
497  const uint8_t * key_p);
498 
520 typedef app_res_e (*app_lib_settings_get_ac_range_f)(uint16_t * ac_min_value_p,
521  uint16_t * ac_max_value_p);
522 
572 typedef app_res_e (*app_lib_settings_set_ac_range_f)(uint16_t ac_min_value,
573  uint16_t ac_max_value);
574 
587 typedef app_res_e (*app_lib_settings_get_offline_scan_f)(uint16_t * max_scan_p);
588 
613 typedef app_res_e (*app_lib_settings_set_offline_scan_f)(uint16_t max_scan);
614 
631  uint16_t * min_value_p, uint16_t * max_value_p);
632 
648  uint16_t * min_value_p, uint16_t * max_value_p);
649 
681 
706  uint8_t * channels_p, size_t num_bytes);
707 
745  const uint8_t * channels_p, size_t num_bytes);
746 
755 
762 typedef bool (*app_lib_settings_is_valid_network_channel_f)(uint8_t channel);
763 
771 
780 
795  const app_lib_settings_key_management_configuration_t * key_mgmt_cfg_p);
796 
797 
799 #define REMOTE_API_CSAP_WRITE_UNICAST 0x1
800 
801 // Return codes, these must match the values of the enum response_type_e in remote API
803 #define REMOTE_API_CSAP_RESPONSE_NORMAL 0
804 
805 #define REMOTE_API_CSAP_RESPONSE_NONE 1
806 
807 #define REMOTE_API_CSAP_RESPONSE_ACCESS_DENIED 0xf8
808 
809 #define REMOTE_API_CSAP_RESPONSE_WRITE_ONLY_ATTRIBUTE 0xf9
810 
811 #define REMOTE_API_CSAP_RESPONSE_INVALID_BROADCAST_REQUEST 0xfa
812 
813 #define REMOTE_API_CSAP_RESPONSE_INVALID_BEGIN 0xfb
814 
815 #define REMOTE_API_CSAP_RESPONSE_NO_SPACE_FOR_RESPONSE 0xfc
816 
817 #define REMOTE_API_CSAP_RESPONSE_INVALID_VALUE 0xfd
818 
819 #define REMOTE_API_CSAP_RESPONSE_INVALID_LENGTH 0xfe
820 
821 #define REMOTE_API_CSAP_RESPONSE_UNKNOWN_REQUEST 0xff
822 
828 typedef struct
829 {
831  const uint8_t * request_buffer;
833  uint8_t * response_buffer;
843 
872 typedef uint8_t (*app_lib_settings_remote_api_csap_write_f)( uint16_t attr_id, uint32_t flags, app_lib_settings_remote_api_csap_data_t * data);
873 
888 
889 
912 
913 
927 
928 
939 
940 
954 
955 
965 
979 
987 typedef struct
988 {
1030 
1031 #endif /* APP_LIB_SETTINGS_H_ */
app_lib_settings_remote_api_csap_data_t
Struct containing the CSAP Read adn Write request and response information. Needed the requests are h...
Definition: wms_settings.h:828
app_lib_settings_register_remote_api_csap_write_cb_f
app_res_e(* app_lib_settings_register_remote_api_csap_write_cb_f)(app_lib_settings_remote_api_csap_write_f cb)
Register a callback function which is to be called when a CSAP Write request is received and it needs...
Definition: wms_settings.h:886
app_lib_settings_t::isValidNetworkAddress
app_lib_settings_is_valid_network_address_f isValidNetworkAddress
Definition: wms_settings.h:1015
app_lib_settings_get_reserved_channels_f
app_res_e(* app_lib_settings_get_reserved_channels_f)(uint8_t *channels_p, size_t num_bytes)
Get reserved channels.
Definition: wms_settings.h:705
app_lib_settings_register_remote_api_csap_cancel_cb_f
app_res_e(* app_lib_settings_register_remote_api_csap_cancel_cb_f)(app_lib_settings_remote_api_csap_cancel_f cb)
Register a callback function which is to be called when a CSAP Cancel request is received and it need...
Definition: wms_settings.h:977
app_lib_settings_t::registerGroupQuery
app_lib_settings_set_group_query_cb_f registerGroupQuery
Definition: wms_settings.h:1012
app_lib_settings_set_network_channel_f
app_res_e(* app_lib_settings_set_network_channel_f)(app_lib_settings_net_channel_t channel)
Set network channel.
Definition: wms_settings.h:380
app_lib_settings_set_authentication_key_f
app_res_e(* app_lib_settings_set_authentication_key_f)(const uint8_t *key_p)
Set authentication key.
Definition: wms_settings.h:459
app_lib_settings_net_channel_t
uint8_t app_lib_settings_net_channel_t
Channel type definition.
Definition: wms_settings.h:58
APP_LIB_SETTINGS_ROLE_SUBNODE_LE
@ APP_LIB_SETTINGS_ROLE_SUBNODE_LE
Definition: wms_settings.h:77
app_lib_settings_t::registerRemoteApiCsapWriteCb
app_lib_settings_register_remote_api_csap_write_cb_f registerRemoteApiCsapWriteCb
Definition: wms_settings.h:1022
app_lib_settings_set_reserved_channels_f
app_res_e(* app_lib_settings_set_reserved_channels_f)(const uint8_t *channels_p, size_t num_bytes)
Set reserved channels.
Definition: wms_settings.h:744
APP_LIB_SETTINGS_ROLE_ADVERTISER
@ APP_LIB_SETTINGS_ROLE_ADVERTISER
Definition: wms_settings.h:85
app_lib_settings_remote_api_csap_data_t::response_buffer_len
uint8_t response_buffer_len
Definition: wms_settings.h:841
app_lib_settings_register_remote_api_csap_update_cb_f
app_res_e(* app_lib_settings_register_remote_api_csap_update_cb_f)(app_lib_settings_remote_api_csap_update_f cb)
Register a callback function which is to be called when a CSAP Update request is received and it need...
Definition: wms_settings.h:952
app_lib_settings_t::registerRemoteApiCsapReadCb
app_lib_settings_register_remote_api_csap_read_cb_f registerRemoteApiCsapReadCb
Definition: wms_settings.h:1024
app_lib_settings_t::getFeatureLockKey
app_lib_settings_get_feature_lock_key_f getFeatureLockKey
Definition: wms_settings.h:992
app_lib_settings_t::getAuthenticationKey
app_lib_settings_get_authentication_key_f getAuthenticationKey
Definition: wms_settings.h:1002
app_lib_settings_set_node_address_f
app_res_e(* app_lib_settings_set_node_address_f)(app_addr_t addr)
Set node address.
Definition: wms_settings.h:322
APP_LIB_SETTINGS_ROLE_HEADNODE_LE
@ APP_LIB_SETTINGS_ROLE_HEADNODE_LE
Definition: wms_settings.h:73
app_lib_settings_t::getAcRange
app_lib_settings_get_ac_range_f getAcRange
Definition: wms_settings.h:1006
app_lib_settings_set_offline_scan_f
app_res_e(* app_lib_settings_set_offline_scan_f)(uint16_t max_scan)
Set the maximum offline scan interval in seconds.
Definition: wms_settings.h:613
app_res_e
app_res_e
Definition: wms_app.h:201
app_lib_settings_t::isValidNodeRole
app_lib_settings_is_valid_node_role_f isValidNodeRole
Definition: wms_settings.h:1018
app_lib_settings_get_network_address_f
app_res_e(* app_lib_settings_get_network_address_f)(app_lib_settings_net_addr_t *addr_p)
Get network address.
Definition: wms_settings.h:333
app_lib_settings_is_group_cb_f
bool(* app_lib_settings_is_group_cb_f)(app_addr_t group_addr)
Callback used for determining on which multicast groups the device belongs.
Definition: wms_settings.h:205
app_lib_settings_remote_api_csap_cancel_f
void(* app_lib_settings_remote_api_csap_cancel_f)(void)
A callback function type used for providing the Remote API Cancel request information to application ...
Definition: wms_settings.h:964
app_lib_settings_get_ac_range_f
app_res_e(* app_lib_settings_get_ac_range_f)(uint16_t *ac_min_value_p, uint16_t *ac_max_value_p)
Get the access cycle range.
Definition: wms_settings.h:520
wms_app.h
app_lib_settings_get_node_role_f
app_res_e(* app_lib_settings_get_node_role_f)(app_lib_settings_role_t *role_p)
Definition: wms_settings.h:394
app_lib_settings_is_valid_network_channel_f
bool(* app_lib_settings_is_valid_network_channel_f)(uint8_t channel)
Check that the network channel is valid.
Definition: wms_settings.h:762
app_lib_settings_t::getOfflineScan
app_lib_settings_get_offline_scan_f getOfflineScan
Definition: wms_settings.h:1008
app_lib_settings_t::setEncryptionKey
app_lib_settings_set_encryption_key_f setEncryptionKey
Definition: wms_settings.h:1005
app_lib_settings_get_node_address_f
app_res_e(* app_lib_settings_get_node_address_f)(app_addr_t *addr_p)
Get node address.
Definition: wms_settings.h:306
app_lib_settings_net_addr_t
uint32_t app_lib_settings_net_addr_t
Network address type definition.
Definition: wms_settings.h:53
app_lib_settings_get_network_channel_limits_f
app_res_e(* app_lib_settings_get_network_channel_limits_f)(uint16_t *min_value_p, uint16_t *max_value_p)
Get network channel range.
Definition: wms_settings.h:630
app_lib_settings_t::setNodeRole
app_lib_settings_set_node_role_f setNodeRole
Definition: wms_settings.h:1001
app_lib_settings_get_feature_lock_key_f
app_res_e(* app_lib_settings_get_feature_lock_key_f)(uint8_t *key_p)
Check if feature lock key is set.
Definition: wms_settings.h:273
app_lib_settings_remote_api_csap_data_t::request_buffer
const uint8_t * request_buffer
Definition: wms_settings.h:831
app_lib_settings_t::registerRemoteApiCsapCancelCb
app_lib_settings_register_remote_api_csap_cancel_cb_f registerRemoteApiCsapCancelCb
Definition: wms_settings.h:1028
app_lib_settings_get_offline_scan_f
app_res_e(* app_lib_settings_get_offline_scan_f)(uint16_t *max_scan_p)
Get the maximum offline scan interval in seconds.
Definition: wms_settings.h:587
APP_LIB_SETTINGS_REMOTE_API_RES_OK
@ APP_LIB_SETTINGS_REMOTE_API_RES_OK
Definition: wms_settings.h:98
app_lib_settings_reset_all_f
app_res_e(* app_lib_settings_reset_all_f)(void)
Reset all settings to default values.
Definition: wms_settings.h:228
app_lib_settings_get_ac_range_limits_f
app_res_e(* app_lib_settings_get_ac_range_limits_f)(uint16_t *min_value_p, uint16_t *max_value_p)
Get access cycle range limits.
Definition: wms_settings.h:647
app_lib_settings_is_valid_node_role_f
bool(* app_lib_settings_is_valid_node_role_f)(app_lib_settings_role_t role)
Check that the node role is valid.
Definition: wms_settings.h:778
app_lib_settings_set_feature_lock_key_f
app_res_e(* app_lib_settings_set_feature_lock_key_f)(const uint8_t *key_p)
Set feature lock key.
Definition: wms_settings.h:294
APP_LIB_SETTINGS_REMOTE_API_RES_NONE
@ APP_LIB_SETTINGS_REMOTE_API_RES_NONE
Definition: wms_settings.h:96
app_lib_settings_key_management_configuration_t::network_key_pair_seq
uint8_t network_key_pair_seq
Definition: wms_settings.h:172
app_lib_settings_t::getNetworkChannel
app_lib_settings_get_network_channel_f getNetworkChannel
Definition: wms_settings.h:998
app_lib_settings_t::setNetworkAddress
app_lib_settings_set_network_address_f setNetworkAddress
Definition: wms_settings.h:997
app_lib_settings_t::getReservedChannels
app_lib_settings_get_reserved_channels_f getReservedChannels
Definition: wms_settings.h:1013
app_lib_settings_t::getAcRangeLimits
app_lib_settings_get_ac_range_limits_f getAcRangeLimits
Definition: wms_settings.h:1011
app_lib_settings_role_e
app_lib_settings_role_e
Definition: wms_settings.h:66
app_lib_settings_set_feature_lock_bits_f
app_res_e(* app_lib_settings_set_feature_lock_bits_f)(uint32_t bits)
Set feature lock bits.
Definition: wms_settings.h:259
app_lib_settings_get_network_channel_f
app_res_e(* app_lib_settings_get_network_channel_f)(app_lib_settings_net_channel_t *channel_p)
Get network channel.
Definition: wms_settings.h:359
app_lib_settings_remote_api_csap_update_f
app_lib_settings_remote_api_res_e(* app_lib_settings_remote_api_csap_update_f)(void)
A callback function type used for providing the Remote API Update request information to application ...
Definition: wms_settings.h:938
app_lib_settings_t::registerRemoteApiCsapUpdateCb
app_lib_settings_register_remote_api_csap_update_cb_f registerRemoteApiCsapUpdateCb
Definition: wms_settings.h:1026
app_lib_settings_set_encryption_key_f
app_res_e(* app_lib_settings_set_encryption_key_f)(const uint8_t *key_p)
Set encryption key.
Definition: wms_settings.h:496
app_lib_settings_key_management_config_f
app_res_e(* app_lib_settings_key_management_config_f)(const app_lib_settings_key_management_configuration_t *key_mgmt_cfg_p)
Key management configuration using the settings API.
Definition: wms_settings.h:794
app_lib_settings_t::getNodeAddress
app_lib_settings_get_node_address_f getNodeAddress
Definition: wms_settings.h:994
app_lib_settings_key_management_configuration_t::management_key_pair_seq
uint8_t management_key_pair_seq
Definition: wms_settings.h:173
app_lib_settings_t::setNodeAddress
app_lib_settings_set_node_address_f setNodeAddress
Definition: wms_settings.h:995
app_lib_settings_t::getFeatureLockBits
app_lib_settings_get_feature_lock_bits_f getFeatureLockBits
Definition: wms_settings.h:990
app_lib_settings_set_ac_range_f
app_res_e(* app_lib_settings_set_ac_range_f)(uint16_t ac_min_value, uint16_t ac_max_value)
Set range for access cycle.
Definition: wms_settings.h:572
app_lib_settings_set_network_address_f
app_res_e(* app_lib_settings_set_network_address_f)(app_lib_settings_net_addr_t addr)
Set network address.
Definition: wms_settings.h:348
APP_LIB_SETTINGS_ROLE_SINK_LL
@ APP_LIB_SETTINGS_ROLE_SINK_LL
Definition: wms_settings.h:71
app_lib_settings_t::getEncryptionKey
app_lib_settings_get_encryption_key_f getEncryptionKey
Definition: wms_settings.h:1004
APP_LIB_SETTINGS_AES_KEY_NUM_BYTES
#define APP_LIB_SETTINGS_AES_KEY_NUM_BYTES
AES key size in bytes.
Definition: wms_settings.h:44
APP_LIB_SETTINGS_ROLE_AUTOROLE_LE
@ APP_LIB_SETTINGS_ROLE_AUTOROLE_LE
Definition: wms_settings.h:81
app_lib_settings_remote_api_res_e
app_lib_settings_remote_api_res_e
Definition: wms_settings.h:93
app_lib_settings_t::setNetworkChannel
app_lib_settings_set_network_channel_f setNetworkChannel
Definition: wms_settings.h:999
app_lib_settings_get_encryption_key_f
app_res_e(* app_lib_settings_get_encryption_key_f)(uint8_t *key_p)
Check if encryption key is set.
Definition: wms_settings.h:475
app_addr_t
uint32_t app_addr_t
Definition: wms_app.h:228
app_lib_settings_key_management_configuration_t
Structure to hold key management configuration information for the settings API.
Definition: wms_settings.h:137
APP_LIB_SETTINGS_ROLE_SINK_LE
@ APP_LIB_SETTINGS_ROLE_SINK_LE
Definition: wms_settings.h:69
APP_LIB_SETTINGS_ROLE_SUBNODE_LL
@ APP_LIB_SETTINGS_ROLE_SUBNODE_LL
Definition: wms_settings.h:79
app_lib_settings_remote_api_csap_read_f
uint8_t(* app_lib_settings_remote_api_csap_read_f)(uint16_t attr_id, app_lib_settings_remote_api_csap_data_t *data)
A callback function type used for providing the Remote API CSAP Read request information to applicati...
Definition: wms_settings.h:911
app_lib_settings_set_node_role_f
app_res_e(* app_lib_settings_set_node_role_f)(app_lib_settings_role_t role)
Set node role.
Definition: wms_settings.h:422
app_lib_settings_is_valid_network_address_f
bool(* app_lib_settings_is_valid_network_address_f)(app_lib_settings_net_addr_t addr)
Check that the network address is valid.
Definition: wms_settings.h:753
app_lib_settings_t
Settings library API.
Definition: wms_settings.h:987
app_lib_settings_t::isValidNodeAddress
app_lib_settings_is_valid_node_address_f isValidNodeAddress
Definition: wms_settings.h:1017
app_lib_settings_set_group_query_cb_f
app_res_e(* app_lib_settings_set_group_query_cb_f)(app_lib_settings_is_group_cb_f cb)
Set the callback function for multicat groups.
Definition: wms_settings.h:679
app_lib_settings_t::setFeatureLockKey
app_lib_settings_set_feature_lock_key_f setFeatureLockKey
Definition: wms_settings.h:993
app_lib_settings_role_t
uint8_t app_lib_settings_role_t
Node role type.
Definition: wms_settings.h:182
app_lib_settings_t::getNetworkAddress
app_lib_settings_get_network_address_f getNetworkAddress
Definition: wms_settings.h:996
app_lib_settings_register_remote_api_csap_read_cb_f
app_res_e(* app_lib_settings_register_remote_api_csap_read_cb_f)(app_lib_settings_remote_api_csap_read_f cb)
Register a callback function which is to be called when a CSAP Read request is received and it needs ...
Definition: wms_settings.h:925
app_lib_settings_t::setAcRange
app_lib_settings_set_ac_range_f setAcRange
Definition: wms_settings.h:1007
app_lib_settings_t::getNetworkChannelLimits
app_lib_settings_get_network_channel_limits_f getNetworkChannelLimits
Definition: wms_settings.h:1010
app_lib_settings_t::setReservedChannels
app_lib_settings_set_reserved_channels_f setReservedChannels
Definition: wms_settings.h:1014
app_lib_settings_t::keyManagementConfiguration
app_lib_settings_key_management_config_f keyManagementConfiguration
Definition: wms_settings.h:1020
app_lib_settings_get_feature_lock_bits_f
app_res_e(* app_lib_settings_get_feature_lock_bits_f)(uint32_t *bits_p)
Get feature lock bits.
Definition: wms_settings.h:245
app_lib_settings_is_valid_node_address_f
bool(* app_lib_settings_is_valid_node_address_f)(app_addr_t addr)
Check that the node address is valid.
Definition: wms_settings.h:770
app_lib_settings_remote_api_csap_write_f
uint8_t(* app_lib_settings_remote_api_csap_write_f)(uint16_t attr_id, uint32_t flags, app_lib_settings_remote_api_csap_data_t *data)
A callback function type used for providing the Remote API CSAP Write request information to applicat...
Definition: wms_settings.h:872
app_lib_settings_t::resetAll
app_lib_settings_reset_all_f resetAll
Definition: wms_settings.h:989
APP_LIB_SETTINGS_REMOTE_API_RES_OK_RESET
@ APP_LIB_SETTINGS_REMOTE_API_RES_OK_RESET
Definition: wms_settings.h:100
app_lib_settings_t::setFeatureLockBits
app_lib_settings_set_feature_lock_bits_f setFeatureLockBits
Definition: wms_settings.h:991
app_lib_settings_t::getNodeRole
app_lib_settings_get_node_role_f getNodeRole
Definition: wms_settings.h:1000
app_lib_settings_t::isValidNetworkChannel
app_lib_settings_is_valid_network_channel_f isValidNetworkChannel
Definition: wms_settings.h:1016
app_lib_settings_remote_api_csap_data_t::response_buffer
uint8_t * response_buffer
Definition: wms_settings.h:833
APP_LIB_SETTINGS_ROLE_HEADNODE_LL
@ APP_LIB_SETTINGS_ROLE_HEADNODE_LL
Definition: wms_settings.h:75
app_lib_settings_get_authentication_key_f
app_res_e(* app_lib_settings_get_authentication_key_f)(uint8_t *key_p)
Check if authentication key is set.
Definition: wms_settings.h:438
app_lib_settings_t::setAuthenticationKey
app_lib_settings_set_authentication_key_f setAuthenticationKey
Definition: wms_settings.h:1003
app_lib_settings_t::setOfflineScan
app_lib_settings_set_offline_scan_f setOfflineScan
Definition: wms_settings.h:1009
APP_LIB_SETTINGS_ROLE_AUTOROLE_LL
@ APP_LIB_SETTINGS_ROLE_AUTOROLE_LL
Definition: wms_settings.h:83
app_lib_settings_remote_api_csap_data_t::request_buffer_len
uint8_t request_buffer_len
Definition: wms_settings.h:835