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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? le1veapp.c

?? Zalink50114----TDMoIP芯片驅動源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
        result = zl5011xPacketTxSetHeaderStructInit(pZl5011xParams, &packetTxHeader);

        if (result == ZL5011X_OK)
        {
            /* get the payload length, for use in setting up the packet header */
            if (result == ZL5011X_OK)
            {
                result = zl5011xWanRxGetPayloadLengthStructInit(pZl5011xParams, &payloadLength);

                payloadLength.context = contextLoop;

                if (result == ZL5011X_OK)
                {
                    result = zl5011xWanRxGetPayloadLength(pZl5011xParams, &payloadLength);
                }
            }
        }

        if (result == ZL5011X_OK)
        {
            packetTxHeader.context = contextLoop;
            packetTxHeader.payloadLength = payloadLength.lengthBytes;
            packetTxHeader.rtpTimestampInc = 1;

            /* send all the high contexts to port 1 and the low ones to port 0 */
            if (contextLoop > 0)  /*(contextLoop > 63)*/
            {
                packetTxHeader.portNum = 1;
            }
            else
            {
                packetTxHeader.portNum = 0;
            }

            /* set the queue, based on the low 2 bits of the context number */
            packetTxHeader.queueNum = contextLoop & 3;

            /* use the header array defined locally */
            packetTxHeader.header = pZl5011xParams->pPktTxHeader[contextLoop];

            /* fill in this header array with header data */
            (void)populateHeader(contextLoop, pZl5011xParams->macAddress[0], packetTxHeader.header,
            &(packetTxHeader.headerLength), &(packetTxHeader.protocolType));

            result = zl5011xPacketTxSetHeader(pZl5011xParams, &packetTxHeader);
        }
    }

    /* Update the TDM input contexts */
    for (contextLoop = FIRST_CONTEXT;
        (contextLoop < (FIRST_CONTEXT + NUM_CONTEXTS)) && (result == ZL5011X_OK);
        contextLoop++)
    {
        context = contextLoop;

        printf("context %3d: TDM input update \n", context);

        result = zl5011xContextUpdateRxStructInit(pZl5011xParams, &contextInfo);

        if (result == ZL5011X_OK)
        {
            contextInfo.context = context;
            result = zl5011xContextUpdateRx(pZl5011xParams, &contextInfo);
        }
    }

	return (result);
}

