Skip to content

Commit 0d5537a

Browse files
committed
Add PTP timestamping
1 parent 8572c80 commit 0d5537a

File tree

21 files changed

+1405
-138
lines changed

21 files changed

+1405
-138
lines changed

.github/workflows/build.yml

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
toolchain:
3232
- stable
3333
features:
34-
- stm32f745
34+
- stm32f745,ptp
3535
runs-on: ubuntu-20.04
3636
steps:
3737
- name: Checkout
@@ -90,6 +90,33 @@ jobs:
9090
run: |
9191
cargo build --release --target=${{ matrix.target }} --features ${{ matrix.features }}
9292
93+
build-ptp:
94+
name: build-no-ptp
95+
runs-on: ubuntu-20.04
96+
strategy:
97+
matrix:
98+
target:
99+
- x86_64-unknown-linux-gnu
100+
toolchain:
101+
- stable
102+
features:
103+
- stm32f107
104+
- stm32f407
105+
- stm32f745
106+
steps:
107+
- name: Checkout
108+
uses: actions/checkout@v3
109+
110+
- name: Install Rust ${{ matrix.toolchain }} with target (${{ matrix.target }})
111+
run: |
112+
rustup set profile minimal
113+
rustup override set ${{ matrix.toolchain }}
114+
rustup target add ${{ matrix.target }}
115+
116+
- name: cargo build
117+
run: |
118+
cargo build --release --target=${{ matrix.target }} --features ${{ matrix.features }} --no-default-features
119+
93120
# Examples
94121
examples:
95122
name: examples

Cargo.toml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@ log = { version = "0.4", optional = true }
3131
defmt = { version = "0.3", optional = true }
3232

3333
[dependencies.smoltcp]
34-
version = "0.8"
34+
version = "0.8.2"
3535
default-features = false
3636
optional = true
3737

3838
[features]
39-
default = [ "defmt" ]
39+
default = [ "defmt", "ptp" ]
4040
device-selected = []
4141
fence = []
42+
ptp = [ ]
4243

4344
stm32f107 = ["stm32f1xx-hal/stm32f107", "device-selected"]
4445

@@ -89,6 +90,10 @@ required-features = [ "defmt" ]
8990
name = "rtic-echo"
9091
required-features = [ "defmt" , "smoltcp-phy" ]
9192

