diff options
| author | 1-rafael-1 <[email protected]> | 2025-09-16 05:49:14 +0200 |
|---|---|---|
| committer | 1-rafael-1 <[email protected]> | 2025-09-16 05:49:14 +0200 |
| commit | a54996d8d76d7168ec458597cee276de975bd699 (patch) | |
| tree | c41c28781e56580eb73a31b9ae2f67beaf400027 /tests/rp/src/bin/rtc.rs | |
| parent | 362624ca5fa0a979b45e5828abc338c85835537c (diff) | |
RTC alarm test timing was off
Diffstat (limited to 'tests/rp/src/bin/rtc.rs')
| -rw-r--r-- | tests/rp/src/bin/rtc.rs | 20 |
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(); |
