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

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

?? zl5011xtdm.c

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

   return status;
}

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

 Function:
   zl5011xContextCreateTx

 Description:
   Function to create a Wan Tx context (that is Wan Tx from the device).
   Checks that the context is not currently in use and sets it to the INIT
   state. For unframed operation, the context relates directly to the stream
   number, so for this instance, also add the first channel (0) for the stream.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   par            Pointer to the structure for configuration items. See below:

 Structure inputs:
   context     context number for creation
   flow        routing through the device for the context - can be left as value
               specified in StructInit function for default operation.
   unframedStream.underrunMode   for unstructured operation, the behaviour on
                                 packet underrun can be set to repeat or
                                 playout a fixed pattern
   unframedStream.underrunByte   the fixed pattern to playout during underrun
   osExclusionEnable ZL5011X_TRUE to enable OS exclusion

 Structure outputs:
   None

 Returns:
   zlStatusE

 Remarks:
   None

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

zlStatusE zl5011xContextCreateTx(zl5011xParamsS *zl5011xParams, zl5011xContextCreateS *par)
{
   zlStatusE status = ZL5011X_OK;
   zl5011xWanChannelS tdm;
   zl5011xBooleanE gotDevice = ZL5011X_FALSE;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   if (status == ZL5011X_OK)
   {
      status = ZL5011X_CHECK_RUNNING(zl5011xParams);
   }

   if ((status == ZL5011X_OK) && (par->osExclusionEnable == ZL5011X_TRUE))
   {
      /* get access to the device */
      status = zl5011xGetDevice(zl5011xParams, ZL5011X_GET_DEVICE_TIMEOUT_MODE);

      if (status == ZL5011X_OK)
      {
         gotDevice = ZL5011X_TRUE;
      }
   }

   /* check that the Wan Tx context is valid */
   if (status == ZL5011X_OK)
   {
      status = zl5011xContextCheckTx(zl5011xParams, par->context, ZL5011X_CHECK_CONTEXT_NUMBER);
   }

   /* main function code starts */

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE_CONTEXT(ZL5011X_TDM_FN_ID, par->context,
            "zl5011xContextCreateTx: ctxt %3d",
            par->context, 0, 0, 0, 0, 0);
   }

   if (status == ZL5011X_OK)
   {
      /* if the context is tearing down, then check to see if it has completed */
      if (zl5011xParams->wanIf.tfmCurrent.context[par->context].state == ZL5011X_STATE_TEARING_DOWN)
      {
         status = zl5011xTfmCheckContextTeardown(zl5011xParams, par->context);

         /* if the teardown has completed, then reset the error code and
            continue */
         if (status == ZL5011X_CONTEXT_TEARDOWN_COMPLETE)
         {
            status = ZL5011X_OK;
         }
      }
   }

   if (status == ZL5011X_OK)
   {
      /* check that the context is not currently in use */
      if (zl5011xParams->wanIf.tfmCurrent.context[par->context].state != ZL5011X_STATE_NOT_IN_USE)
      {
         status = ZL5011X_CONTEXT_IN_USE;
      }
   }

   if (status == ZL5011X_OK)
   {
      if (par->flow == (zl5011xFlowTypeE)ZL5011X_INVALID)
      {
         /* if the flow type has not been specified then set the default
            for this direction */
         zl5011xParams->wanIf.wanTxFlow[par->context] = ZL5011X_FLOW_PKT_PE_WAN;
      }
      else
      {
         zl5011xParams->wanIf.wanTxFlow[par->context] = par->flow;
      }

      zl5011xParams->wanIf.tfmCurrent.context[par->context].state = ZL5011X_STATE_INIT;

      /* reset the PW status byte counts etc. Set the current value to an invalid value to
         indicate that it has not yet been initialised. */
      zl5011xParams->packetIf.packetRx.contextRxPacketMatch[par->context].statusByte.value = (Uint32T)ZL5011X_INVALID;

      {
         Uint32T loop;

         for (loop = 0; loop < ZL5011X_PKC_NUM_CLASSIFY_ENTRIES; loop++)
         {
            if (zl5011xParams->packetIf.packetRx.pkcClassify[loop].context == par->context)
            {
               zl5011xParams->packetIf.packetRx.pkcClassify[loop].context = (Uint32T)ZL5011X_INVALID_CONTEXT;
            }
         }
      }
   }

   if (status == ZL5011X_OK)
   {
      /* reset the RTP statistics - packet Rx */
      status = zl5011xRtpInitStatisticsRxEntry(zl5011xParams, par->context);
   }

   if (status == ZL5011X_OK)
   {
      /* reset the TDM queue statistics */
      status = zl5011xTfqResetStats(zl5011xParams, par->context);
   }

   /* if in unframed mode, then need to add the stream to the context now */
   if ((status == ZL5011X_OK) && (zl5011xParams->wanIf.wanConnectionMode == ZL5011X_WAN_CONNECTION_UNFRAMED))
   {
      tdm.stream = (Uint8T)par->context;
      tdm.channel = 0;

      status = zl5011xTfmAddChan(zl5011xParams, par->context, tdm);

      if (status == ZL5011X_OK)
      {
         /* the channel defaults to the last byte when added by the TFM.
            If the underrun byte is specified, then set it */
         if (par->unframedStream.underrunMode == ZL5011X_WAN_USE_FIXED_BYTE)
         {
            status = zl5011xTfmSetChanUnderrun(zl5011xParams, tdm,
                  par->unframedStream.underrunByte, par->unframedStream.underrunMode);
         }
      }
   }

   if (gotDevice == ZL5011X_TRUE)
   {
      if (status == ZL5011X_OK)
      {
         status = zl5011xReleaseDevice(zl5011xParams);
      }
      else
      {
         /* already have an error code, so don't overwrite it */
         (void)zl5011xReleaseDevice(zl5011xParams);
      }
   }

   return status;
}

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

 Function:
   zl5011xContextAddChannelRxStructInit

 Description:
   Initialises structure used by zl5011xContextAddChannelRx function.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   par            Pointer to the structure for configuration items.
                  See main function

 Returns:
   zlStatusE

 Remarks:
   None

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