zlStatusE le1veCreatTxContext(int slot)
{
	zl5011xParamsS       			*pZl5011xParams;
	zl5011xPacketRxSetHeaderS 		packetRxHeader;
	Uint8T 							*packetHeader;
	zl5011xContextCreateS 			contextCreate;
	zl5011xContextAddChannelTxS 	addChannelTx;
	zl5011xContextS 				contextInfo;
	zl5011xWanTxQueueConfigS 		wanTxQueue;
	zl5011xWanRxGetPayloadLengthS 	payloadLength;
	Uint32T contextLoop;
	Uint32T channelLoop;
	Uint32T context, stream, channel;
	zlStatusE status = ZL5011X_OK;

   pZl5011xParams = le1ve_Zl5011xParams[slot - 1];

   /*  Create the TDM output contexts (also referred to as WAN Tx contexts) */
   for ( contextLoop = FIRST_CONTEXT;
      (contextLoop < (FIRST_CONTEXT + NUM_CONTEXTS)) && (status == ZL5011X_OK);
      contextLoop++)
   {
      context = contextLoop;

      printf("context %3d: TDM output create\n", context);

      status = zl5011xContextCreateStructInit(pZl5011xParams, &contextCreate);
      /* For default values for structure contextCreate, see the  function
         zl5011xContextCreateStructInit() in file zl5011xTdm.c */
	if (NULL == (packetHeader = (Uint8T*)malloc(100)))
		status = ZL5011X_ERROR;
	else
	{
		pZl5011xParams->pPktRxHeader[contextLoop] = packetHeader;
	}

      if (status == ZL5011X_OK)
      {
         contextCreate.context = context;
         contextCreate.flow = ZL5011X_FLOW_PKT_WAN;  /*ZL5011X_FLOW_PKT_PE_WAN;*/

         status = zl5011xContextCreateTx(pZl5011xParams, &contextCreate);
      }
   }
#if 1
   /* Add channels to the TDM output contexts (structured mode only) */
   for (contextLoop = FIRST_CONTEXT;
      (contextLoop < (FIRST_CONTEXT + NUM_CONTEXTS)) && (status == ZL5011X_OK);
      contextLoop++)
   {
      context = contextLoop;

      for (channelLoop = 1; (channelLoop < 32) && (status == ZL5011X_OK); channelLoop++)
      {
         /* simply assign 32 channels to each context.  */
         stream = context;
         status = zl5011xContextAddChannelTxStructInit(pZl5011xParams, &addChannelTx);

         /* the structure addChannelTx is used to associate the context,
            stream & channel numbers.  For default
            values for structure addChannelTx, see the  function
            zl5011xContextAddChannelTxStructInit() in file zl5011xTdm.c */

         if (status == ZL5011X_OK)
         {
            addChannelTx.context = context;
            addChannelTx.tdm.stream = 0;
            addChannelTx.tdm.channel = channelLoop * 4 + stream;
            addChannelTx.underrunMode = ZL5011X_WAN_USE_FIXED_BYTE;
            addChannelTx.underrunByte = 0xFF;

            status = zl5011xContextAddChannelTx(pZl5011xParams, &addChannelTx);
         }
      }
   }
#endif
   /* Configure the TDM output queues (referred to as WAN Tx Queues)*/
   for (contextLoop = FIRST_CONTEXT;
      (contextLoop < (FIRST_CONTEXT + NUM_CONTEXTS)) && (status == ZL5011X_OK);
      contextLoop++)
   {
      context = contextLoop;

      printf("context %3d: TDM output queue configure\n", context);

      status = zl5011xWanTxQueueConfigStructInit(pZl5011xParams, &wanTxQueue);

      if (status == ZL5011X_OK)
      {
         wanTxQueue.context = context;
         wanTxQueue.queueMode = ZL5011X_WAN_TX_QUEUE_FIFO; /*ZL5011X_WAN_TX_QUEUE_RESEQUENCE_8;*/
         wanTxQueue.queueSize = ZL5011X_WAN_TX_QUEUE_SIZE_8;
         /* set the jitter buffer in TDM frames (1 frame = 125us) */
         wanTxQueue.jitterBufferSizeUs = 125 * 8;

         status = zl5011xWanTxQueueConfig(pZl5011xParams, &wanTxQueue);
      }
   }

   /* program the packet Rx header matching */
   for (contextLoop = FIRST_CONTEXT;
      (contextLoop < (FIRST_CONTEXT + NUM_CONTEXTS)) && (status == ZL5011X_OK);
      contextLoop++)
   {
      context = contextLoop;

      printf("context %3d: TDM output setup header\n", context);

      status = zl5011xPacketRxSetHeaderStructInit(pZl5011xParams, &packetRxHeader);

      if (status == ZL5011X_OK)
      {
         packetRxHeader.context = context;
         packetRxHeader.header = pZl5011xParams->pPktRxHeader[contextLoop];

          /* fill in the header array with header data */
         (void)populateHeader(context, pZl5011xParams->macAddress[0], packetRxHeader.header,
               &(packetRxHeader.headerLength), &(packetRxHeader.protocolType));

         status = zl5011xPacketRxSetProtocol(pZl5011xParams, &packetRxHeader);
      }

      if (status == ZL5011X_OK)
      {
         /* get the payload length, so that the packet matching can be set up */
         if (status == ZL5011X_OK)
         {
            status = zl5011xWanRxGetPayloadLengthStructInit(pZl5011xParams, &payloadLength);

            payloadLength.context = context;

            if (status == ZL5011X_OK)
            {
               status = zl5011xWanRxGetPayloadLength(pZl5011xParams, &payloadLength);
            }
         }
      }

      if (status == ZL5011X_OK)
      {
         packetRxHeader.payloadLength = payloadLength.lengthBytes;

         status = zl5011xPacketRxSetHeader(pZl5011xParams, &packetRxHeader);
      }
   }

   /* Update the TDM output contexts */
   for (contextLoop = FIRST_CONTEXT;
      (contextLoop < (FIRST_CONTEXT + NUM_CONTEXTS)) && (status == ZL5011X_OK);
      contextLoop++)
   {
      context = contextLoop;

      printf("context %3d: TDM output update\n", context);

      if (status == ZL5011X_OK)
      {
         status = zl5011xContextUpdateTxStructInit(pZl5011xParams, &contextInfo);

         if (status == ZL5011X_OK)
         {
            contextInfo.context = context;
            status = zl5011xContextUpdateTx(pZl5011xParams, &contextInfo);
         }
      }
   }
   return status;
}

