亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? zl5011xrtp.c

?? Zalink50114----TDMoIP芯片驅(qū)動(dòng)源碼
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):

 Remarks:
   None
*******************************************************************************/

extern zlStatusE zl5011xRtpSeedTimestamp(zl5011xParamsS *zl5011xParams,
      Uint32T context,
      Uint32T timestamp)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T headerAddress;
   Uint32T timestampWord = 0, position = 0, timestampBit0 = 0;
   zl5011xContextHeaderSwitchE modifyHeader;

   ZL5011X_TRACE_CONTEXT(ZL5011X_RTP_FN_ID, context,
         "zl5011xRtpSeedTimestamp: ctxt %3d, timestamp 0x%.8lx",
         context, timestamp, 0, 0, 0, 0);

   /* determine which is the shadow header. This is the one to add the
      timestamp into - and not the active header */
   modifyHeader = zl5011xParams->packetIf.packetTx.txHeader[context].shadowHeader;

   /* check that the timestamp is enabled before continuing */
   if (zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[modifyHeader].layer5TimestampEnable != ZL5011X_TRUE)
   {
      status = ZL5011X_INVALID_MODE;
   }

   /* check that the timestamp position is valid */
   if (status == ZL5011X_OK)
   {
      if (((zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[modifyHeader].layer5Timestamp32bit == ZL5011X_TRUE) &&
            (zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[modifyHeader].layer5TimestampPos > (ZL5011X_RTP_HIGH_HEADER_MAX_LEN - 4))) ||
            ((zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[modifyHeader].layer5Timestamp32bit == ZL5011X_FALSE) &&
            (zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[modifyHeader].layer5TimestampPos > (ZL5011X_RTP_HIGH_HEADER_MAX_LEN - 2))))
      {
         status = ZL5011X_INVALID_MODE;
      }
   }

   if (status == ZL5011X_OK)
   {
      status = zl5011xRtpGetHeaderAddress(zl5011xParams, context, modifyHeader,
            &headerAddress);
   }

   if (status == ZL5011X_OK)
   {
      /* get location of timestamp in words and bits */
      position = zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[modifyHeader].layer5TimestampPos;
      timestampWord = position & ~ ZL5011X_2BIT_MASK;

      /* check the bottom two bits to determine the shift required for
         this part of the field */
      if ((position & ZL5011X_2BIT_MASK) != 0)
      {
         timestampBit0 = 16;
      }
      else
      {
         timestampBit0 = 0;
      }

      if (zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[modifyHeader].layer5Timestamp32bit == ZL5011X_FALSE)
      {
         /* a 16 bit timestamp, so write it into the correct 16 bit location */
         status = zl5011xReadModWrite(zl5011xParams,
               headerAddress + timestampWord,
               timestamp << timestampBit0,
               ZL5011X_16BIT_MASK << timestampBit0);
      }
      else
      {
         /* a 32 bit timestamp is aligned on a 32 bit boundary */
         status = zl5011xWrite(zl5011xParams,
               headerAddress + timestampWord,
               timestamp);
      }
   }

   return status;
}

/*******************************************************************************
 Function:
    zl5011xRtpGetTimestamp

 Description:
      Returns the timestamp from the RTP Tx header. This is the timestamp used for
      the last Tx packet.
      This uses the currently active header. Implying that the delay from the PLA
      to the RTP block is short.

 Inputs:
    zl5011xParams      Pointer to the structure for this device instance
   context            Selected context

 Outputs:
   timestamp   Timestamp from the RTP Tx header, used for the last Tx packet.

 Returns:
   zlStatusE

 Remarks:
   None

*******************************************************************************/