zlStatusE zl5011xContextAddChannelRxStructInit(zl5011xParamsS *zl5011xParams, zl5011xContextAddChannelRxS *par)
{
   zlStatusE status = ZL5011X_OK;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_TDM_FN_ID,
            "zl5011xContextAddChannelRxStructInit:",
            0, 0, 0, 0, 0, 0);

      par->context = (Uint32T)ZL5011X_INVALID_CONTEXT;
      par->tdm.stream = (Uint8T)ZL5011X_INVALID_STREAM;
      par->tdm.channel = (Uint8T)ZL5011X_INVALID_CHANNEL;
      par->checkChannelCombination = ZL5011X_TRUE;

      par->osExclusionEnable = ZL5011X_TRUE;
   }

   return status;
}

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

 Function:
   zl5011xContextAddChannelRx

 Description:
   Adds a channel to a context.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   par            Pointer to the structure for configuration items. See below:

 Structure inputs:
   context     context to be used
   tdm.stream  the stream that the channel to be added is from
   tdm.channel which channel to add
   checkChannelCombination ZL5011X_FALSE to disable checking of the channel
               combination
   osExclusionEnable ZL5011X_TRUE to enable OS exclusion

 Structure outputs:
   None

 Returns:
   zlStatusE

 Remarks:
   None

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

zlStatusE zl5011xContextAddChannelRx(zl5011xParamsS *zl5011xParams, zl5011xContextAddChannelRxS *par)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T loop, chanIndex;
   zl5011xWanChannelS tdm;
   zl5011xBooleanE gotDevice = ZL5011X_FALSE;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   if (status == ZL5011X_OK)
   {
      status = ZL5011X_CHECK_RUNNING(zl5011xParams);
   }

   if ((status == ZL5011X_OK) && (par->osExclusionEnable == ZL5011X_TRUE))
   {
      /* get access to the device */
      status = zl5011xGetDevice(zl5011xParams, ZL5011X_GET_DEVICE_TIMEOUT_MODE);

      if (status == ZL5011X_OK)
      {
         gotDevice = ZL5011X_TRUE;
      }
   }

   /* check that the Wan Rx context is valid */
   if (status == ZL5011X_OK)
   {
      status = zl5011xContextCheckRx(zl5011xParams, par->context, ZL5011X_CHECK_CONTEXT_MODIFY);
   }

   /* main function code starts */

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE_CONTEXT(ZL5011X_TDM_FN_ID, par->context,
            "zl5011xContextAddChannelRx: ctxt %3d",
            par->context, 0, 0, 0, 0, 0);
   }

   if (par->checkChannelCombination == ZL5011X_TRUE)
   {
      if (status == ZL5011X_OK)
      {
         /* check that a valid stream / channel combination has been provided before
            making any further checks */
         status = zl5011xCheckTdm(zl5011xParams, par->tdm, &chanIndex);
      }

      tdm.channel = par->tdm.channel;

      /* check that no other channels of this number have been configured so far */
      for (loop = 0; loop < zl5011xParams->wanIf.wanNumStreams; loop++)
      {
         if (status != ZL5011X_OK)
         {
            break;
         }

         tdm.stream = (Uint8T)loop;
         status = zl5011xCalcChanIndex(zl5011xParams, tdm, &chanIndex);

         if (status == ZL5011X_OK)
         {
            if (zl5011xParams->wanIf.plaCurrent.channel[chanIndex].context == par->context)
            {
               if (par->tdm.stream != tdm.stream)
               {
                  status = ZL5011X_CHANNEL_INVALID;
               }
            }
         }
      }
   }

   if (status == ZL5011X_OK)
   {
      status = zl5011xPlaAddChan(zl5011xParams, par->context, par->tdm);
   }

   if (gotDevice == ZL5011X_TRUE)
   {
      if (status == ZL5011X_OK)
      {
         status = zl5011xReleaseDevice(zl5011xParams);
      }
      else
      {
         /* already have an error code, so don't overwrite it */
         (void)zl5011xReleaseDevice(zl5011xParams);
      }
   }

   return status;
}

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

 Function:
   zl5011xContextAddChannelTxStructInit

 Description:
   Initialises structure used by zl5011xContextAddChannelTx function.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   par            Pointer to the structure for configuration items.
                  See main function

 Returns:
   zlStatusE

 Remarks:
   None

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

