XilinxProcessorIPLib/drivers/axiethernet/examples/avb/xavb_ptp_packets.c
void XAvb_SendPDelayResp(XAvb * InstancePtr,
                         u32    PtpFrameBaseAddr) {
  u32 SequenceId     = 0;
  u32 TimestampT2    = 0;
  u32 BufferWord     = 0;
  u32 NanoSec        = 0;
  u32 Seconds        = 0;
  u32 Epoch          = 0;
  u32 CopyPortId     = 0;
  u32 CopyPortId1    = 0;

  /** Wait until there are no PTP frames to be transmitted */
  XAvb_WaitOnTxPtpQueue(InstancePtr);

  /** Format the Timestamp
   *---------------------
   *
   * Capture the current Synchronised time */
  NanoSec  = XAvb_ReadReg(InstancePtr->Config.BaseAddress,
                           XAVB_RTC_NANOSEC_VALUE_OFFSET);

  Seconds  = XAvb_ReadReg(InstancePtr->Config.BaseAddress,
                           XAVB_RTC_SEC_LOWER_VALUE_OFFSET);
  Epoch    = XAvb_ReadReg(InstancePtr->Config.BaseAddress,

                           XAVB_RTC_SEC_UPPER_VALUE_OFFSET);

  /** Read the current RTC offset */
  InstancePtr->PtpRecords.NsOffsetForPDelayResp =
      XAvb_ReadReg(InstancePtr->Config.BaseAddress, XAVB_RTC_NANOSEC_OFFSET);

  /** Read the TimestampT2 for PDelayReq reception and adjust it for MAC
   *  receive latency */
  TimestampT2 = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                    PtpFrameBaseAddr,
                                    XAVB_PTP_PKT_CAPTURED_TIMESTAMP_OFFSET)
                - XAVB_RX_MAC_LATENCY_IN_NS;

  /** The TimestampT2 was captured using syntonised ns time.  We need to
   * convert this into synchronised time by adding on the current offset */
  TimestampT2 = TimestampT2 + InstancePtr->PtpRecords.NsOffsetForPDelayResp;

  /** Check for ns wrap-around condition */
  if (TimestampT2 >= XAVB_ONE_SECOND) {
    TimestampT2   = TimestampT2 - XAVB_ONE_SECOND;
  }

  /** Even though we read the RTC value at the beginning of this
   * function, there would have been processing delay between the
   * actual reception (and timestamping) of the PDelayReq frame and the
   * start of this function.  During this time, the RTC Seconds
   * field could have wrapped around.  We need to detect this and if it
   * has done, the slave Seconds field would also have incremented (so
   * it needs to be set back).
   */
  if (NanoSec < TimestampT2) {
    /** NanoSec has wrapped since timestamp was taken so decrement the
     * Seconds field */
    if (Seconds == 0x00000000) {
      Epoch = Epoch   - 0x1;
    }
    Seconds = Seconds - 0x1;
  }

  /** Format the Timestamp (t2) into correct byte positioning for PTP frame
   *  storage, then write the Timestamp (t2) to the PDelayResp frame
   */
  BufferWord = XAvb_ReorderWord((Epoch<<16) | (Seconds>>16));


  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_TIMESTAMP_UPPER_OFFSET,
                       BufferWord);

  BufferWord = XAvb_ReorderWord((Seconds<<16) | (TimestampT2>>16));

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_TIMESTAMP_MID_OFFSET,
                       BufferWord);

  BufferWord = XAvb_ReorderWord(TimestampT2<<16);

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_TIMESTAMP_LOWER_OFFSET,
                       BufferWord);


  /** Format the SequenceId
   *----------------------
   *
   * Set the SequenceId in the PDelayResp and PDelayRespFollowUp frame to be
   * that of the received PDelayReq frame */
  SequenceId = (XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                    PtpFrameBaseAddr,
                                    XAVB_PTP_RX_PKT_SEQUENCEID_OFFSET))
                & 0x0000FFFF;

  BufferWord = XAVB_PDELAY_LOG_MEAN_MESSAGE_INT | SequenceId;

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_SEQUENCEID_OFFSET,
                       BufferWord);

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                      XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET,
                       XAVB_PTP_TX_PKT_SEQUENCEID_OFFSET,
                       BufferWord);


  /** Format the sourcePortIdentity
   *------------------------------
   *
   * Copy the sourcePortIdentity field from the PDelayReq into the PDelayResp
   * and PDelayRespFollowUp frame
   */
  CopyPortId = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                   PtpFrameBaseAddr,
                                   XAVB_PTP_RX_PKT_PORTID_UPPER_OFFSET);

  CopyPortId &= 0xffff0000;
  CopyPortId1 = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                    XAVB_PTP_TX_PDELAYRESP_OFFSET,
                    XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET);

  CopyPortId |= (CopyPortId1 & 0x0000ffff);

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET,
                       CopyPortId);

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET,
                       CopyPortId);

  CopyPortId = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                   PtpFrameBaseAddr,
                                   XAVB_PTP_RX_PKT_PORTID_MID_OFFSET);

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_MID_OFFSET,
                       CopyPortId);

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_MID_OFFSET,
                       CopyPortId);

  CopyPortId = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                   PtpFrameBaseAddr,
                                   XAVB_PTP_RX_PKT_PORTID_LOWER_OFFSET);

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_LOWER_OFFSET,
                       CopyPortId);

  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_LOWER_OFFSET,
                       CopyPortId);


  /** Send the PDelayResp Frame!
   *---------------------------*/

  XAvb_WriteReg(InstancePtr->Config.BaseAddress,
                 XAVB_PTP_TX_CONTROL_OFFSET,
                 XAVB_PTP_TX_SEND_PDELAYRESP_FRAME_MASK);