extern zlStatusE zl5011xRtpGetTimestamp(zl5011xParamsS *zl5011xParams,
      Uint32T context,
      Uint32T *pTimestamp)
{
   zlStatusE status = ZL5011X_OK;
   zl5011xContextHeaderSwitchE activeHeader;
   Uint32T headerAddress;
   Uint32T timestampWord= 0, position= 0, timestampBit0= 0;
   Uint32T rtpData;

   ZL5011X_TRACE_CONTEXT(ZL5011X_RTP_FN_ID, context, "zl5011xRtpGetTimestamp: ctxt %3d, ",
              context, 0, 0, 0, 0, 0);

   /* Determine which is the active header */
   if (zl5011xParams->packetIf.packetTx.txHeader[context].shadowHeader == ZL5011X_PRIMARY_HEADER)
   {
      activeHeader = ZL5011X_SECONDARY_HEADER;
   }
   else
   {
      activeHeader = ZL5011X_PRIMARY_HEADER;
   }

   /* get location of timestamp if enabled */
   if ( zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[activeHeader].layer5TimestampEnable == ZL5011X_TRUE)
   {
      status = zl5011xRtpGetHeaderAddress(zl5011xParams, context, activeHeader,
                                          &headerAddress);

      if (status == ZL5011X_OK)
      {
         /* get the position of the timestamp in the header */
         position = zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[activeHeader].layer5TimestampPos;
         /* mask off the bottom bits of the position, to get a 32 bit address */
         timestampWord = position & ~ ZL5011X_2BIT_MASK;

         /* check the bottom two bits to determine the shift required for
            this part of the field */
         if ((position & ZL5011X_2BIT_MASK) != 0)
         {
            timestampBit0 = 16;
         }
         else
         {
            timestampBit0 = 0;
         }

         /* read word containing timestamp */
         status = zl5011xRead(zl5011xParams,
               headerAddress + timestampWord,
               &rtpData);
      }

      if (status == ZL5011X_OK)
      {
         /* either 32 or 16 bit timestamp */
         if (zl5011xParams->packetIf.packetTx.txHeader[context].highHeader[activeHeader].layer5Timestamp32bit == ZL5011X_TRUE)
         {
            *pTimestamp = rtpData;
         }
         else
         {
            if (timestampBit0 == 0)
            {
               *pTimestamp = rtpData & ZL5011X_16BIT_MASK;
            }
            else
            {
               *pTimestamp = (rtpData >> timestampBit0) & ZL5011X_16BIT_MASK;
            }
         }
      }

      ZL5011X_TRACE(ZL5011X_RTP_FN_ID, "zl5011xRtpGetTimestamp: ctxt %3d, timestamp 0x%.8lx ",
              context, *pTimestamp, 0, 0, 0, 0);
   }
   else
   {
      *pTimestamp = 0;

      ZL5011X_TRACE(ZL5011X_RTP_FN_ID, "zl5011xRtpGetTimestamp: ctxt %3d, timestamp not enabled",
              context, 0, 0, 0, 0, 0);
   }

   return status;
}

/*******************************************************************************
 Function:
    zl5011xRtpInitStatisticsEntry

 Description:
   Writes to the memory that holds the Tx and Rx statistics for a particular
   context, setting the interrupt bits to allow an interrupt on counter
   overflow, and clearing the counters.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   context        Selected context

 Outputs:
   None

 Returns:
  zlStatusE

 Remarks:
   None

*******************************************************************************/

extern zlStatusE  zl5011xRtpInitStatisticsEntry(zl5011xParamsS *zl5011xParams,
            Uint32T context)
{

   zlStatusE status = ZL5011X_OK;
   Uint32T statsAddress, bits;

   ZL5011X_TRACE_CONTEXT(ZL5011X_RTP_FN_ID, context,
         "zl5011xRtpInitStatisticsEntry: ctxt %d",
         context, 0, 0, 0, 0, 0);

   /* Set all fields in statistics data base structure to zero */
   status = zl5011xRtpGetStatisticsAddress(zl5011xParams, context,
         &statsAddress);

   /* write the Tx byte count word in the sender stats table */
   if (status == ZL5011X_OK)
   {
      bits = 0;
      status = zl5011xWrite(zl5011xParams,
            statsAddress + (ZL5011X_RTP_TX_BYTE_COUNT_INDEX * sizeof(Uint32T)),
            bits);
   }

   /* write the Tx packet count word in the sender stats table */
   if (status == ZL5011X_OK)
   {
      bits = ZL5011X_RTP_TCE_OFFSET_MASK;
      status = zl5011xWrite(zl5011xParams,
            statsAddress + (ZL5011X_RTP_TX_PACKET_COUNT_INDEX * sizeof(Uint32T)),
            bits);
   }

   /* write the Rx packet count word in the sender stats table */
   if (status == ZL5011X_OK)
   {
      bits = ZL5011X_RTP_RCE_OFFSET_MASK;

      status = zl5011xWrite(zl5011xParams,
            statsAddress + (ZL5011X_RTP_RX_PACKET_COUNT_INDEX * sizeof(Uint32T)),
            bits);
   }

   /* write the seq number word in the sender stats table */
   if (status == ZL5011X_OK)
   {
      bits = ZL5011X_RTP_INTERRUPT_MODE;
      status = zl5011xWrite(zl5011xParams,
            statsAddress + (ZL5011X_RTP_RX_SEQ_NUM_INDEX * sizeof(Uint32T)),
            bits);
   }

   if (status == ZL5011X_OK)
   {
      /* reset the software counts for the RTP statistics */
      (void)memset(&(zl5011xParams->rtp.rtpSwCounts[context]), 0, sizeof(zl5011xRtpStatsS));
      zl5011xParams->rtp.rtpSwCounts[context].rxFirstSequenceNumber = (Uint32T)ZL5011X_INVALID;
   }

   return status;
}

