You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/11/22 01:17:02 UTC

[03/27] incubator-mynewt-core git commit: oic; remove add_periodic_observer, use os_callout instead.

oic; remove add_periodic_observer, use os_callout instead.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/297c35d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/297c35d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/297c35d1

Branch: refs/heads/develop
Commit: 297c35d16a21780a8feb3fdf0ea2cbbb1c6bf58b
Parents: b34779a
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Tue Nov 15 18:21:21 2016 -0800
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Mon Nov 21 17:15:47 2016 -0800

----------------------------------------------------------------------
 net/oic/include/oic/oc_ri.h |  1 +
 net/oic/src/api/oc_ri.c     | 89 ++++++++++------------------------------
 2 files changed, 22 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/297c35d1/net/oic/include/oic/oc_ri.h
----------------------------------------------------------------------
diff --git a/net/oic/include/oic/oc_ri.h b/net/oic/include/oic/oc_ri.h
index c49b7be..30a706c 100644
--- a/net/oic/include/oic/oc_ri.h
+++ b/net/oic/include/oic/oc_ri.h
@@ -124,6 +124,7 @@ typedef struct oc_resource_s
   oc_request_handler_t put_handler;
   oc_request_handler_t post_handler;
   oc_request_handler_t delete_handler;
+  struct os_callout callout;
   uint16_t observe_period_seconds;
   uint8_t num_observers;
 } oc_resource_t;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/297c35d1/net/oic/src/api/oc_ri.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_ri.c b/net/oic/src/api/oc_ri.c
index 4d8c597..2ae8a61 100644
--- a/net/oic/src/api/oc_ri.c
+++ b/net/oic/src/api/oc_ri.c
@@ -49,6 +49,8 @@
 OC_LIST(app_resources);
 OC_LIST(observe_callbacks);
 OC_MEMB(app_resources_s, oc_resource_t, MAX_APP_RESOURCES);
+
+static void periodic_observe_handler(struct os_event *ev);
 #endif /* OC_SERVER */
 
 #ifdef OC_CLIENT
@@ -270,7 +272,14 @@ oc_ri_shutdown(void)
 oc_resource_t *
 oc_ri_alloc_resource(void)
 {
-  return oc_memb_alloc(&app_resources_s);
+    struct oc_resource_s *resource;
+
+    resource = oc_memb_alloc(&app_resources_s);
+    if (resource) {
+        os_callout_init(&resource->callout, oc_evq_get(),
+          periodic_observe_handler, resource);
+    }
+    return resource;
 }
 
 void
@@ -334,73 +343,20 @@ check_event_callbacks(void)
 }
 
 #ifdef OC_SERVER
-static oc_event_callback_retval_t
-periodic_observe_handler(void *data)
-{
-  oc_resource_t *resource = (oc_resource_t *)data;
-
-  if (coap_notify_observers(resource, NULL, NULL)) {
-    return CONTINUE;
-  }
-
-  return DONE;
-}
-
-static oc_event_callback_t *
-get_periodic_observe_callback(oc_resource_t *resource)
-{
-  oc_event_callback_t *event_cb;
-  bool found = false;
-
-  for (event_cb = (oc_event_callback_t *)oc_list_head(observe_callbacks);
-       event_cb; event_cb = event_cb->next) {
-    if (resource == event_cb->data) {
-      found = true;
-      break;
-    }
-  }
-
-  if (found) {
-    return event_cb;
-  }
-
-  return NULL;
-}
 
 static void
-remove_periodic_observe_callback(oc_resource_t *resource)
+periodic_observe_handler(struct os_event *ev)
 {
-  oc_event_callback_t *event_cb = get_periodic_observe_callback(resource);
-
-  if (event_cb) {
-    oc_etimer_stop(&event_cb->timer);
-    oc_list_remove(observe_callbacks, event_cb);
-    oc_memb_free(&event_callbacks_s, event_cb);
-  }
-}
+    struct oc_resource_s *resource;
 
-static bool
-add_periodic_observe_callback(oc_resource_t *resource)
-{
-  oc_event_callback_t *event_cb = get_periodic_observe_callback(resource);
+    resource = ev->ev_arg;
 
-  if (!event_cb) {
-    event_cb = (oc_event_callback_t *)oc_memb_alloc(&event_callbacks_s);
-
-    if (!event_cb)
-      return false;
-
-    event_cb->data = resource;
-    event_cb->callback = periodic_observe_handler;
-    OC_PROCESS_CONTEXT_BEGIN(&timed_callback_events);
-    oc_etimer_set(&event_cb->timer,
-                  resource->observe_period_seconds * OC_CLOCK_SECOND);
-    OC_PROCESS_CONTEXT_END(&timed_callback_events);
-    oc_list_add(observe_callbacks, event_cb);
-  }
-
-  return true;
+    if (coap_notify_observers(resource, NULL, NULL)) {
+        os_callout_reset(&resource->callout,
+          resource->observe_period_seconds * OS_TICKS_PER_SEC);
+    }
 }
+
 #endif
 
 oc_interface_mask_t
@@ -694,11 +650,8 @@ oc_ri_invoke_coap_entity_handler(void *request, void *response, uint8_t *buffer,
            */
           bool set_observe_option = true;
           if (cur_resource->properties & OC_PERIODIC) {
-            if (!add_periodic_observe_callback(cur_resource)) {
-              set_observe_option = false;
-              coap_remove_observer_by_token(endpoint, packet->token,
-                                            packet->token_len);
-            }
+              os_callout_reset(&cur_resource->callout,
+                resource->observe_period_seconds * OC_CLOCK_SECOND);
           }
 
           if (set_observe_option) {
@@ -715,7 +668,7 @@ oc_ri_invoke_coap_entity_handler(void *request, void *response, uint8_t *buffer,
         if (coap_observe_handler(request, response, cur_resource, endpoint) >
             0) {
           if (cur_resource->properties & OC_PERIODIC) {
-            remove_periodic_observe_callback(cur_resource);
+              os_callout_stop(&cur_resource->callout);
           }
         }
       }