#ifdef DEBUG_XAVB_LEVEL3
  xil_printf("\r\n--------------------------------");
  xil_printf("\r\n------XAvb_SendPDelayResp()-----");
  xil_printf("\r\n--------------------------------");
  xil_printf("\r\nTimestampT2 is %x", TimestampT2);
#endif

}
/****************************************************************************/
/**
*
* A function to format then request the transmission of a PTP PDelay Response
* Packet
*
* @param  InstancePtr is a pointer to the XAvb instance to be worked on
* @param  PtpFrameBaseAddr is the base address of the received Announce Packet
*         in the Rx PTP Packet Buffer
*
* @return None.  But the relevant Tx PTP Packet Buffer is written to with the
*                updated PTP fields, and then the Tx PTP Packet Buffer Control
*                Register is written to request the frame transmission.
*
* @note   None.
*
*****************************************************************************/
A function to format then request the transmission of a PTP PDelay Response
Packet
A function to format then request the transmission of a PTP PDelay Response Packet
void XAvb_SendPDelayResp(XAvb * InstancePtr,
                         u32    PtpFrameBaseAddr) {
  u32 SequenceId     = 0;
  u32 TimestampT2    = 0;
  u32 BufferWord     = 0;
  u32 NanoSec        = 0;
  u32 Seconds        = 0;
  u32 Epoch          = 0;
  u32 CopyPortId     = 0;
  u32 CopyPortId1    = 0;
  XAvb_WaitOnTxPtpQueue(InstancePtr);
  NanoSec  = XAvb_ReadReg(InstancePtr->Config.BaseAddress,
                           XAVB_RTC_NANOSEC_VALUE_OFFSET);
  Seconds  = XAvb_ReadReg(InstancePtr->Config.BaseAddress,
                           XAVB_RTC_SEC_LOWER_VALUE_OFFSET);
  Epoch    = XAvb_ReadReg(InstancePtr->Config.BaseAddress,
                           XAVB_RTC_SEC_UPPER_VALUE_OFFSET);
  InstancePtr->PtpRecords.NsOffsetForPDelayResp =
      XAvb_ReadReg(InstancePtr->Config.BaseAddress, XAVB_RTC_NANOSEC_OFFSET);
  TimestampT2 = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                    PtpFrameBaseAddr,
                                    XAVB_PTP_PKT_CAPTURED_TIMESTAMP_OFFSET)
                - XAVB_RX_MAC_LATENCY_IN_NS;
  TimestampT2 = TimestampT2 + InstancePtr->PtpRecords.NsOffsetForPDelayResp;
  if (TimestampT2 >= XAVB_ONE_SECOND) {
    TimestampT2   = TimestampT2 - XAVB_ONE_SECOND;
  }
  if (NanoSec < TimestampT2) {
    if (Seconds == 0x00000000) {
      Epoch = Epoch   - 0x1;
    }
    Seconds = Seconds - 0x1;
  }
  BufferWord = XAvb_ReorderWord((Epoch<<16) | (Seconds>>16));
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_TIMESTAMP_UPPER_OFFSET,
                       BufferWord);
  BufferWord = XAvb_ReorderWord((Seconds<<16) | (TimestampT2>>16));
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_TIMESTAMP_MID_OFFSET,
                       BufferWord);
  BufferWord = XAvb_ReorderWord(TimestampT2<<16);
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_TIMESTAMP_LOWER_OFFSET,
                       BufferWord);
  SequenceId = (XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                    PtpFrameBaseAddr,
                                    XAVB_PTP_RX_PKT_SEQUENCEID_OFFSET))
                & 0x0000FFFF;
  BufferWord = XAVB_PDELAY_LOG_MEAN_MESSAGE_INT | SequenceId;
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_SEQUENCEID_OFFSET,
                       BufferWord);
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                      XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET,
                       XAVB_PTP_TX_PKT_SEQUENCEID_OFFSET,
                       BufferWord);
  CopyPortId = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                   PtpFrameBaseAddr,
                                   XAVB_PTP_RX_PKT_PORTID_UPPER_OFFSET);
  CopyPortId &= 0xffff0000;
  CopyPortId1 = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                    XAVB_PTP_TX_PDELAYRESP_OFFSET,
                    XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET);
  CopyPortId |= (CopyPortId1 & 0x0000ffff);
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET,
                       CopyPortId);
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET,
                       CopyPortId);
  CopyPortId = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                   PtpFrameBaseAddr,
                                   XAVB_PTP_RX_PKT_PORTID_MID_OFFSET);
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_MID_OFFSET,
                       CopyPortId);
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_MID_OFFSET,
                       CopyPortId);
  CopyPortId = XAvb_ReadPtpBuffer(InstancePtr->Config.BaseAddress,
                                   PtpFrameBaseAddr,
                                   XAVB_PTP_RX_PKT_PORTID_LOWER_OFFSET);
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_LOWER_OFFSET,
                       CopyPortId);
  XAvb_WritePtpBuffer(InstancePtr->Config.BaseAddress,
                       XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET,
                       XAVB_PTP_TX_PKT_REQ_PORTID_LOWER_OFFSET,
                       CopyPortId);
  XAvb_WriteReg(InstancePtr->Config.BaseAddress,
                 XAVB_PTP_TX_CONTROL_OFFSET,
                 XAVB_PTP_TX_SEND_PDELAYRESP_FRAME_MASK);