zlStatusE zl5011xContextAddChannelTxStructInit(zl5011xParamsS *zl5011xParams,
      zl5011xContextAddChannelTxS *par)
{
   zlStatusE status = ZL5011X_OK;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_TDM_FN_ID,
            "zl5011xContextAddChannelTxStructInit:",
            0, 0, 0, 0, 0, 0);

      par->context = (Uint32T)ZL5011X_INVALID_CONTEXT;
      par->tdm.stream = (Uint8T)ZL5011X_INVALID_STREAM;
      par->tdm.channel = (Uint8T)ZL5011X_INVALID_CHANNEL;
      par->checkChannelCombination = ZL5011X_TRUE;

      par->underrunMode = ZL5011X_WAN_USE_FIXED_BYTE;
      par->underrunByte = 0xff;

      par->osExclusionEnable = ZL5011X_TRUE;
   }

   return status;
}

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品美女在线观看| 日韩视频免费观看高清完整版 | 日韩欧美亚洲国产精品字幕久久久| 久久综合综合久久综合| 一区视频在线播放| 日韩欧美国产1| 日本高清视频一区二区| 经典三级在线一区| 亚洲免费看黄网站| 久久九九国产精品| 91精品国产综合久久久久久漫画| 99vv1com这只有精品| 久久精品国产一区二区| 一个色在线综合| 中文字幕一区二区三区乱码在线 | 处破女av一区二区| 日韩精品成人一区二区在线| 国产精品成人一区二区三区夜夜夜| 91精品国产综合久久国产大片| 91一区二区在线| 国产91在线看| 国产一区二区精品在线观看| 日韩精品一卡二卡三卡四卡无卡| 亚洲欧美日韩精品久久久久| 亚洲国产精品成人综合色在线婷婷 | 91国偷自产一区二区使用方法| 国产精品亚洲一区二区三区妖精| 人妖欧美一区二区| 亚洲综合清纯丝袜自拍| 一区二区三区在线视频免费观看 | 全国精品久久少妇| 亚洲bt欧美bt精品| 一区二区三区精品视频在线| 最近中文字幕一区二区三区| 国产精品麻豆网站| 国产精品麻豆视频| 国产精品欧美久久久久一区二区| 国产亲近乱来精品视频 | 日韩国产欧美在线播放| 亚洲国产精品一区二区久久恐怖片 | 欧美私人免费视频| 91福利精品第一导航| 日本韩国欧美一区二区三区| 成人免费高清在线观看| 成人影视亚洲图片在线| 成人性生交大片免费看中文网站| 国产精品亚洲一区二区三区在线| 国产福利一区在线| 国产成人免费av在线| 成年人网站91| 91麻豆免费看片| 欧美性xxxxxxxx| 欧美日韩一区二区三区视频| 欧美午夜精品一区二区三区 | 国产精品久久久久一区| 中国色在线观看另类| 亚洲人成伊人成综合网小说| 亚洲伦理在线精品| 亚洲成人tv网| 日本亚洲电影天堂| 国模冰冰炮一区二区| 国产成人精品一区二| 不卡一区二区三区四区| 欧美中文一区二区三区| 欧美一区二区三区免费大片| 久久综合网色—综合色88| 亚洲国产激情av| 亚洲最新在线观看| 蜜臀国产一区二区三区在线播放 | 精品亚洲国内自在自线福利| 懂色av一区二区在线播放| 色婷婷亚洲综合| 日韩欧美成人午夜| 国产精品久久久久久久午夜片| 亚洲女子a中天字幕| 日韩av二区在线播放| 国产精品一区在线观看乱码 | 在线国产亚洲欧美| 91精品国产色综合久久ai换脸 | 欧美精品一区二区久久久| 国产精品久久久一本精品| 五月天一区二区| 成人性生交大片免费看视频在线 | 精品av久久707| 一区二区中文视频| 青青草国产成人av片免费| 成人精品鲁一区一区二区| 欧美日本不卡视频| 国产精品美女久久久久久久久| 午夜精品成人在线| 丁香六月久久综合狠狠色| 欧美三级中文字幕| 国产欧美一区二区精品婷婷| 图片区小说区区亚洲影院| 大桥未久av一区二区三区中文| 3d动漫精品啪啪| 中文字幕日本乱码精品影院| 日本大胆欧美人术艺术动态| 91小视频免费看| 久久一区二区视频| 亚洲成va人在线观看| 成人深夜福利app| 欧美一级二级三级蜜桃| 亚洲精品大片www| 国产成人av自拍| 日韩一区二区三区三四区视频在线观看| 国产精品久久久久9999吃药| 青青草原综合久久大伊人精品| 色视频成人在线观看免| 国产无遮挡一区二区三区毛片日本| 香蕉久久夜色精品国产使用方法 | 国产精品免费视频观看| 理论电影国产精品| 3d成人h动漫网站入口| 亚洲男人的天堂在线aⅴ视频 | 欧美一级精品大片| 亚洲精品久久7777| 成人av免费在线观看| 国产日韩精品一区二区三区| 久久se精品一区二区| 911精品国产一区二区在线| 亚洲精品成人精品456| jvid福利写真一区二区三区| 久久午夜羞羞影院免费观看| 免费人成精品欧美精品| 51午夜精品国产| 首页国产丝袜综合| 欧洲日韩一区二区三区| 亚洲欧洲制服丝袜| 91欧美激情一区二区三区成人| 国产精品久久一级| 成人黄色一级视频| 中文字幕av一区二区三区| 国产丶欧美丶日本不卡视频| 久久久激情视频| 成人免费视频一区| 亚洲国产精品黑人久久久| 成人一级视频在线观看| 中文在线一区二区| 国产精品69毛片高清亚洲| 国产日韩在线不卡| 成人高清免费观看| 综合久久久久久久| 91久久国产综合久久| 亚洲综合999| 欧美日韩国产美| 蜜臀av一级做a爰片久久| 欧美变态凌虐bdsm| 精品一区二区三区免费视频| 久久久噜噜噜久噜久久综合| 国产精品一区免费在线观看| 中文字幕欧美日韩一区| 不卡的看片网站| 亚洲色图欧美激情| 欧洲国产伦久久久久久久| 香蕉久久一区二区不卡无毒影院| 欧美一级欧美三级在线观看| 极品销魂美女一区二区三区| 久久久亚洲精品石原莉奈| 成人理论电影网| 亚洲乱码一区二区三区在线观看| 在线观看日韩一区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 色94色欧美sute亚洲线路一ni| 亚洲成人精品一区二区| 日韩亚洲欧美成人一区| 国产精品99久久久久久有的能看 | 色综合久久久久| 日韩电影一区二区三区| 久久九九99视频| 欧美日韩中文字幕一区二区| 美女视频一区二区三区| 中文字幕中文字幕中文字幕亚洲无线 | 国产电影精品久久禁18| 一区二区三区美女| 精品国产一区二区三区久久久蜜月| 成人爱爱电影网址| 天天操天天干天天综合网| 国产午夜亚洲精品羞羞网站| 欧美午夜电影网| 国产福利一区二区三区视频 | 1区2区3区欧美| 69久久99精品久久久久婷婷| 成人在线视频首页| 日韩成人免费电影| 最新高清无码专区| 久久亚洲一区二区三区明星换脸| 色丁香久综合在线久综合在线观看| 久久99精品久久久久婷婷| 亚洲乱码国产乱码精品精小说| 337p粉嫩大胆噜噜噜噜噜91av| 色屁屁一区二区| 国产激情一区二区三区| 午夜激情久久久| 日韩一区中文字幕| 久久久久久久综合日本| 欧美福利一区二区| 色综合欧美在线| 不卡视频一二三| 国产成人精品一区二区三区网站观看|