forked from renet/ENC424J600
80 lines
2.0 KiB
Rust
80 lines
2.0 KiB
Rust
/// SRAM Addresses
|
|
pub const GPBUFST_DEFAULT: u16 = 0x0000; // Start of General-Purpose SRAM Buffer
|
|
pub const GPBUFEN_DEFAULT: u16 = 0x5340; // End of General-Purpose SRAM Buffer == ERXST default
|
|
|
|
/// Max raw frame array size
|
|
pub const RAW_FRAME_LENGTH_MAX: usize = 0x1000;
|
|
|
|
/// Struct for TX Buffer
|
|
/// TODO: Should be a singleton
|
|
pub struct TxBuffer {
|
|
wrap_addr: u16,
|
|
// The following two fields are controlled by firmware
|
|
next_addr: u16,
|
|
tail_addr: u16
|
|
}
|
|
|
|
impl TxBuffer {
|
|
pub fn new() -> Self {
|
|
TxBuffer {
|
|
wrap_addr: GPBUFST_DEFAULT,
|
|
next_addr: GPBUFST_DEFAULT + 1,
|
|
tail_addr: GPBUFST_DEFAULT
|
|
}
|
|
}
|
|
|
|
pub fn set_wrap_addr(&mut self, addr: u16) {
|
|
self.wrap_addr = addr;
|
|
}
|
|
pub fn get_wrap_addr(& self) -> u16{
|
|
self.wrap_addr
|
|
}
|
|
|
|
pub fn set_next_addr(&mut self, addr: u16) {
|
|
self.next_addr = addr;
|
|
}
|
|
pub fn get_next_addr(& self) -> u16{
|
|
self.next_addr
|
|
}
|
|
|
|
// TODO: Need more functions for smoltcp::phy compatibility (maybe?)
|
|
}
|
|
|
|
/// Struct for TX Packet
|
|
/// TODO: Generalise MAC addresses
|
|
pub struct TxPacket {
|
|
frame: [u8; RAW_FRAME_LENGTH_MAX],
|
|
frame_length: usize
|
|
}
|
|
|
|
impl TxPacket {
|
|
pub fn new() -> Self {
|
|
TxPacket {
|
|
frame: [0; RAW_FRAME_LENGTH_MAX],
|
|
frame_length: 0
|
|
}
|
|
}
|
|
|
|
/// Currently, frame data is copied from an external buffer
|
|
pub fn update_frame(&mut self, raw_frame: &[u8], raw_frame_length: usize) {
|
|
self.frame_length = raw_frame_length;
|
|
for i in 0..self.frame_length {
|
|
self.frame[i] = raw_frame[i];
|
|
}
|
|
}
|
|
pub fn copy_from_frame(&self, frame: &mut [u8]) {
|
|
for i in 0..self.frame_length {
|
|
frame[i] = self.frame[i];
|
|
}
|
|
}
|
|
|
|
pub fn get_frame_length(&self) -> usize {
|
|
self.frame_length
|
|
}
|
|
|
|
/// TODO: Mostly for debugging only?
|
|
pub fn get_frame_byte(&self, i: usize) -> u8 {
|
|
self.frame[i]
|
|
}
|
|
}
|