mbed client lightswitch demo
Dependencies: mbed Socket lwip-eth lwip-sys lwip
Fork of mbed-client-classic-example-lwip by
Diff: mbed-client-classic/source/m2mtimerpimpl.cpp
- Revision:
- 11:cada08fc8a70
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client-classic/source/m2mtimerpimpl.cpp Thu Jun 09 17:08:36 2016 +0000
@@ -0,0 +1,111 @@
+/*
+ * 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;
+}
Austin Blackstone
