This is an automated email from the ASF dual-hosted git repository.

vipulrahane pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-mcumgr.git


The following commit(s) were added to refs/heads/master by this push:
     new fb489e1  mgmt: Add support for un-registering a group along with the 
same support in img_mgmt (#108)
fb489e1 is described below

commit fb489e1f9b3bcc536d467a9f04a59fc0fde8ea07
Author: Vipul Rahane <vipulrah...@apache.org>
AuthorDate: Wed Feb 10 12:02:30 2021 -0800

    mgmt: Add support for un-registering a group along with the same support in 
img_mgmt (#108)
    
    - Add support for unregistering command group at runtime
    - Add support for unregistering img_mgmt_group at runtime
---
 cmd/img_mgmt/include/img_mgmt/img_mgmt.h |  5 +++++
 cmd/img_mgmt/src/img_mgmt.c              |  6 ++++++
 mgmt/include/mgmt/mgmt.h                 |  8 ++++++++
 mgmt/src/mgmt.c                          | 25 +++++++++++++++++++++++++
 4 files changed, 44 insertions(+)

diff --git a/cmd/img_mgmt/include/img_mgmt/img_mgmt.h 
b/cmd/img_mgmt/include/img_mgmt/img_mgmt.h
index 78e6ba5..69f6f1b 100644
--- a/cmd/img_mgmt/include/img_mgmt/img_mgmt.h
+++ b/cmd/img_mgmt/include/img_mgmt/img_mgmt.h
@@ -120,6 +120,11 @@ struct img_mgmt_upload_action {
 void img_mgmt_register_group(void);
 
 /**
+ * @brief Unregisters the image management command handler group.
+ */ 
+void img_mgmt_unregister_group(void);
+
+/*
  * @brief Read info of an image give the slot number
  *
  * @param image_slot     Image slot to read info from
diff --git a/cmd/img_mgmt/src/img_mgmt.c b/cmd/img_mgmt/src/img_mgmt.c
index 1a40ffc..9cb7b7d 100644
--- a/cmd/img_mgmt/src/img_mgmt.c
+++ b/cmd/img_mgmt/src/img_mgmt.c
@@ -608,3 +608,9 @@ img_mgmt_register_group(void)
 {
     mgmt_register_group(&img_mgmt_group);
 }
+
+void
+img_mgmt_unregister_group(void)
+{
+    mgmt_unregister_group(&img_mgmt_group);
+}
diff --git a/mgmt/include/mgmt/mgmt.h b/mgmt/include/mgmt/mgmt.h
index 7ad22df..cb7e896 100644
--- a/mgmt/include/mgmt/mgmt.h
+++ b/mgmt/include/mgmt/mgmt.h
@@ -367,6 +367,14 @@ void mgmt_streamer_free_buf(struct mgmt_streamer 
*streamer, void *buf);
 void mgmt_register_group(struct mgmt_group *group);
 
 /**
+ * @brief Unregisters a full command group.
+ *
+ * @param group                 The group to register.
+ */
+void
+mgmt_unregister_group(struct mgmt_group *group);
+
+/**
  * @brief Finds a registered command handler.
  *
  * @param group_id              The group of the command to find.
diff --git a/mgmt/src/mgmt.c b/mgmt/src/mgmt.c
index 08343bb..77aa631 100644
--- a/mgmt/src/mgmt.c
+++ b/mgmt/src/mgmt.c
@@ -71,6 +71,31 @@ mgmt_streamer_free_buf(struct mgmt_streamer *streamer, void 
*buf)
     streamer->cfg->free_buf(buf, streamer->cb_arg);
 }
 
+void
+mgmt_unregister_group(struct mgmt_group *group)
+{
+    struct mgmt_group *curr = mgmt_group_list, *prev;
+
+    if (curr && curr == group) {
+        mgmt_group_list = curr->mg_next;
+        return;
+    }
+
+    while (curr && curr != group) {
+        prev = curr;
+        curr = curr->mg_next;
+    }
+
+    if (!curr) {
+        return;
+    }
+
+    prev->mg_next = curr->mg_next;
+    if (curr->mg_next == NULL) {
+        mgmt_group_list_end = curr;
+    }
+}
+
 static struct mgmt_group *
 mgmt_find_group(uint16_t group_id, uint16_t command_id)
 {

Reply via email to