mbed Connector Endpoint interface. This interface permits a mbed endpoint to easily setup MDS resources and emit those resources to an MDS server.

Dependents:   IoT_LED_demo ServoTest uWater_Project hackathon ... more

Committer:
ansond
Date:
Tue Apr 07 21:30:03 2015 +0000
Revision:
30:113c2a1d8db2
Child:
31:bacc63106754
added better observation support for threaded endpoints using the rtos

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ansond 30:113c2a1d8db2 1 /**
ansond 30:113c2a1d8db2 2 * @file ThreadedResourceObserver.cpp
ansond 30:113c2a1d8db2 3 * @brief mbed CoAP DynamicResource Thread-based observer (implementation)
ansond 30:113c2a1d8db2 4 * @author Doug Anson/Chris Paola
ansond 30:113c2a1d8db2 5 * @version 1.0
ansond 30:113c2a1d8db2 6 * @see
ansond 30:113c2a1d8db2 7 *
ansond 30:113c2a1d8db2 8 * Copyright (c) 2014
ansond 30:113c2a1d8db2 9 *
ansond 30:113c2a1d8db2 10 * Licensed under the Apache License, Version 2.0 (the "License");
ansond 30:113c2a1d8db2 11 * you may not use this file except in compliance with the License.
ansond 30:113c2a1d8db2 12 * You may obtain a copy of the License at
ansond 30:113c2a1d8db2 13 *
ansond 30:113c2a1d8db2 14 * http://www.apache.org/licenses/LICENSE-2.0
ansond 30:113c2a1d8db2 15 *
ansond 30:113c2a1d8db2 16 * Unless required by applicable law or agreed to in writing, software
ansond 30:113c2a1d8db2 17 * distributed under the License is distributed on an "AS IS" BASIS,
ansond 30:113c2a1d8db2 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ansond 30:113c2a1d8db2 19 * See the License for the specific language governing permissions and
ansond 30:113c2a1d8db2 20 * limitations under the License.
ansond 30:113c2a1d8db2 21 */
ansond 30:113c2a1d8db2 22
ansond 30:113c2a1d8db2 23 #include "ThreadedResourceObserver.h"
ansond 30:113c2a1d8db2 24
ansond 30:113c2a1d8db2 25 // constructor
ansond 30:113c2a1d8db2 26 ThreadedResourceObserver::ThreadedResourceObserver(DynamicResource *resource,int sleep_time_ms) :
ansond 30:113c2a1d8db2 27 ResourceObserver(resource),
ansond 30:113c2a1d8db2 28 m_begin_observation(false),
ansond 30:113c2a1d8db2 29 m_observation_thread(&ThreadedResourceObserver::_observation_notifier,this),
ansond 30:113c2a1d8db2 30 m_sleep_time_ms(sleep_time_ms) {
ansond 30:113c2a1d8db2 31 }
ansond 30:113c2a1d8db2 32
ansond 30:113c2a1d8db2 33 // destructor
ansond 30:113c2a1d8db2 34 ThreadedResourceObserver::~ThreadedResourceObserver() {
ansond 30:113c2a1d8db2 35 this->m_observation_thread.terminate();
ansond 30:113c2a1d8db2 36 }
ansond 30:113c2a1d8db2 37
ansond 30:113c2a1d8db2 38 // notifier
ansond 30:113c2a1d8db2 39 void ThreadedResourceObserver::_observation_notifier(void const *args) {
ansond 30:113c2a1d8db2 40 ThreadedResourceObserver *me = (ThreadedResourceObserver *)args;
ansond 30:113c2a1d8db2 41 while(true) {
ansond 30:113c2a1d8db2 42 Thread::wait(me->m_sleep_time_ms);
ansond 30:113c2a1d8db2 43 if (me->m_begin_observation == true && me->m_resource != NULL) {
ansond 30:113c2a1d8db2 44 me->m_resource->observe();
ansond 30:113c2a1d8db2 45 }
ansond 30:113c2a1d8db2 46 }
ansond 30:113c2a1d8db2 47 }
ansond 30:113c2a1d8db2 48
ansond 30:113c2a1d8db2 49 // begin observing...
ansond 30:113c2a1d8db2 50 void ThreadedResourceObserver::beginObservation() {
ansond 30:113c2a1d8db2 51 this->m_begin_observation = true;
ansond 30:113c2a1d8db2 52 }