mesh: appkey management - add iterator to get all keys for a given netkey index

This commit is contained in:
Matthias Ringwald 2019-04-25 22:24:23 +02:00
parent 9572f83fe1
commit 48dbbdaabd
2 changed files with 42 additions and 2 deletions

View File

@ -194,6 +194,26 @@ const mesh_transport_key_t * mesh_transport_key_get(uint16_t appkey_index){
}
// key iterator
void mesh_transport_key_iterator_init(mesh_transport_key_iterator_t *it, uint16_t netkey_index){
btstack_linked_list_iterator_init(&it->it, &application_keys);
it->netkey_index = netkey_index;
}
int mesh_transport_key_iterator_has_more(mesh_transport_key_iterator_t *it){
// find next matching key
while (1){
if (it->key && it->key->netkey_index == it->netkey_index) return 1;
if (!btstack_linked_list_iterator_has_next(&it->it)) break;
it->key = (mesh_transport_key_t *) btstack_linked_list_iterator_next(&it->it);
}
return 0;
}
mesh_transport_key_t * mesh_transport_key_iterator_get_next(mesh_transport_key_iterator_t *it){
mesh_transport_key_t * key = it->key;
it->key = NULL;
return key;
}
void
mesh_transport_key_aid_iterator_init(mesh_transport_key_iterator_t *it, uint16_t netkey_index, uint8_t akf, uint8_t aid) {
@ -206,7 +226,6 @@ mesh_transport_key_aid_iterator_init(mesh_transport_key_iterator_t *it, uint16_t
} else {
it->key = &mesh_transport_device_key;
}
}
int mesh_transport_key_aid_iterator_has_more(mesh_transport_key_iterator_t *it){

View File

@ -180,7 +180,7 @@ void mesh_network_key_nid_iterator_init(mesh_network_key_iterator_t *it, uint8_t
int mesh_network_key_nid_iterator_has_more(mesh_network_key_iterator_t *it);
/**
* Get net network_key with given NID
* Get next network_key with given NID
* @param it
* @return
*/
@ -226,6 +226,27 @@ void mesh_application_key_set(uint16_t netkey_index, uint16_t appkey_index, uint
*/
const mesh_transport_key_t * mesh_transport_key_get(uint16_t appkey_index);
/**
* @brief Iterate over all transport keys (AppKeys) for a given netkey index
* @param it
* @param netkey_index
*/
void mesh_transport_key_iterator_init(mesh_transport_key_iterator_t *it, uint16_t netkey_index);
/**
* Check if another transport key (AppKey) is available
* @param it
* @return
*/
int mesh_transport_key_iterator_has_more(mesh_transport_key_iterator_t *it);
/**
* Get next transport key (AppKey)
* @param it
* @return
*/
mesh_transport_key_t * mesh_transport_key_iterator_get_next(mesh_transport_key_iterator_t *it);
/**
* Transport Key Iterator by AID - init
* @param it