aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/rp/src/bin/rtc.rs20
1 files changed, 16 insertions, 4 deletions
diff --git a/tests/rp/src/bin/rtc.rs b/tests/rp/src/bin/rtc.rs
index 8d1d4ee14..c66981d95 100644
--- a/tests/rp/src/bin/rtc.rs
+++ b/tests/rp/src/bin/rtc.rs
@@ -36,6 +36,7 @@ async fn main(_spawner: Spawner) {
36 second: 0, 36 second: 0,
37 }; 37 };
38 rtc.set_datetime(now).unwrap(); 38 rtc.set_datetime(now).unwrap();
39 Timer::after_millis(100).await;
39 } 40 }
40 41
41 // Test 1: Basic RTC functionality - read current time 42 // Test 1: Basic RTC functionality - read current time
@@ -53,8 +54,18 @@ async fn main(_spawner: Spawner) {
53 // Test 2: Schedule and wait for alarm 54 // Test 2: Schedule and wait for alarm
54 info!("Testing alarm scheduling"); 55 info!("Testing alarm scheduling");
55 56
56 // Schedule alarm for 3 seconds from now 57 // Wait until we're at a predictable second, then schedule for a future second
57 let alarm_second = (initial_time.second + 3) % 60; 58 loop {
59 let current = rtc.now().unwrap();
60 if current.second <= 55 {
61 break;
62 }
63 Timer::after_millis(100).await;
64 }
65
66 // Now schedule alarm for 3 seconds from current time
67 let current_time = rtc.now().unwrap();
68 let alarm_second = (current_time.second + 3) % 60;
58 let alarm_filter = DateTimeFilter::default().second(alarm_second); 69 let alarm_filter = DateTimeFilter::default().second(alarm_second);
59 70
60 info!("Scheduling alarm for second: {}", alarm_second); 71 info!("Scheduling alarm for second: {}", alarm_second);
@@ -69,13 +80,13 @@ async fn main(_spawner: Spawner) {
69 let alarm_start = Instant::now(); 80 let alarm_start = Instant::now();
70 match select(Timer::after_secs(5), rtc.wait_for_alarm()).await { 81 match select(Timer::after_secs(5), rtc.wait_for_alarm()).await {
71 Either::First(_) => { 82 Either::First(_) => {
72 core::panic!("Alarm timeout - alarm should have triggered within 5 seconds"); 83 core::panic!("Alarm timeout - alarm should have triggered by now");
73 } 84 }
74 Either::Second(_) => { 85 Either::Second(_) => {
75 let alarm_duration = Instant::now() - alarm_start; 86 let alarm_duration = Instant::now() - alarm_start;
76 info!("ALARM TRIGGERED after {:?}", alarm_duration); 87 info!("ALARM TRIGGERED after {:?}", alarm_duration);
77 88
78 // Verify timing is reasonable (should be around 3 seconds, allow some margin) 89 // Verify timing is reasonable (should be around 3 seconds)
79 assert!( 90 assert!(
80 alarm_duration >= Duration::from_secs(2) && alarm_duration <= Duration::from_secs(4), 91 alarm_duration >= Duration::from_secs(2) && alarm_duration <= Duration::from_secs(4),
81 "Alarm timing incorrect: {:?}", 92 "Alarm timing incorrect: {:?}",
@@ -107,6 +118,7 @@ async fn main(_spawner: Spawner) {
107 post_alarm_scheduled.is_none(), 118 post_alarm_scheduled.is_none(),
108 "Alarm should not be scheduled after triggering" 119 "Alarm should not be scheduled after triggering"
109 ); 120 );
121 info!("Alarm correctly cleared after triggering");
110 122
111 info!("Test OK"); 123 info!("Test OK");
112 cortex_m::asm::bkpt(); 124 cortex_m::asm::bkpt();