![](/media/cache/profiles/debfdc81854eac26ec993b55a659c6e1.jpg.50x50_q85.jpg)
mbed client lightswitch demo
Dependencies: mbed Socket lwip-eth lwip-sys lwip
Fork of mbed-client-classic-example-lwip by
mbed-client-classic/source/m2mtimerpimpl.cpp
- Committer:
- mbedAustin
- Date:
- 2016-06-09
- Revision:
- 11:cada08fc8a70
File content as of revision 11:cada08fc8a70:
/* * Copyright (c) 2015 ARM Limited. All rights reserved. * SPDX-License-Identifier: Apache-2.0 * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "mbed-client-classic/m2mtimerpimpl.h" #include "mbed-client/m2mtimerobserver.h" #include <cstdio> M2MTimerPimpl::M2MTimerPimpl(M2MTimerObserver& observer) : _observer(observer), _single_shot(true), _interval(0), _type(M2MTimerObserver::Notdefined), _intermediate_interval(0), _total_interval(0), _status(0), _dtls_type(false), _thread(0) { } M2MTimerPimpl::~M2MTimerPimpl() { stop_timer(); } void M2MTimerPimpl::start_timer(uint64_t interval, M2MTimerObserver::Type type, bool single_shot) { _dtls_type = false; _intermediate_interval = 0; _total_interval = 0; _status = 0; _single_shot = single_shot; _interval = interval; _type = type; _running = true; _thread = rtos::create_thread<M2MTimerPimpl, &M2MTimerPimpl::timer_run>(this); } void M2MTimerPimpl::start_dtls_timer(uint64_t intermediate_interval, uint64_t total_interval, M2MTimerObserver::Type type) { _dtls_type = true; _intermediate_interval = intermediate_interval; _total_interval = total_interval; _status = 0; _type = type; _running = true; _thread = rtos::create_thread<M2MTimerPimpl, &M2MTimerPimpl::timer_run>(this); } void M2MTimerPimpl::stop_timer() { _running = false; if (_thread) { delete _thread; _thread = NULL; } } void M2MTimerPimpl::timer_run() { if (!_dtls_type) { while (_running) { _thread->wait(_interval); if (!_running) return; _observer.timer_expired(_type); if (_single_shot) return; } } else { _thread->wait(_intermediate_interval); if (!_running) return; _status++; _thread->wait(_total_interval - _intermediate_interval); if (!_running) return; _status++; _observer.timer_expired(_type); } } bool M2MTimerPimpl::is_intermediate_interval_passed() { if (_status > 0) { return true; } return false; } bool M2MTimerPimpl::is_total_interval_passed() { if (_status > 1) { return true; } return false; }