/*******************************************************************************
 Function:
   zl5011xRtpInitStatisticsRxEntry

 Description:
   Writes to the memory that holds the Rx statistics for a particular
   context, setting the interrupt bits to allow an interrupt on counter
   overflow, and clearing the counters.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   context        Selected context

 Outputs:
   None

 Returns:
  zlStatusE

 Remarks:
   None

*******************************************************************************/

extern zlStatusE  zl5011xRtpInitStatisticsRxEntry(zl5011xParamsS *zl5011xParams,
      Uint32T context)
{

   zlStatusE status = ZL5011X_OK;
   Uint32T statsAddress, bits;

   ZL5011X_TRACE_CONTEXT(ZL5011X_RTP_FN_ID, context,
         "zl5011xRtpInitStatisticsRxEntry: ctxt %d",
         context, 0, 0, 0, 0, 0);

   /* Set all fields in statistics data base structure to zero */
   status = zl5011xRtpGetStatisticsAddress(zl5011xParams, context,
         &statsAddress);

   /* write the Rx packet count word in the sender stats table */
   if (status == ZL5011X_OK)
   {
      bits = ZL5011X_RTP_RCE_OFFSET_MASK;

      status = zl5011xWrite(zl5011xParams,
            statsAddress + (ZL5011X_RTP_RX_PACKET_COUNT_INDEX * sizeof(Uint32T)),
            bits);
   }

   /* write the seq number word in the sender stats table */
   if (status == ZL5011X_OK)
   {
      bits = ZL5011X_RTP_INTERRUPT_MODE;
      status = zl5011xWrite(zl5011xParams,
            statsAddress + (ZL5011X_RTP_RX_SEQ_NUM_INDEX * sizeof(Uint32T)),
            bits);
   }

   if (status == ZL5011X_OK)
   {
      /* reset the software counts for the RTP statistics */
      zl5011xParams->rtp.rtpSwCounts[context].interArrivalJitter = 0;
      zl5011xParams->rtp.rtpSwCounts[context].rxPacketCount = 0;
      zl5011xParams->rtp.rtpSwCounts[context].rxSequenceNumber = 0;

      zl5011xParams->rtp.rtpSwCounts[context].rxFirstSequenceNumber = (Uint32T)ZL5011X_INVALID;
   }

   return status;
}

/*******************************************************************************
 Function:
    zl5011xRtpInitStatisticsTxEntry

 Description:
   Writes to the memory that holds the Tx statistics for a particular
   context, clearing the counters.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   context        Selected context

 Outputs:
   None

 Returns:
  zlStatusE

 Remarks:
   None

*******************************************************************************/

