Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: mbed-cloud-client/mbed-client/mbed-client-classic/mbed-client-classic/m2mtimerpimpl.h
- Revision:
- 0:276e7a263c35
diff -r 000000000000 -r 276e7a263c35 mbed-cloud-client/mbed-client/mbed-client-classic/mbed-client-classic/m2mtimerpimpl.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-cloud-client/mbed-client/mbed-client-classic/mbed-client-classic/m2mtimerpimpl.h Mon Jul 02 06:30:39 2018 +0000
@@ -0,0 +1,133 @@
+/*
+ * 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.
+ */
+
+#ifndef M2M_TIMER_PIMPL_H__
+#define M2M_TIMER_PIMPL_H__
+
+#include "ns_types.h"
+#include "mbed-client/m2mtimerobserver.h"
+
+class M2MTimerPimpl {
+private:
+
+ // Prevents the use of assignment operator
+ M2MTimerPimpl& operator=(const M2MTimerPimpl& other);
+
+ // Prevents the use of copy constructor
+ M2MTimerPimpl(const M2MTimerPimpl& other);
+public:
+
+ /**
+ * Constructor.
+ */
+ M2MTimerPimpl(M2MTimerObserver& _observer);
+
+ /**
+ * Destructor.
+ */
+ virtual ~M2MTimerPimpl();
+
+ /**
+ * Starts timer
+ * @param interval Timer's interval in milliseconds
+ * @param single_shot defines if timer is ticked
+ * once or is it restarted everytime timer is expired.
+ */
+ void start_timer(uint64_t interval, M2MTimerObserver::Type type, bool single_shot = true);
+
+ /**
+ * @brief Starts timer in DTLS manner
+ * @param intermediate_interval Intermediate interval to use, must be smaller than tiotal (usually 1/4 of total)
+ * @param total_interval Total interval to use; This is the timeout value of a DTLS packet
+ * @param type Type of the timer
+ */
+ void start_dtls_timer(uint64_t intermediate_interval, uint64_t total_interval, M2MTimerObserver::Type type);
+
+ /**
+ * Stops timer.
+ * This cancels the ongoing timer.
+ */
+ void stop_timer();
+
+ /**
+ * Callback function for timer completion.
+ */
+ void timer_expired();
+
+ /**
+ * @brief Checks if the intermediate interval has passed
+ * @return true if interval has passed, false otherwise
+ */
+ bool is_intermediate_interval_passed();
+
+ /**
+ * @brief Checks if the total interval has passed
+ * @return true if interval has passed, false otherwise
+ */
+ bool is_total_interval_passed();
+
+ /**
+ * @brief Start long period timer
+ */
+ void start_still_left_timer();
+
+ /**
+ * @brief Get timer id
+ * @return Timer id
+ */
+ inline int8_t get_timer_id() const;
+
+ /**
+ * @brief Get still left time
+ * @return Time left in milliseconds
+ */
+ uint64_t get_still_left_time() const;
+
+private:
+
+ void start();
+ void cancel();
+
+private:
+ M2MTimerObserver& _observer;
+ bool _single_shot;
+ uint64_t _interval;
+ M2MTimerObserver::Type _type;
+
+ uint64_t _intermediate_interval;
+ uint64_t _total_interval;
+ uint64_t _still_left;
+ uint8_t _status;
+ bool _dtls_type;
+
+ // this is the timer-id of this object, used to map the
+ // timer event callback to the correct object.
+ int8_t _timer_id;
+
+ static int8_t _tasklet_id;
+ static int8_t _next_timer_id;
+
+ friend class M2MTimer;
+ friend class Test_M2MTimerPimpl_classic;
+};
+
+inline int8_t M2MTimerPimpl::get_timer_id() const
+{
+ return _timer_id;
+}
+
+#endif //M2M_TIMER_PIMPL_H__
+