#ifdef DEBUG_XAVB_LEVEL3
  xil_printf("\r\n--------------------------------");
  xil_printf("\r\n------XAvb_SendPDelayResp()-----");
  xil_printf("\r\n--------------------------------");
  xil_printf("\r\nTimestampT2 is %x", TimestampT2);
#endif
}
void XAvb_SendPDelayResp ( XAvb * InstancePtr , u32 PtpFrameBaseAddr ) { u32 SequenceId = 0 ; u32 TimestampT2 = 0 ; u32 BufferWord = 0 ; u32 NanoSec = 0 ; u32 Seconds = 0 ; u32 Epoch = 0 ; u32 CopyPortId = 0 ; u32 CopyPortId1 = 0 ; XAvb_WaitOnTxPtpQueue ( InstancePtr ) ; NanoSec = XAvb_ReadReg ( InstancePtr -> Config . BaseAddress , XAVB_RTC_NANOSEC_VALUE_OFFSET ) ; Seconds = XAvb_ReadReg ( InstancePtr -> Config . BaseAddress , XAVB_RTC_SEC_LOWER_VALUE_OFFSET ) ; Epoch = XAvb_ReadReg ( InstancePtr -> Config . BaseAddress , XAVB_RTC_SEC_UPPER_VALUE_OFFSET ) ; InstancePtr -> PtpRecords . NsOffsetForPDelayResp = XAvb_ReadReg ( InstancePtr -> Config . BaseAddress , XAVB_RTC_NANOSEC_OFFSET ) ; TimestampT2 = XAvb_ReadPtpBuffer ( InstancePtr -> Config . BaseAddress , PtpFrameBaseAddr , XAVB_PTP_PKT_CAPTURED_TIMESTAMP_OFFSET ) - XAVB_RX_MAC_LATENCY_IN_NS ; TimestampT2 = TimestampT2 + InstancePtr -> PtpRecords . NsOffsetForPDelayResp ; if ( TimestampT2 >= XAVB_ONE_SECOND ) { TimestampT2 = TimestampT2 - XAVB_ONE_SECOND ; } if ( NanoSec < TimestampT2 ) { if ( Seconds == 0x00000000 ) { Epoch = Epoch - 0x1 ; } Seconds = Seconds - 0x1 ; } BufferWord = XAvb_ReorderWord ( ( Epoch << 16 ) | ( Seconds >> 16 ) ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_OFFSET , XAVB_PTP_TX_PKT_TIMESTAMP_UPPER_OFFSET , BufferWord ) ; BufferWord = XAvb_ReorderWord ( ( Seconds << 16 ) | ( TimestampT2 >> 16 ) ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_OFFSET , XAVB_PTP_TX_PKT_TIMESTAMP_MID_OFFSET , BufferWord ) ; BufferWord = XAvb_ReorderWord ( TimestampT2 << 16 ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_OFFSET , XAVB_PTP_TX_PKT_TIMESTAMP_LOWER_OFFSET , BufferWord ) ; SequenceId = ( XAvb_ReadPtpBuffer ( InstancePtr -> Config . BaseAddress , PtpFrameBaseAddr , XAVB_PTP_RX_PKT_SEQUENCEID_OFFSET ) ) & 0x0000FFFF ; BufferWord = XAVB_PDELAY_LOG_MEAN_MESSAGE_INT | SequenceId ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_OFFSET , XAVB_PTP_TX_PKT_SEQUENCEID_OFFSET , BufferWord ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET , XAVB_PTP_TX_PKT_SEQUENCEID_OFFSET , BufferWord ) ; CopyPortId = XAvb_ReadPtpBuffer ( InstancePtr -> Config . BaseAddress , PtpFrameBaseAddr , XAVB_PTP_RX_PKT_PORTID_UPPER_OFFSET ) ; CopyPortId &= 0xffff0000 ; CopyPortId1 = XAvb_ReadPtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_OFFSET , XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET ) ; CopyPortId |= ( CopyPortId1 & 0x0000ffff ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_OFFSET , XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET , CopyPortId ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET , XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET , CopyPortId ) ; CopyPortId = XAvb_ReadPtpBuffer ( InstancePtr -> Config . BaseAddress , PtpFrameBaseAddr , XAVB_PTP_RX_PKT_PORTID_MID_OFFSET ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_OFFSET , XAVB_PTP_TX_PKT_REQ_PORTID_MID_OFFSET , CopyPortId ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET , XAVB_PTP_TX_PKT_REQ_PORTID_MID_OFFSET , CopyPortId ) ; CopyPortId = XAvb_ReadPtpBuffer ( InstancePtr -> Config . BaseAddress , PtpFrameBaseAddr , XAVB_PTP_RX_PKT_PORTID_LOWER_OFFSET ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_OFFSET , XAVB_PTP_TX_PKT_REQ_PORTID_LOWER_OFFSET , CopyPortId ) ; XAvb_WritePtpBuffer ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP_OFFSET , XAVB_PTP_TX_PKT_REQ_PORTID_LOWER_OFFSET , CopyPortId ) ; XAvb_WriteReg ( InstancePtr -> Config . BaseAddress , XAVB_PTP_TX_CONTROL_OFFSET , XAVB_PTP_TX_SEND_PDELAYRESP_FRAME_MASK ) ; #ifdef DEBUG_XAVB_LEVEL3 xil_printf ( " \r \n " ) ; xil_printf ( " \r \n " ) ; xil_printf ( " \r \n " ) ; xil_printf ( " \r \n " , TimestampT2 ) ; #endif }
A function to format then request the transmission of a PTP PDelay Response
Packet
A function to format then request the transmission of a PTP PDelay Response Packet
/** Wait until there are no PTP frames to be transmitted */ /** Format the Timestamp
   *---------------------
   *
   * Capture the current Synchronised time */ /** Read the current RTC offset */ /** Read the TimestampT2 for PDelayReq reception and adjust it for MAC
   *  receive latency */ /** The TimestampT2 was captured using syntonised ns time.  We need to
   * convert this into synchronised time by adding on the current offset */ /** Check for ns wrap-around condition */ /** Even though we read the RTC value at the beginning of this
   * function, there would have been processing delay between the
   * actual reception (and timestamping) of the PDelayReq frame and the
   * start of this function.  During this time, the RTC Seconds
   * field could have wrapped around.  We need to detect this and if it
   * has done, the slave Seconds field would also have incremented (so
   * it needs to be set back).
   */ /** NanoSec has wrapped since timestamp was taken so decrement the
     * Seconds field */ /** Format the Timestamp (t2) into correct byte positioning for PTP frame
   *  storage, then write the Timestamp (t2) to the PDelayResp frame
   */ /** Format the SequenceId
   *----------------------
   *
   * Set the SequenceId in the PDelayResp and PDelayRespFollowUp frame to be
   * that of the received PDelayReq frame */ /** Format the sourcePortIdentity
   *------------------------------
   *
   * Copy the sourcePortIdentity field from the PDelayReq into the PDelayResp
   * and PDelayRespFollowUp frame
   */ /** Send the PDelayResp Frame!
   *---------------------------*/