93+
[[example]]
94+
name = "rtic-timestamp"
95+
required-features = [ "defmt", "ptp" ]
96+
9297
[profile.release]
9398
debug = 2
9499
lto = true

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,10 @@ fn main() {
6363
mac: p.ETHERNET_MAC,
6464
mmc: p.ETHERNET_MMC,
6565
dma: p.ETHERNET_DMA,
66+
ptp: p.ETHERNET_PTP,
6667
};
6768
68-
let stm32_eth::Parts { dma: mut eth_dma, mac: _ } = stm32_eth::new(
69+
let stm32_eth::Parts { dma: mut eth_dma, mac: _, ptp: _ } = stm32_eth::new(
6970
parts,
7071
&mut rx_ring[..],
7172
&mut tx_ring[..],
@@ -75,12 +76,12 @@ fn main() {
7576
.unwrap();
7677
eth_dma.enable_interrupt();
7778
78-
if let Ok(pkt) = eth_dma.recv_next() {
79+
if let Ok(pkt) = eth_dma.recv_next(None) {
7980
// handle received pkt
8081
}
8182
8283
let size = 42;
83-
eth_dma.send(size, |buf| {
84+
eth_dma.send(size, None, |buf| {
8485
// write up to `size` bytes into buf before it is being sent
8586
}).expect("send");
8687
}

examples/arp.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ fn main() -> ! {
4646
let mut rx_ring: [RxRingEntry; 2] = Default::default();
4747
let mut tx_ring: [TxRingEntry; 2] = Default::default();
4848

49-
let Parts { mut dma, mac } = stm32_eth::new(
49+
let Parts {
50+
mut dma,
51+
mac,
52+
#[cfg(feature = "ptp")]
53+
ptp: _,
54+
} = stm32_eth::new(
5055
ethernet,
5156
&mut rx_ring[..],
5257
&mut tx_ring[..],
@@ -87,7 +92,7 @@ fn main() -> ! {
8792
const TARGET_MAC: [u8; 6] = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
8893
const TARGET_IP: [u8; 4] = [0x0A, 0x00, 0x00, 0x02]; // 10.0.0.2
8994

90-
let r = dma.send(SIZE, |buf| {
95+
let r = dma.send(SIZE, None, |buf| {
9196
buf[0..6].copy_from_slice(&DST_MAC);
9297
buf[6..12].copy_from_slice(&SRC_MAC);
9398
buf[12..14].copy_from_slice(&ETH_TYPE);

examples/common.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ pub fn setup_peripherals(p: stm32_eth::stm32::Peripherals) -> (Clocks, Gpio, Par
2424
dma: p.ETHERNET_DMA,
2525
mac: p.ETHERNET_MAC,
2626
mmc: p.ETHERNET_MMC,
27+
#[cfg(feature = "ptp")]
28+
ptp: p.ETHERNET_PTP,
2729
};
2830

2931
#[cfg(any(feature = "stm32f7xx-hal", feature = "stm32f4xx-hal"))]

examples/ip.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ fn main() -> ! {
4747

4848
let mut rx_ring: [RxRingEntry; 2] = Default::default();
4949
let mut tx_ring: [TxRingEntry; 2] = Default::default();
50-
let Parts { mut dma, mac: _ } = stm32_eth::new(
50+
let Parts {
51+
mut dma,
52+
mac: _,
53+
#[cfg(feature = "ptp")]
54+
ptp: _,
55+
} = stm32_eth::new(
5156
ethernet,
5257
&mut rx_ring[..],
5358
&mut tx_ring[..],

examples/pktgen.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,12 @@ fn main() -> ! {
4444

4545
let mut rx_ring: [RxRingEntry; 2] = Default::default();
4646
let mut tx_ring: [TxRingEntry; 2] = Default::default();
47-
let Parts { mut dma, mac } = stm32_eth::new(
47+
let Parts {
48+
mut dma,
49+
mac,
50+
#[cfg(feature = "ptp")]
51+
ptp: _,
52+
} = stm32_eth::new(
4853
ethernet,
4954
&mut rx_ring[..],
5055
&mut tx_ring[..],
@@ -106,7 +111,7 @@ fn main() -> ! {
106111
// handle rx packet
107112
{
108113
let mut recvd = 0usize;
109-
while let Ok(pkt) = dma.recv_next() {
114+
while let Ok(pkt) = dma.recv_next(None) {
110115
rx_bytes += pkt.len();
111116
rx_pkts += 1;
112117
pkt.free();
@@ -126,7 +131,7 @@ fn main() -> ! {
126131
const SIZE: usize = 1500;
127132
if phy.phy_link_up() {
128133
'egress: loop {
129-
let r = dma.send(SIZE, |buf| {
134+
let r = dma.send(SIZE, None, |buf| {
130135
buf[0..6].copy_from_slice(&DST_MAC);
131136
buf[6..12].copy_from_slice(&SRC_MAC);
132137
buf[12..14].copy_from_slice(&ETH_TYPE);

examples/rtic-echo.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,12 @@ mod app {
8282

8383
defmt::info!("Configuring ethernet");
8484

85-
let Parts { dma, mac } =
86-
stm32_eth::new_with_mii(ethernet, rx_ring, tx_ring, clocks, pins, mdio, mdc).unwrap();
85+
let Parts {
86+
dma,
87+
mac,
88+
#[cfg(feature = "ptp")]
89+
ptp: _,
90+
} = stm32_eth::new_with_mii(ethernet, rx_ring, tx_ring, clocks, pins, mdio, mdc).unwrap();
8791

8892
let dma = cx.local.dma.write(dma);
8993

0 commit comments

Comments
 (0)