/*-----------------------------------------

 Function:
   populateHeader

 Description:
   Dummy function used to prepare a protocol header for use in the packet header
   functions for the device.

*/
LOCAL void populateHeader(Uint32T context, UINT8 *macAddress, Uint8T *header, Uint8T *headerLength, zl5011xProtocolTypeE *protocol)
{
   Uint32T loop, index;

   /* put in the ethernet header */
   {
      /* Source & Destination MAC address */
      for (loop = 0; loop < ZL5011X_MAC_SIZE; loop++)
      {
         header[loop] = macAddress[loop];
         header[loop + ZL5011X_MAC_SIZE] = macAddress[loop];
      }

      /* setup the MAC addresses, such that traffic out of port 0 (contexts 0 to 63)
         goes to port 1 and vice-versa */
#if 0
      if (context > 63)
      {
         header[ZL5011X_MAC_SIZE + ZL5011X_MAC_SIZE - 1] = 1;
      }
      else
      {
         header[ZL5011X_MAC_SIZE - 1] = 1;
      }
#else
      if (header[ZL5011X_MAC_SIZE - 1] - 1 == 0)
          header[ZL5011X_MAC_SIZE - 1] = 3;
      else
          header[ZL5011X_MAC_SIZE - 1] = 1;
#endif
      /* put in the ethertype for IPv4 */
      index = 2 * ZL5011X_MAC_SIZE;
      header[index++] = (Uint8T)(ZL5011X_PKT_ETHERTYPE_IPV4 >> BITS_PER_BYTE);
      header[index++] = (Uint8T)ZL5011X_PKT_ETHERTYPE_IPV4;
   }

   /* put in an IPv4 header */
   {
      header[index++] = 0x45;
      /* type of service */
      header[index++] = 0x00;
      /* length */
      header[index++] = 0x00;
      header[index++] = 0x00;
      /* ident */
      header[index++] = 0x00;
      header[index++] = 0x00;
      /* fragment */
      header[index++] = 0x40;
      header[index++] = 0x00;
      /* TTL */
      header[index++] = 0x40;
      /* protocol */
      header[index++] = ZL5011X_PKT_IP_PROTOCOL_UDP;
      /* checksum */
      header[index++] = 0x00;
      header[index++] = 0x00;
      /* source addr */
      header[index++] = 192;
      header[index++] = 168;
      header[index++] = 161 + context;

      /* use the low byte of the IP src address to represent the context.
         This is useful when examining packets use a sniffer program */
          if (context == 0)
          {
             header[index++] = 128;
          }
          else
          {
             header[index++] = (Uint8T)context;
          }

      /* dest addr */
      header[index++] = 192;
      header[index++] = 168;
      header[index++] = 161 + context;
      header[index++] = 2;
   }

   /* put in a UDP header */
   {
          /* src port */
          header[index++]  = 0xc0;
          header[index++]  = 0x00;
          /* dest port */
          header[index++]  = 0xd0;
          header[index++]  = (Uint8T)context;
      /* length */
      header[index++]  = 0x00;
      header[index++]  = 0x00;
      /* checksum */
      header[index++]  = 0x00;
      header[index++]  = 0x00;
   }

   /* put in a RTP header */
   {
      header[index++]  = 0x80;
      header[index++]  = 0x00;
      header[index++]  = 0x00;
      header[index++]  = 0x00;
      header[index++]  = 0x00;
      header[index++]  = 0x00;
      header[index++]  = 0x00;
      header[index++]  = 0x00;
      header[index++]  = 0x02;
      header[index++]  = 0x03;
      header[index++]  = 0x04;
      header[index++]  = (Uint8T)context;
   }

   /* put in a PW header */
   {
      header[index++]  = 0x00;
      header[index++]  = 0x00;
      header[index++]  = 0x00;
      header[index++]  = 0x00;
   }

   /* fill in the header length and the protocol type */
   *headerLength = index;
   *protocol = ZL5011X_IP_UDP_RTP_PW;
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲女子a中天字幕| 蜜桃一区二区三区在线观看| 亚洲国产精品精华液网站| 久久99蜜桃精品| 欧美日韩色综合| 国产精品久久久久久久久图文区| 日本aⅴ精品一区二区三区| eeuss鲁片一区二区三区在线观看| 日韩欧美区一区二| 亚洲高清一区二区三区| 高清视频一区二区| 久久夜色精品一区| 日韩黄色免费电影| 在线观看日韩一区| 国产精品国产a| 国产91精品久久久久久久网曝门| 欧美一级高清片| 视频一区免费在线观看| 欧美中文一区二区三区| 一区二区在线观看免费| 91在线视频网址| 国产精品第一页第二页第三页| 激情综合色丁香一区二区| 51午夜精品国产| 青娱乐精品视频在线| 欧美一级黄色片| 久久99久久精品| 精品久久久久久综合日本欧美| 视频一区欧美精品| 精品免费视频一区二区| 韩日欧美一区二区三区| 久久精品水蜜桃av综合天堂| 久久99精品久久久久久动态图| 日韩一卡二卡三卡四卡| 美女网站色91| 久久网这里都是精品| 国产精品一区二区久久不卡| 久久婷婷国产综合国色天香| 韩国欧美国产一区| 国产午夜精品一区二区三区四区| 国产激情91久久精品导航| 国产午夜亚洲精品理论片色戒| 成人性视频免费网站| 中文字幕一区免费在线观看| 99在线精品一区二区三区| 亚洲欧美日韩在线播放| 在线观看91精品国产麻豆| 男女性色大片免费观看一区二区| 日韩精品资源二区在线| 国产成人av电影在线观看| 日韩毛片精品高清免费| 欧美日本韩国一区二区三区视频 | 国产九色sp调教91| 国产欧美日韩三级| 在线观看一区不卡| 美腿丝袜亚洲综合| 亚洲欧美怡红院| 欧美日韩综合在线免费观看| 伦理电影国产精品| 中文字幕一区二区三区精华液| 91久久久免费一区二区| 久色婷婷小香蕉久久| 国产精品私人自拍| 欧美日韩1区2区| 成人白浆超碰人人人人| 亚洲狠狠爱一区二区三区| 精品国产乱码久久久久久蜜臀| 波多野结衣一区二区三区| 亚洲成a人在线观看| 久久九九全国免费| 精品视频一区 二区 三区| 国产精品一卡二卡| 日韩黄色片在线观看| ㊣最新国产の精品bt伙计久久| 欧美日韩国产综合草草| 成人禁用看黄a在线| 丝袜国产日韩另类美女| 亚洲欧洲色图综合| 久久综合久久综合久久| 欧美中文一区二区三区| 成人福利在线看| 久久91精品国产91久久小草 | 色丁香久综合在线久综合在线观看| 首页国产欧美日韩丝袜| 亚洲精品成人悠悠色影视| 久久久久免费观看| 日韩欧美中文一区| 在线免费一区三区| www.亚洲人| 国产米奇在线777精品观看| 亚洲高清不卡在线| 中文字幕在线一区二区三区| 欧美一区永久视频免费观看| 91丨porny丨在线| 国产东北露脸精品视频| 久久成人久久爱| 五月婷婷欧美视频| 亚洲视频在线一区观看| 国产偷v国产偷v亚洲高清| 欧美xingq一区二区| 欧美高清dvd| 欧美日韩在线三区| 欧美色区777第一页| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 日韩av不卡一区二区| 一区二区在线观看免费| 亚洲美女区一区| 亚洲三级理论片| 中文字幕中文乱码欧美一区二区| 久久午夜羞羞影院免费观看| 日韩精品中文字幕在线一区| 欧美一区二区三区四区高清| 欧美日韩一区二区在线视频| 久久久久久久久久久久久女国产乱| 欧美日本视频在线| 日韩一区二区三区观看| 日韩欧美国产成人一区二区| 精品久久一区二区三区| 精品国产乱子伦一区| 精品国产污污免费网站入口| 久久影院电视剧免费观看| 国产女同互慰高潮91漫画| 国产性色一区二区| 亚洲女同ⅹxx女同tv| 亚洲香蕉伊在人在线观| 日韩在线观看一区二区| 久久国产精品99精品国产| 激情文学综合丁香| youjizz国产精品| 欧美日韩在线直播| 欧美不卡123| 国产精品婷婷午夜在线观看| 中文乱码免费一区二区| 亚洲精品国产视频| 欧美aaaaaa午夜精品| 国产在线精品免费| 91美女在线观看| 337p亚洲精品色噜噜噜| 久久免费午夜影院| 一区二区三区中文字幕| 日韩在线一区二区三区| 国产成人精品1024| 在线视频国内一区二区| 日韩欧美国产高清| 亚洲视频一区二区免费在线观看| 亚洲第一电影网| 国产一区二区精品久久| 99精品桃花视频在线观看| 7777精品伊人久久久大香线蕉的 | 成人性生交大片免费看在线播放| av激情综合网| 欧美精品国产精品| 国产日韩欧美激情| 亚洲不卡一区二区三区| 国产精品亚洲一区二区三区在线| thepron国产精品| 日韩一级黄色片| 综合久久综合久久| 免费亚洲电影在线| 色综合天天综合网天天看片| 日韩欧美国产综合| 亚洲国产成人av网| 高清不卡一区二区在线| 欧美老人xxxx18| 亚洲免费av高清| 国产精品原创巨作av| 欧美日韩国产一二三| 亚洲欧美中日韩| 久久―日本道色综合久久| 自拍偷拍亚洲激情| 美国欧美日韩国产在线播放| 91麻豆精品一区二区三区| 精品毛片乱码1区2区3区 | 国产在线麻豆精品观看| 欧美性感一区二区三区| 亚洲国产精品国自产拍av| 另类小说综合欧美亚洲| 777久久久精品| 午夜av电影一区| 欧日韩精品视频| 亚洲少妇中出一区| 粉嫩av一区二区三区| 国产性色一区二区| 经典三级视频一区| 欧美v日韩v国产v| 蜜桃av一区二区| 综合久久久久综合| 美女在线一区二区| 亚洲欧美综合在线精品| 精品在线免费视频| 欧美精品免费视频| 亚洲图片一区二区| 欧美视频精品在线观看| 亚洲日本va午夜在线影院| aaa欧美大片| 最新不卡av在线| 99精品在线观看视频| 亚洲免费av在线| 欧洲人成人精品| 午夜久久久久久久久|