SatCat5
port_mailbox.h
1 // Copyright 2021-2025 The Aerospace Corporation.
3 // This file is a part of SatCat5, licensed under CERN-OHL-W v2 or later.
5 // Driver for the internal "MailBox" Ethernet port
6 
7 #pragma once
8 
9 #include <satcat5/cfgbus_interrupt.h>
10 #include <satcat5/io_buffer.h>
11 
12 // Default size parameters:
13 // (Must be large enough for one full-size Ethernet frame + metadata,
14 // larger sizes are fine if you have the memory for it.)
15 #ifndef SATCAT5_MAILBOX_BUFFSIZE
16 #define SATCAT5_MAILBOX_BUFFSIZE 1600 // Buffer size in bytes
17 #endif
18 
19 #ifndef SATCAT5_MAILBOX_BUFFPKT
20 #define SATCAT5_MAILBOX_BUFFPKT 32 // Maximum packets per buffer
21 #endif
22 
23 namespace satcat5 {
24  namespace port {
28  class Mailbox
30  , protected satcat5::cfg::Interrupt
31  {
32  public:
34  Mailbox(satcat5::cfg::ConfigBus* cfg, unsigned devaddr, unsigned regaddr);
35 
36  private:
37  // Event handlers.
38  void data_rcvd(satcat5::io::Readable* src) override;
39  void irq_event() override;
40 
41  // Copy of contiguous segment of transmit data from the Tx buffer.
42  // Returns the number of bytes copied.
43  u32 copy_tx_segment();
44 
45  // Copy a contiguous segment of received data to Rx buffer.
46  // Returns last reading from hardware status register.
47  u32 copy_rx_segment();
48 
49  // Pointer to the hardware control register.
50  satcat5::cfg::Register m_hw_reg;
51 
52  // Raw Tx/Rx working buffers for BufferedIO.
53  u8 m_txbuff[SATCAT5_MAILBOX_BUFFSIZE];
54  u8 m_rxbuff[SATCAT5_MAILBOX_BUFFSIZE];
55  };
56  }
57 }
Generic ConfigBus API.
Definition: cfgbus_core.h:124
Event-handler for individual ConfigBus interrupts.
Pointer-like wrapper for one or more ConfigBus registers.
Definition: cfgbus_core.h:76
Extensible transmit and receive buffer.
Definition: io_buffer.h:42
Abstract API for reading byte-streams and packets.
Definition: io_readable.h:68
Driver for the internal "MailBox" Ethernet port This class interfaces with "port_axi_mailbox" through...
Definition: port_mailbox.h:31
void data_rcvd(satcat5::io::Readable *src) override
The data_rcvd() callback is polled whenever data is available.
Definition: port_mailbox.cc:36
Mailbox(satcat5::cfg::ConfigBus *cfg, unsigned devaddr, unsigned regaddr)
Constructor links this driver to a ConfigBus address.
Definition: port_mailbox.cc:25
void irq_event() override
Interrupt service routine.
Buffered I/O wrappers for PacketBuffer.