-
Notifications
You must be signed in to change notification settings - Fork 3k
Add sleep manager API #4912
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Add sleep manager API #4912
Changes from all commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
cb4e9b3
Sleep HAL: add sleep manager API
0xc0170 fcdb043
Sleep: add deepsleep locks for !DEVICE_SLEEP
0xc0170 e6d8a9a
Drivers with interrupts: adding sleep deep locking
0xc0170 e57f0bc
Drivers: locking sleep fix for attach/detach
0xc0170 5b33d25
drivers: fix attach sleep locking
0xc0170 bc70442
platform: add DeepSleepLock
0xc0170 c5a41d8
test: add sleep manager tests
0xc0170 39f31c3
idle loop: add deepsleep locks
0xc0170 f6c34a2
SerialBase and CAN: fix Callbacks comparision
0xc0170 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/* mbed Microcontroller Library | ||
* Copyright (c) 2017 ARM Limited | ||
* | ||
* 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 "utest/utest.h" | ||
#include "unity/unity.h" | ||
#include "greentea-client/test_env.h" | ||
|
||
#if !DEVICE_SLEEP | ||
#error [NOT_SUPPORTED] test not supported | ||
#endif | ||
|
||
using namespace utest::v1; | ||
|
||
void sleep_manager_deepsleep_counter_test() | ||
{ | ||
bool deep_sleep_allowed = sleep_manager_can_deep_sleep(); | ||
TEST_ASSERT_TRUE(deep_sleep_allowed); | ||
|
||
sleep_manager_lock_deep_sleep(); | ||
deep_sleep_allowed = sleep_manager_can_deep_sleep(); | ||
TEST_ASSERT_FALSE(deep_sleep_allowed); | ||
|
||
sleep_manager_unlock_deep_sleep(); | ||
deep_sleep_allowed = sleep_manager_can_deep_sleep(); | ||
TEST_ASSERT_TRUE(deep_sleep_allowed); | ||
} | ||
|
||
utest::v1::status_t greentea_failure_handler(const Case *const source, const failure_t reason) | ||
{ | ||
greentea_case_failure_abort_handler(source, reason); | ||
return STATUS_CONTINUE; | ||
} | ||
|
||
utest::v1::status_t greentea_test_setup(const size_t number_of_cases) | ||
{ | ||
GREENTEA_SETUP(20, "default_auto"); | ||
return greentea_test_setup_handler(number_of_cases); | ||
} | ||
|
||
Case cases[] = { | ||
Case("sleep manager - deep sleep counter", sleep_manager_deepsleep_counter_test, greentea_failure_handler), | ||
}; | ||
|
||
Specification specification(greentea_test_setup, cases, greentea_test_teardown_handler); | ||
|
||
int main() { | ||
Harness::run(specification); | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
/* mbed Microcontroller Library | ||
* Copyright (c) 2017 ARM Limited | ||
* | ||
* 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 "utest/utest.h" | ||
#include "unity/unity.h" | ||
#include "greentea-client/test_env.h" | ||
|
||
#if !DEVICE_SLEEP | ||
#error [NOT_SUPPORTED] test not supported | ||
#endif | ||
|
||
using namespace utest::v1; | ||
|
||
void sleep_manager_locking_thread_test() | ||
{ | ||
for (uint32_t i = 0; i < 100; i++) { | ||
sleep_manager_lock_deep_sleep(); | ||
Thread::wait(25); | ||
sleep_manager_unlock_deep_sleep(); | ||
} | ||
} | ||
|
||
void sleep_manager_multithread_test() | ||
{ | ||
{ | ||
Callback<void()> cb(sleep_manager_locking_thread_test); | ||
Thread t1; | ||
Thread t2; | ||
|
||
t1.start(callback(cb)); | ||
Thread::wait(25); | ||
t2.start(callback(cb)); | ||
|
||
// Wait for the threads to finish | ||
t1.join(); | ||
t2.join(); | ||
} | ||
|
||
bool deep_sleep_allowed = sleep_manager_can_deep_sleep(); | ||
TEST_ASSERT_TRUE_MESSAGE(deep_sleep_allowed, "Deep sleep should be allowed"); | ||
} | ||
|
||
void sleep_manager_locking_irq_test() | ||
{ | ||
sleep_manager_lock_deep_sleep(); | ||
sleep_manager_unlock_deep_sleep(); | ||
} | ||
|
||
void sleep_manager_irq_test() | ||
{ | ||
{ | ||
Ticker ticker1; | ||
Timer timer; | ||
|
||
ticker1.attach_us(&sleep_manager_locking_irq_test, 500); | ||
|
||
// run this for 5 seconds | ||
timer.start(); | ||
int start = timer.read(); | ||
int end = start + 5; | ||
while (timer.read() < end) { | ||
sleep_manager_locking_irq_test(); | ||
} | ||
timer.stop(); | ||
} | ||
|
||
bool deep_sleep_allowed = sleep_manager_can_deep_sleep(); | ||
TEST_ASSERT_TRUE_MESSAGE(deep_sleep_allowed, "Deep sleep should be allowed"); | ||
} | ||
|
||
utest::v1::status_t greentea_test_setup(const size_t number_of_cases) | ||
{ | ||
GREENTEA_SETUP(30, "default_auto"); | ||
return greentea_test_setup_handler(number_of_cases); | ||
} | ||
|
||
Case cases[] = { | ||
Case("sleep manager HAL - locking multithreaded", sleep_manager_multithread_test), | ||
Case("sleep manager HAL - locking IRQ", sleep_manager_irq_test), | ||
}; | ||
|
||
Specification specification(greentea_test_setup, cases, greentea_test_teardown_handler); | ||
|
||
int main() { | ||
Harness::run(specification); | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Attach could also be called to replace a callback of the same type. If this is the case then deep sleep shouldn't be locked a second time.