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);
}
}
}