Skip to content

Commit 2bb0de8

Browse files
Johannes Cornelis Draaijerdatdenkikniet
authored andcommitted
Create timestamps from Subseconds directly
1 parent f35eb51 commit 2bb0de8

File tree

2 files changed

+32
-37
lines changed

2 files changed

+32
-37
lines changed

examples/rtic-timestamp.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,8 @@ mod app {
151151
+ Timestamp::new(
152152
false,
153153
0,
154-
stm32_eth::ptp::Subseconds::new_from_nanos(500_000_000)
155-
.unwrap()
156-
.raw(),
157-
)
158-
.unwrap();
154+
stm32_eth::ptp::Subseconds::new_from_nanos(500_000_000).unwrap(),
155+
);
159156
ptp.configure_target_time_interrupt(in_half_sec);
160157
}
161158
*sched_time = Some(now);
@@ -199,11 +196,11 @@ mod app {
199196
#[cfg(not(feature = "stm32f107"))]
200197
{
201198
if ptp.interrupt_handler() {
202-
if let Some(_sched_time) = sched_time.take() {
199+
if let Some(sched_time) = _sched_time.take() {
203200
let now = ptp.get_time();
204201
defmt::info!(
205202
"Got a timestamp interrupt {} seconds after scheduling",
206-
now - _sched_time
203+
now - sched_time
207204
);
208205
}
209206
}

src/ptp/timestamp.rs

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,8 @@ impl Timestamp {
2323
const SIGN_BIT: u32 = 0x8000_0000;
2424

2525
/// Create a new [`Timestamp`]
26-
pub const fn new(negative: bool, seconds: u32, subseconds: u32) -> Option<Self> {
27-
let subseconds = if let Some(subs) = Subseconds::new(subseconds) {
28-
subs
29-
} else {
30-
return None;
31-
};
32-
33-
Some(Self::new_unchecked(negative, seconds, subseconds.raw()))
26+
pub const fn new(negative: bool, seconds: u32, subseconds: Subseconds) -> Self {
27+
Self::new_unchecked(negative, seconds, subseconds.raw())
3428
}
3529

3630
/// Create a new [`Timestamp`] from the given raw value.
@@ -158,24 +152,28 @@ impl core::ops::SubAssign<Timestamp> for Timestamp {
158152
mod test {
159153
use crate::ptp::SUBSECONDS_PER_SECOND;
160154

161-
use super::Timestamp;
155+
use super::{Subseconds, Timestamp};
156+
157+
fn subs(val: u32) -> Subseconds {
158+
Subseconds::new(val).unwrap()
159+
}
162160

163161
#[test]
164162
fn timestamp_add() {
165-
let one = Timestamp::new(false, 1, 1).unwrap();
166-
let one_big = Timestamp::new(false, 1, SUBSECONDS_PER_SECOND - 1).unwrap();
167-
let two = Timestamp::new(false, 2, 2).unwrap();
168-
let three = Timestamp::new(false, 3, 3).unwrap();
163+
let one = Timestamp::new(false, 1, subs(1));
164+
let one_big = Timestamp::new(false, 1, subs(SUBSECONDS_PER_SECOND - 1));
165+
let two = Timestamp::new(false, 2, subs(2));
166+
let three = Timestamp::new(false, 3, subs(3));
169167

170-
let one_neg = Timestamp::new(true, 1, 1).unwrap();
171-
let one_big_neg = Timestamp::new(true, 1, SUBSECONDS_PER_SECOND - 1).unwrap();
172-
let two_neg = Timestamp::new(true, 2, 2).unwrap();
173-
let three_neg = Timestamp::new(true, 3, 3).unwrap();
168+
let one_neg = Timestamp::new(true, 1, subs(1));
169+
let one_big_neg = Timestamp::new(true, 1, subs(SUBSECONDS_PER_SECOND - 1));
170+
let two_neg = Timestamp::new(true, 2, subs(2));
171+
let three_neg = Timestamp::new(true, 3, subs(3));
174172

175-
let one_minus_two = Timestamp::new(true, 1, 1).unwrap();
176-
let one_big_plus_two = Timestamp::new(false, 4, 0).unwrap();
177-
let two_minus_one_big = Timestamp::new(false, 0, 4).unwrap();
178-
let one_big_neg_plus_two_neg = Timestamp::new(true, 4, 0).unwrap();
173+
let one_minus_two = Timestamp::new(true, 1, subs(1));
174+
let one_big_plus_two = Timestamp::new(false, 4, subs(0));
175+
let two_minus_one_big = Timestamp::new(false, 0, subs(4));
176+
let one_big_neg_plus_two_neg = Timestamp::new(true, 4, subs(0));
179177

180178
// +self + +rhs
181179
assert_eq!(one + two, three);
@@ -200,17 +198,17 @@ mod test {
200198

201199
#[test]
202200
fn timestamp_sub() {
203-
let one = Timestamp::new(false, 1, 1).unwrap();
204-
let one_big = Timestamp::new(false, 1, SUBSECONDS_PER_SECOND - 1).unwrap();
205-
let two = Timestamp::new(false, 2, 2).unwrap();
206-
let three = Timestamp::new(false, 3, 3).unwrap();
201+
let one = Timestamp::new(false, 1, subs(1));
202+
let one_big = Timestamp::new(false, 1, subs(SUBSECONDS_PER_SECOND - 1));
203+
let two = Timestamp::new(false, 2, subs(2));
204+
let three = Timestamp::new(false, 3, subs(3));
207205

208-
let one_neg = Timestamp::new(true, 1, 1).unwrap();
209-
let two_neg = Timestamp::new(true, 2, 2).unwrap();
210-
let three_neg = Timestamp::new(true, 3, 3).unwrap();
206+
let one_neg = Timestamp::new(true, 1, subs(1));
207+
let two_neg = Timestamp::new(true, 2, subs(2));
208+
let three_neg = Timestamp::new(true, 3, subs(3));
211209

212-
let one_minus_two = Timestamp::new(true, 1, 1).unwrap();
213-
let one_minus_one_big = Timestamp::new(true, 0, SUBSECONDS_PER_SECOND - 2).unwrap();
210+
let one_minus_two = Timestamp::new(true, 1, subs(1));
211+
let one_minus_one_big = Timestamp::new(true, 0, subs(SUBSECONDS_PER_SECOND - 2));
214212

215213
assert_eq!(one - one_big, one_minus_one_big);
216214

0 commit comments

Comments
 (0)