///|
/// Ethernet II frame header length: dst(6) + src(6) + ethertype(2) = 14 bytes.
pub let ethernet_header_len : Int = 14

///|
/// EtherCAT frame header length: 2 bytes (length + type).
pub let ecat_header_len : Int = 2

///|
/// Minimum EtherCAT PDU header length: 10 bytes.
pub let pdu_header_len : Int = 10

///|
/// Working counter size: 2 bytes per PDU.
pub let wkc_len : Int = 2

///|
/// EtherCAT frame type in the 4-bit type field (always 0x1).
pub let ecat_frame_type : Int = 0x1

///|
/// Broadcast MAC address used as destination for EtherCAT frames.
pub let broadcast_mac : FixedArray[Byte] = [
  b'\xFF', b'\xFF', b'\xFF', b'\xFF', b'\xFF', b'\xFF',
]

///|
/// A default source MAC address for the master.
pub let default_master_mac : FixedArray[Byte] = [
  b'\x02', b'\x00', b'\x00', b'\x00', b'\x00', b'\x01',
]

///|
/// EcFrame represents a fully decoded EtherCAT Ethernet frame.
pub(all) struct EcFrame {
  dst_mac : FixedArray[Byte] // 6 bytes
  src_mac : FixedArray[Byte] // 6 bytes
  pdus : Array[Pdu]
} derive(Eq, Debug)