extern zlStatusE  zl5011xRtpInitStatisticsTxEntry(zl5011xParamsS *zl5011xParams,
      Uint32T context)
{

   zlStatusE status = ZL5011X_OK;
   Uint32T statsAddress, bits;

   ZL5011X_TRACE_CONTEXT(ZL5011X_RTP_FN_ID, context,
         "zl5011xRtpInitStatisticsTxEntry: ctxt %d",
         context, 0, 0, 0, 0, 0);

   /* Set all fields in statistics data base structure to zero */
   status = zl5011xRtpGetStatisticsAddress(zl5011xParams, context,
         &statsAddress);

   /* write the Tx byte count word in the sender stats table */
   if (status == ZL5011X_OK)
   {
      bits = 0;
      status = zl5011xWrite(zl5011xParams,
            statsAddress + (ZL5011X_RTP_TX_BYTE_COUNT_INDEX * sizeof(Uint32T)),
            bits);
   }

   /* write the Tx packet count word in the sender stats table */
   if (status == ZL5011X_OK)
   {
      bits = ZL5011X_RTP_TCE_OFFSET_MASK;
      status = zl5011xWrite(zl5011xParams,
            statsAddress + (ZL5011X_RTP_TX_PACKET_COUNT_INDEX * sizeof(Uint32T)),
            bits);
   }

   if (status == ZL5011X_OK)
   {
      /* reset the software counts for the RTP statistics */
      zl5011xParams->rtp.rtpSwCounts[context].txByteCount = 0;
      zl5011xParams->rtp.rtpSwCounts[context].txPacketCount = 0;
   }

   return status;
}

/*******************************************************************************
 Function:
    zl5011xRtpUpdateStatistics

 Description:
   Updates the s/w counters when a rollover is detected. Generally called from
   the ISR. Interrupts must be disabled if this is not called from an interrupt.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   context        Context for which statistics are to be updated.
   rollOverFlags  Flags to indicate counter roll over

 Outputs:
   None

 Returns:
  zlStatusE

 Remarks:
   None

*******************************************************************************/

