PES4 / Mbed OS Queue_02
Committer:
demayer
Date:
Sat Apr 11 08:15:48 2020 +0000
Revision:
1:b36bbc1c6d27
Parent:
0:6bf0743ece18
IMU-library in .h und .cpp file aufgeteilt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
demayer 0:6bf0743ece18 1 /* mbed Microcontroller Library
demayer 0:6bf0743ece18 2 * Copyright (c) 2016 ARM Limited
demayer 0:6bf0743ece18 3 *
demayer 0:6bf0743ece18 4 * Licensed under the Apache License, Version 2.0 (the "License");
demayer 0:6bf0743ece18 5 * you may not use this file except in compliance with the License.
demayer 0:6bf0743ece18 6 * You may obtain a copy of the License at
demayer 0:6bf0743ece18 7 *
demayer 0:6bf0743ece18 8 * http://www.apache.org/licenses/LICENSE-2.0
demayer 0:6bf0743ece18 9 *
demayer 0:6bf0743ece18 10 * Unless required by applicable law or agreed to in writing, software
demayer 0:6bf0743ece18 11 * distributed under the License is distributed on an "AS IS" BASIS,
demayer 0:6bf0743ece18 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
demayer 0:6bf0743ece18 13 * See the License for the specific language governing permissions and
demayer 0:6bf0743ece18 14 * limitations under the License.
demayer 0:6bf0743ece18 15 */
demayer 0:6bf0743ece18 16
demayer 0:6bf0743ece18 17 #if !DEVICE_LOWPOWERTIMER
demayer 0:6bf0743ece18 18 #error [NOT_SUPPORTED] Low power timer not supported for this target
demayer 0:6bf0743ece18 19 #endif
demayer 0:6bf0743ece18 20
demayer 0:6bf0743ece18 21 #include "utest/utest.h"
demayer 0:6bf0743ece18 22 #include "unity/unity.h"
demayer 0:6bf0743ece18 23 #include "greentea-client/test_env.h"
demayer 0:6bf0743ece18 24
demayer 0:6bf0743ece18 25 #include "mbed.h"
demayer 0:6bf0743ece18 26
demayer 0:6bf0743ece18 27 using namespace utest::v1;
demayer 0:6bf0743ece18 28
demayer 0:6bf0743ece18 29 volatile static bool complete;
demayer 0:6bf0743ece18 30 static LowPowerTimeout lpt;
demayer 0:6bf0743ece18 31
demayer 0:6bf0743ece18 32 /* Timeouts are quite arbitrary due to large number of boards with varying level of accuracy */
demayer 0:6bf0743ece18 33 #define LONG_TIMEOUT (100000)
demayer 0:6bf0743ece18 34 #define SHORT_TIMEOUT (600)
demayer 0:6bf0743ece18 35
demayer 0:6bf0743ece18 36 void cb_done() {
demayer 0:6bf0743ece18 37 complete = true;
demayer 0:6bf0743ece18 38 }
demayer 0:6bf0743ece18 39
demayer 0:6bf0743ece18 40 #if DEVICE_SLEEP
demayer 0:6bf0743ece18 41 void lp_timeout_1s_deepsleep(void)
demayer 0:6bf0743ece18 42 {
demayer 0:6bf0743ece18 43 complete = false;
demayer 0:6bf0743ece18 44 LowPowerTimer timer;
demayer 0:6bf0743ece18 45
demayer 0:6bf0743ece18 46 /*
demayer 0:6bf0743ece18 47 * Since deepsleep() may shut down the UART peripheral, we wait for 10ms
demayer 0:6bf0743ece18 48 * to allow for hardware serial buffers to completely flush.
demayer 0:6bf0743ece18 49
demayer 0:6bf0743ece18 50 * This should be replaced with a better function that checks if the
demayer 0:6bf0743ece18 51 * hardware buffers are empty. However, such an API does not exist now,
demayer 0:6bf0743ece18 52 * so we'll use the wait_ms() function for now.
demayer 0:6bf0743ece18 53 */
demayer 0:6bf0743ece18 54 wait_ms(10);
demayer 0:6bf0743ece18 55
demayer 0:6bf0743ece18 56 /*
demayer 0:6bf0743ece18 57 * We use here the low power timer instead of microsecond timer for start and
demayer 0:6bf0743ece18 58 * end because the microseconds timer might be disable during deepsleep.
demayer 0:6bf0743ece18 59 */
demayer 0:6bf0743ece18 60 timer.start();
demayer 0:6bf0743ece18 61 lpt.attach(&cb_done, 1);
demayer 0:6bf0743ece18 62 /* Make sure deepsleep is allowed, to go to deepsleep */
demayer 0:6bf0743ece18 63 bool deep_sleep_allowed = sleep_manager_can_deep_sleep();
demayer 0:6bf0743ece18 64 TEST_ASSERT_TRUE_MESSAGE(deep_sleep_allowed, "Deep sleep should be allowed");
demayer 0:6bf0743ece18 65 sleep();
demayer 0:6bf0743ece18 66 while (!complete);
demayer 0:6bf0743ece18 67
demayer 0:6bf0743ece18 68 /* It takes longer to wake up from deep sleep */
demayer 0:6bf0743ece18 69 TEST_ASSERT_UINT32_WITHIN(LONG_TIMEOUT, 1000000, timer.read_us());
demayer 0:6bf0743ece18 70 TEST_ASSERT_TRUE(complete);
demayer 0:6bf0743ece18 71 }
demayer 0:6bf0743ece18 72
demayer 0:6bf0743ece18 73 void lp_timeout_1s_sleep(void)
demayer 0:6bf0743ece18 74 {
demayer 0:6bf0743ece18 75 complete = false;
demayer 0:6bf0743ece18 76 Timer timer;
demayer 0:6bf0743ece18 77 timer.start();
demayer 0:6bf0743ece18 78
demayer 0:6bf0743ece18 79 sleep_manager_lock_deep_sleep();
demayer 0:6bf0743ece18 80 lpt.attach(&cb_done, 1);
demayer 0:6bf0743ece18 81 bool deep_sleep_allowed = sleep_manager_can_deep_sleep();
demayer 0:6bf0743ece18 82 TEST_ASSERT_FALSE_MESSAGE(deep_sleep_allowed, "Deep sleep should be disallowed");
demayer 0:6bf0743ece18 83 sleep();
demayer 0:6bf0743ece18 84 while (!complete);
demayer 0:6bf0743ece18 85 sleep_manager_unlock_deep_sleep();
demayer 0:6bf0743ece18 86
demayer 0:6bf0743ece18 87 TEST_ASSERT_UINT32_WITHIN(LONG_TIMEOUT, 1000000, timer.read_us());
demayer 0:6bf0743ece18 88 TEST_ASSERT_TRUE(complete);
demayer 0:6bf0743ece18 89 }
demayer 0:6bf0743ece18 90 #endif /* DEVICE_SLEEP */
demayer 0:6bf0743ece18 91
demayer 0:6bf0743ece18 92 void lp_timeout_us(uint32_t delay_us, uint32_t tolerance)
demayer 0:6bf0743ece18 93 {
demayer 0:6bf0743ece18 94 complete = false;
demayer 0:6bf0743ece18 95 Timer timer;
demayer 0:6bf0743ece18 96 timer.start();
demayer 0:6bf0743ece18 97
demayer 0:6bf0743ece18 98 lpt.attach_us(&cb_done, delay_us);
demayer 0:6bf0743ece18 99 while (!complete);
demayer 0:6bf0743ece18 100
demayer 0:6bf0743ece18 101 /* Using RTC which is less accurate */
demayer 0:6bf0743ece18 102 TEST_ASSERT_UINT32_WITHIN(tolerance, delay_us, timer.read_us());
demayer 0:6bf0743ece18 103 TEST_ASSERT_TRUE(complete);
demayer 0:6bf0743ece18 104 }
demayer 0:6bf0743ece18 105
demayer 0:6bf0743ece18 106 void lp_timeout_5s(void)
demayer 0:6bf0743ece18 107 {
demayer 0:6bf0743ece18 108 lp_timeout_us(5000000, LONG_TIMEOUT);
demayer 0:6bf0743ece18 109 }
demayer 0:6bf0743ece18 110
demayer 0:6bf0743ece18 111 void lp_timeout_1s(void)
demayer 0:6bf0743ece18 112 {
demayer 0:6bf0743ece18 113 lp_timeout_us(1000000, LONG_TIMEOUT);
demayer 0:6bf0743ece18 114 }
demayer 0:6bf0743ece18 115
demayer 0:6bf0743ece18 116 void lp_timeout_1ms(void)
demayer 0:6bf0743ece18 117 {
demayer 0:6bf0743ece18 118 lp_timeout_us(1000, SHORT_TIMEOUT);
demayer 0:6bf0743ece18 119 }
demayer 0:6bf0743ece18 120
demayer 0:6bf0743ece18 121 void lp_timeout_500us(void)
demayer 0:6bf0743ece18 122 {
demayer 0:6bf0743ece18 123 lp_timeout_us(500, SHORT_TIMEOUT);
demayer 0:6bf0743ece18 124
demayer 0:6bf0743ece18 125 }
demayer 0:6bf0743ece18 126
demayer 0:6bf0743ece18 127 utest::v1::status_t greentea_failure_handler(const Case *const source, const failure_t reason) {
demayer 0:6bf0743ece18 128 greentea_case_failure_abort_handler(source, reason);
demayer 0:6bf0743ece18 129 return STATUS_CONTINUE;
demayer 0:6bf0743ece18 130 }
demayer 0:6bf0743ece18 131
demayer 0:6bf0743ece18 132 Case cases[] = {
demayer 0:6bf0743ece18 133 Case("500us LowPowerTimeout", lp_timeout_500us, greentea_failure_handler),
demayer 0:6bf0743ece18 134 Case("1ms LowPowerTimeout", lp_timeout_1ms, greentea_failure_handler),
demayer 0:6bf0743ece18 135 Case("1sec LowPowerTimeout", lp_timeout_1s, greentea_failure_handler),
demayer 0:6bf0743ece18 136 Case("5sec LowPowerTimeout", lp_timeout_5s, greentea_failure_handler),
demayer 0:6bf0743ece18 137 #if DEVICE_SLEEP
demayer 0:6bf0743ece18 138 Case("1sec LowPowerTimeout from sleep", lp_timeout_1s_sleep, greentea_failure_handler),
demayer 0:6bf0743ece18 139 Case("1sec LowPowerTimeout from deepsleep", lp_timeout_1s_deepsleep, greentea_failure_handler),
demayer 0:6bf0743ece18 140 #endif /* DEVICE_SLEEP */
demayer 0:6bf0743ece18 141 };
demayer 0:6bf0743ece18 142
demayer 0:6bf0743ece18 143 utest::v1::status_t greentea_test_setup(const size_t number_of_cases) {
demayer 0:6bf0743ece18 144 GREENTEA_SETUP(20, "default_auto");
demayer 0:6bf0743ece18 145 return greentea_test_setup_handler(number_of_cases);
demayer 0:6bf0743ece18 146 }
demayer 0:6bf0743ece18 147
demayer 0:6bf0743ece18 148 Specification specification(greentea_test_setup, cases, greentea_test_teardown_handler);
demayer 0:6bf0743ece18 149
demayer 0:6bf0743ece18 150 int main() {
demayer 0:6bf0743ece18 151 Harness::run(specification);
demayer 0:6bf0743ece18 152 }