Compare commits
1 Commits
embassy-ne
...
embassy-ne
Author | SHA1 | Date | |
---|---|---|---|
4a2dd7b944 |
@ -6,7 +6,6 @@ keywords = ["embedded", "tuntap", "embassy-net", "embedded-hal-async", "ethernet
|
||||
categories = ["embedded", "hardware-support", "no-std", "network-programming", "async"]
|
||||
license = "MIT OR Apache-2.0"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/embassy-rs/embassy"
|
||||
|
||||
[dependencies]
|
||||
embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" }
|
||||
@ -17,4 +16,4 @@ libc = "0.2.101"
|
||||
[package.metadata.embassy_docs]
|
||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-net-tuntap-v$VERSION/embassy-net-tuntap/src/"
|
||||
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-net-tuntap/src/"
|
||||
target = "thumbv7em-none-eabi"
|
||||
target = "thumbv7em-none-eabi"
|
@ -1,5 +1,3 @@
|
||||
#![warn(missing_docs)]
|
||||
#![doc = include_str!("../README.md")]
|
||||
use std::io;
|
||||
use std::io::{Read, Write};
|
||||
use std::os::unix::io::{AsRawFd, RawFd};
|
||||
@ -9,19 +7,12 @@ use async_io::Async;
|
||||
use embassy_net_driver::{self, Capabilities, Driver, HardwareAddress, LinkState};
|
||||
use log::*;
|
||||
|
||||
/// Get the MTU of the given interface.
|
||||
pub const SIOCGIFMTU: libc::c_ulong = 0x8921;
|
||||
/// Get the index of the given interface.
|
||||
pub const _SIOCGIFINDEX: libc::c_ulong = 0x8933;
|
||||
/// Capture all packages.
|
||||
pub const _ETH_P_ALL: libc::c_short = 0x0003;
|
||||
/// Set the interface flags.
|
||||
pub const TUNSETIFF: libc::c_ulong = 0x400454CA;
|
||||
/// TUN device.
|
||||
pub const _IFF_TUN: libc::c_int = 0x0001;
|
||||
/// TAP device.
|
||||
pub const IFF_TAP: libc::c_int = 0x0002;
|
||||
/// No packet information.
|
||||
pub const IFF_NO_PI: libc::c_int = 0x1000;
|
||||
|
||||
const ETHERNET_HEADER_LEN: usize = 14;
|
||||
@ -56,7 +47,6 @@ fn ifreq_ioctl(lower: libc::c_int, ifreq: &mut ifreq, cmd: libc::c_ulong) -> io:
|
||||
Ok(ifreq.ifr_data)
|
||||
}
|
||||
|
||||
/// A TUN/TAP device.
|
||||
#[derive(Debug)]
|
||||
pub struct TunTap {
|
||||
fd: libc::c_int,
|
||||
@ -70,7 +60,6 @@ impl AsRawFd for TunTap {
|
||||
}
|
||||
|
||||
impl TunTap {
|
||||
/// Create a new TUN/TAP device.
|
||||
pub fn new(name: &str) -> io::Result<TunTap> {
|
||||
unsafe {
|
||||
let fd = libc::open(
|
||||
@ -137,13 +126,11 @@ impl io::Write for TunTap {
|
||||
}
|
||||
}
|
||||
|
||||
/// A TUN/TAP device, wrapped in an async interface.
|
||||
pub struct TunTapDevice {
|
||||
device: Async<TunTap>,
|
||||
}
|
||||
|
||||
impl TunTapDevice {
|
||||
/// Create a new TUN/TAP device.
|
||||
pub fn new(name: &str) -> io::Result<TunTapDevice> {
|
||||
Ok(Self {
|
||||
device: Async::new(TunTap::new(name)?)?,
|
||||
|
@ -6,6 +6,7 @@ keywords = ["embedded", "wiznet", "embassy-net", "embedded-hal-async", "ethernet
|
||||
categories = ["embedded", "hardware-support", "no-std", "network-programming", "async"]
|
||||
license = "MIT OR Apache-2.0"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/embassy-rs/embassy"
|
||||
|
||||
[dependencies]
|
||||
embedded-hal = { version = "1.0.0-rc.3" }
|
||||
|
@ -1,3 +1,4 @@
|
||||
//! Wiznet W5100s and W5500 family driver.
|
||||
mod w5500;
|
||||
pub use w5500::W5500;
|
||||
mod w5100s;
|
||||
@ -45,4 +46,5 @@ pub(crate) mod sealed {
|
||||
}
|
||||
}
|
||||
|
||||
/// Trait for Wiznet chips.
|
||||
pub trait Chip: sealed::Chip {}
|
||||
|
@ -4,6 +4,7 @@ const SOCKET_BASE: u16 = 0x400;
|
||||
const TX_BASE: u16 = 0x4000;
|
||||
const RX_BASE: u16 = 0x6000;
|
||||
|
||||
/// Wizard W5100S chip.
|
||||
pub enum W5100S {}
|
||||
|
||||
impl super::Chip for W5100S {}
|
||||
|
@ -8,6 +8,7 @@ pub enum RegisterBlock {
|
||||
RxBuf = 0x03,
|
||||
}
|
||||
|
||||
/// Wiznet W5500 chip.
|
||||
pub enum W5500 {}
|
||||
|
||||
impl super::Chip for W5500 {}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#![no_std]
|
||||
#![allow(async_fn_in_trait)]
|
||||
#![doc = include_str!("../README.md")]
|
||||
#![warn(missing_docs)]
|
||||
|
||||
pub mod chip;
|
||||
mod device;
|
||||
@ -47,6 +48,7 @@ pub struct Runner<'d, C: Chip, SPI: SpiDevice, INT: Wait, RST: OutputPin> {
|
||||
|
||||
/// You must call this in a background task for the driver to operate.
|
||||
impl<'d, C: Chip, SPI: SpiDevice, INT: Wait, RST: OutputPin> Runner<'d, C, SPI, INT, RST> {
|
||||
/// Run the driver.
|
||||
pub async fn run(mut self) -> ! {
|
||||
let (state_chan, mut rx_chan, mut tx_chan) = self.ch.split();
|
||||
let mut tick = Ticker::every(Duration::from_millis(500));
|
||||
|
Reference in New Issue
Block a user