extern zlStatusE  zl5011xRtpUpdateStatistics(zl5011xParamsS *zl5011xParams,
      Uint32T context, Uint32T rollOverFlags)
{
   zlStatusE status = ZL5011X_OK;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级电影精品| 极品美女销魂一区二区三区免费| 精品一区二区免费看| 欧美日韩精品三区| 一卡二卡三卡日韩欧美| 在线播放国产精品二区一二区四区| 91精品国产美女浴室洗澡无遮挡| 亚洲一区电影777| 九九国产精品视频| 日韩三级伦理片妻子的秘密按摩| 午夜成人在线视频| 欧美一区二区三区四区久久| 日韩精品91亚洲二区在线观看| 欧美日韩国产一级| 天堂久久一区二区三区| 欧美一级黄色录像| 日产国产欧美视频一区精品 | 久久视频一区二区| 精品一区二区三区影院在线午夜| 精品久久久久av影院| 国产一区二区美女诱惑| 久久精品这里都是精品| 老司机精品视频一区二区三区| 日韩一区二区电影| 国产成人亚洲精品狼色在线| 亚洲国产精品成人综合| 91浏览器在线视频| 日韩高清在线不卡| 国产丝袜美腿一区二区三区| 色婷婷精品久久二区二区蜜臀av| 在线亚洲欧美专区二区| 日韩高清在线不卡| 国产欧美一区二区三区在线老狼| 91在线小视频| 偷拍日韩校园综合在线| 日韩一区二区免费视频| 国产99久久久久| 亚洲一二三区不卡| 日韩三级在线免费观看| 成人精品视频网站| 精品久久一区二区| 成人福利视频网站| 午夜亚洲福利老司机| 国产日韩亚洲欧美综合| 欧美综合天天夜夜久久| 国产一区二区电影| 一级特黄大欧美久久久| 久久免费视频色| 欧美综合视频在线观看| 国产一区二区精品久久91| 亚洲一区av在线| 久久久久久久久久久黄色| 欧美三区在线视频| 不卡av免费在线观看| 美国毛片一区二区| 国产精品久久久久久久第一福利 | 天天综合色天天| 国产亚洲精品资源在线26u| 欧美理论片在线| 粉嫩嫩av羞羞动漫久久久| 午夜精品免费在线观看| 亚洲国产精华液网站w| 日韩欧美色综合网站| 色婷婷av一区二区三区软件 | 亚洲精品国产成人久久av盗摄 | 亚洲欧美日韩综合aⅴ视频| 欧美精品一二三四| 91麻豆免费看片| 成人综合婷婷国产精品久久蜜臀| 日本不卡中文字幕| 亚洲国产精品影院| 亚洲久本草在线中文字幕| 欧美sm极限捆绑bd| 91精品午夜视频| 欧美三级视频在线| 色婷婷综合久久久久中文 | 性欧美疯狂xxxxbbbb| 中文字幕日韩欧美一区二区三区| 亚洲一级在线观看| 国产精品免费久久| 91久久久免费一区二区| 国产成人免费网站| 国产在线国偷精品产拍免费yy| 午夜视频一区二区三区| 亚洲精品美国一| 亚洲免费在线视频| 亚洲视频在线观看一区| 国产精品三级电影| 日本一二三四高清不卡| 国产欧美精品一区二区色综合| 精品理论电影在线观看| 精品国精品国产| 91啪亚洲精品| 成人激情小说乱人伦| 成人aa视频在线观看| 波多野结衣中文一区| 国产精品亚洲第一| 国产盗摄精品一区二区三区在线| 国产一区二区三区四区五区美女 | 欧美浪妇xxxx高跟鞋交| 欧美日韩一区二区三区免费看| 欧美综合天天夜夜久久| 欧美日韩另类一区| 91国产成人在线| 欧美日韩国产精选| 日韩视频一区在线观看| 亚洲精品一区二区三区福利| 国产亚洲女人久久久久毛片| 中文字幕二三区不卡| 亚洲欧美电影一区二区| 亚洲欧美日韩国产综合| 亚洲五月六月丁香激情| 免费在线观看一区| 国产精品影视网| 99久久久精品免费观看国产蜜| 91网上在线视频| 欧美日本国产视频| 欧美日韩中文国产| 日韩欧美资源站| 国产精品天天看| 亚洲午夜一二三区视频| 奇米影视在线99精品| 国产一区二区三区精品视频| 岛国一区二区三区| 在线观看亚洲精品| 精品乱码亚洲一区二区不卡| 国产精品免费久久久久| 亚洲成av人片在线观看| 国产一区二区精品久久| 91久久人澡人人添人人爽欧美| 91精品国产欧美一区二区18| 久久久久88色偷偷免费| 亚洲一区二区五区| 国产精品一区免费视频| 欧美一三区三区四区免费在线看 | 成人福利视频在线| 91精品国产入口在线| 一区二区三区加勒比av| 丁香婷婷综合色啪| 精品剧情v国产在线观看在线| 亚洲国产美女搞黄色| 96av麻豆蜜桃一区二区| 国产无人区一区二区三区| 日韩成人av影视| 欧洲色大大久久| 国产精品久久久久久久蜜臀 | 99天天综合性| 久久久亚洲国产美女国产盗摄| 亚洲一区视频在线| 一本色道久久综合狠狠躁的推荐 | 国产精品一品二品| 91精品国模一区二区三区| 亚洲国产精品久久一线不卡| 91麻豆国产福利在线观看| 国产精品九色蝌蚪自拍| 国产成人午夜精品影院观看视频 | 欧美日韩精品一区视频| 亚洲色图制服诱惑| 波多野结衣亚洲一区| 久久久久高清精品| 国产二区国产一区在线观看| 久久久亚洲精品石原莉奈| 国模娜娜一区二区三区| 欧美成人一区二区三区片免费 | 91国产丝袜在线播放| 亚洲视频1区2区| 色婷婷久久久久swag精品| 一区二区三区国产精华| 欧美系列日韩一区| 亚洲综合免费观看高清完整版在线| 色婷婷国产精品综合在线观看| 亚洲美女区一区| 欧美色电影在线| 日韩av一级片| 欧美成人一区二区三区| 国产黄色精品视频| 国产精品成人网| 日本二三区不卡| 日韩精品欧美精品| 精品欧美一区二区在线观看| 国产一区二区免费视频| 国产欧美日韩卡一| 91天堂素人约啪| 无吗不卡中文字幕| 久久久精品黄色| 9i看片成人免费高清| 一区二区三区国产精品| 欧美一区二区成人| 国产一区二区在线观看视频| 中文字幕在线一区免费| 欧美日韩高清一区二区| 精品一区二区三区在线观看| 国产精品久久久久久久裸模 | 成人av免费在线观看| 亚洲另类在线一区| 91精品视频网| 波多野结衣在线一区| 亚洲chinese男男1069| xnxx国产精品| 色激情天天射综合网|