From 2425b17394e6f7a3e1ba268f85cfc0e8751c9f22 Mon Sep 17 00:00:00 2001 From: Chirag Atal Date: Wed, 11 Aug 2021 11:02:31 +0530 Subject: [PATCH] esp_rmaker_core: Added a get_device_by_name API similar to params --- .../esp_rainmaker/include/esp_rmaker_core.h | 12 ++++++++++++ .../esp_rainmaker/src/core/esp_rmaker_node.c | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/components/esp_rainmaker/include/esp_rmaker_core.h b/components/esp_rainmaker/include/esp_rmaker_core.h index 5483734..0fea4f1 100644 --- a/components/esp_rainmaker/include/esp_rmaker_core.h +++ b/components/esp_rainmaker/include/esp_rmaker_core.h @@ -518,6 +518,18 @@ esp_err_t esp_rmaker_node_add_device(const esp_rmaker_node_t *node, const esp_rm */ esp_err_t esp_rmaker_node_remove_device(const esp_rmaker_node_t *node, const esp_rmaker_device_t *device); +/** Get device by name + * + * Get handle for a device based on the name. + * + * @param[in] node Node handle. + * @param[in] device_name Device name to search. + * + * @return Device handle on success. + * @return NULL in case of failure. + */ +esp_rmaker_device_t *esp_rmaker_node_get_device_by_name(const esp_rmaker_node_t *node, const char *device_name); + /** Add a Device attribute * * @note Device attributes are reported only once after a boot-up as part of the node diff --git a/components/esp_rainmaker/src/core/esp_rmaker_node.c b/components/esp_rainmaker/src/core/esp_rmaker_node.c index 1108d23..996c02c 100644 --- a/components/esp_rainmaker/src/core/esp_rmaker_node.c +++ b/components/esp_rainmaker/src/core/esp_rmaker_node.c @@ -271,6 +271,22 @@ esp_err_t esp_rmaker_node_remove_device(const esp_rmaker_node_t *node, const esp return ESP_OK; } +esp_rmaker_device_t *esp_rmaker_node_get_device_by_name(const esp_rmaker_node_t *node, const char *device_name) +{ + if (!node || !device_name) { + ESP_LOGE(TAG, "Node handle or device name cannot be NULL"); + return NULL; + } + _esp_rmaker_device_t *device = ((_esp_rmaker_node_t *)node)->devices; + while(device) { + if (strcmp(device->name, device_name) == 0) { + break; + } + device = device->next; + } + return (esp_rmaker_device_t *)device; +} + _esp_rmaker_device_t *esp_rmaker_node_get_first_device(const esp_rmaker_node_t *node) { _esp_rmaker_node_t *_node = (_esp_rmaker_node_t *)node;