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

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

?? stacktsk.c

?? 單片機(jī)c語言程序設(shè)計(jì)100例--基于PIC+PROTEUS
?? C
字號(hào):
/*********************************************************************
 *
 *               Microchip TCP/IP Stack FSM Implementation on PIC18
 *
 *********************************************************************
 * FileName:        StackTsk.c
 * Dependencies:    StackTsk.H
 *                  ARPTsk.h
 *                  MAC.h
 *                  IP.h
 *                  ICMP.h
 *                  Tcp.h
 *                  http.h
 * Processor:       PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F
 * Complier:        Microchip C18 v3.02 or higher
 *					Microchip C30 v2.01 or higher
 * Company:         Microchip Technology, Inc.
 *
 * Software License Agreement
 *
 * This software is owned by Microchip Technology Inc. ("Microchip") 
 * and is supplied to you for use exclusively as described in the 
 * associated software agreement.  This software is protected by 
 * software and other intellectual property laws.  Any use in 
 * violation of the software license may subject the user to criminal 
 * sanctions as well as civil liability.  Copyright 2006 Microchip
 * Technology Inc.  All rights reserved.
 *
 * This software is provided "AS IS."  MICROCHIP DISCLAIMS ALL 
 * WARRANTIES, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, NOT LIMITED 
 * TO MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND 
 * INFRINGEMENT.  Microchip shall in no event be liable for special, 
 * incidental, or consequential damages.
 *
 *
 * Author               Date        Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Nilesh Rajbharti     8/14/01     Original (Rev. 1.0)
 * Nilesh Rajbharti     2/9/02      Cleanup
 * Nilesh Rajbharti     5/22/02     Rev 2.0 (See version.log for detail)
 * Nilesh Rajbharti     12/5/02     Modified UDPProcess() and TCPProcess()
 *                                  to include localIP as third param.
 *                                  This was done to allow these functions
 *                                  to calculate checksum correctly.
 * Nilesh Rajbharti     7/26/04     Added code in StackTask() to not
 *                                  clear statically IP address if link is
 *                                  removed and DHCP module is disabled
 *                                  at runtime.
********************************************************************/

#define STACK_INCLUDE

#include "..\Include\StackTsk.h"
#include "..\Include\ARPTsk.h"
#include "..\Include\MAC.h"
#include "..\Include\IP.h"

#if defined(STACK_USE_TCP)
#include "..\Include\TCP.h"
#endif

#if defined(STACK_USE_HTTP_SERVER)
#include "..\Include\HTTP.h"
#endif

#if defined(STACK_USE_ICMP)
    #include "..\Include\ICMP.h"
#endif

#if defined(STACK_USE_UDP)
    #include "..\Include\UDP.h"
#endif

#if defined(STACK_USE_DHCP)
    #include "..\Include\DHCP.h"
#endif

	// myDHCPBindCount defined in MainDemo.c;  Used to force an IP 
	// address display update for IP Gleaning
    extern BYTE myDHCPBindCount;


/*
 * Stack FSM states.
 */
typedef enum _SM_STACK
{
    SM_STACK_IDLE,
    SM_STACK_MAC,
    SM_STACK_IP,
    SM_STACK_ICMP,
    SM_STACK_ICMP_REPLY,
    SM_STACK_ARP,
    SM_STACK_TCP,
    SM_STACK_UDP
} SM_STACK;
static SM_STACK smStack;

NODE_INFO remoteNode;



/*********************************************************************
 * Function:        void StackInit(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          Stack and its componets are initialized
 *
 * Side Effects:    None
 *
 * Note:            This function must be called before any of the
 *                  stack or its component routines are used.
 *
 ********************************************************************/
void StackInit(void)
{
    smStack                     = SM_STACK_IDLE;

#if defined(STACK_USE_IP_GLEANING) || defined(STACK_USE_DHCP)
    /*
     * If DHCP or IP Gleaning is enabled,
     * startup in Config Mode.
     */
    AppConfig.Flags.bInConfigMode = TRUE;

#endif

    MACInit();

    ARPInit();

#if defined(STACK_USE_UDP)
    UDPInit();
#endif

#if defined(STACK_USE_TCP)
    TCPInit();
#endif

}


/*********************************************************************
 * Function:        void StackTask(void)
 *
 * PreCondition:    StackInit() is already called.
 *
 * Input:           None
 *
 * Output:          Stack FSM is executed.
 *
 * Side Effects:    None
 *
 * Note:            This FSM checks for new incoming packets,
 *                  and routes it to appropriate stack components.
 *                  It also performs timed operations.
 *
 *                  This function must be called periodically to
 *                  ensure timely responses.
 *
 ********************************************************************/
void StackTask(void)
{
    static WORD dataCount;

#if defined(STACK_USE_ICMP)
    static BYTE data[MAX_ICMP_DATA_LEN];
    static WORD ICMPId;
    static WORD ICMPSeq;
#endif
    IP_ADDR tempLocalIP;


    union
    {
        BYTE MACFrameType;
        BYTE IPFrameType;
        ICMP_CODE ICMPCode;
    } type;


    BOOL lbContinue;

	do
    {
        lbContinue = FALSE;

        switch(smStack)
        {
        case SM_STACK_IDLE:
        case SM_STACK_MAC:

            if ( !MACGetHeader(&remoteNode.MACAddr, &type.MACFrameType) )
            {
                #if defined(STACK_USE_DHCP)
                    // Normally, an application would not include  DHCP module
                    // if it is not enabled. But in case some one wants to disable
                    // DHCP module at run-time, remember to not clear our IP
                    // address if link is removed.
                    if ( AppConfig.Flags.bIsDHCPEnabled )
                    {
                        if ( !MACIsLinked() )
                        {
							AppConfig.MyIPAddr.Val = 0x00000000ul;
                            AppConfig.Flags.bInConfigMode = TRUE;
                            DHCPReset();
                        }
                    }
                #endif

                break;
            }

            lbContinue = TRUE;
            if ( type.MACFrameType == MAC_IP )
                smStack = SM_STACK_IP;
            else if ( type.MACFrameType == MAC_ARP )
                smStack = SM_STACK_ARP;
            else
                MACDiscardRx();
            break;

        case SM_STACK_ARP:
            if ( ARPProcess() )
                smStack = SM_STACK_IDLE;
            break;

        case SM_STACK_IP:
            if ( IPGetHeader(&tempLocalIP,
                             &remoteNode,
                             &type.IPFrameType,
                             &dataCount) )
            {
                lbContinue = TRUE;
                if ( type.IPFrameType == IP_PROT_ICMP )
                {
                    smStack = SM_STACK_ICMP;

#if defined(STACK_USE_IP_GLEANING)
                    if(AppConfig.Flags.bInConfigMode && AppConfig.Flags.bIsDHCPEnabled)
                    {
                        /*
                         * Accoriding to "IP Gleaning" procedure,
                         * when we receive an ICMP packet with a valid
                         * IP address while we are still in configuration
                         * mode, accept that address as ours and conclude
                         * configuration mode.
                         */
                        if( tempLocalIP.Val != 0xffffffff )
                        {
                            AppConfig.Flags.bInConfigMode = FALSE;
							AppConfig.MyIPAddr = tempLocalIP;
							myDHCPBindCount--;
                        }
                    }
#endif
                }

#if defined(STACK_USE_TCP)
                else if ( type.IPFrameType == IP_PROT_TCP )
                    smStack = SM_STACK_TCP;
#endif

#if defined(STACK_USE_UDP)
                else if ( type.IPFrameType == IP_PROT_UDP )
                    smStack = SM_STACK_UDP;
#endif

                else	// Unknown/unsupported higher level protocol
                {
                    lbContinue = FALSE;
                    MACDiscardRx();

                    smStack = SM_STACK_IDLE;
                }
            }
            else	// Improper IP header version or checksum
            {
                MACDiscardRx();
                smStack = SM_STACK_IDLE;
            }
            break;

#if defined(STACK_USE_UDP)
        case SM_STACK_UDP:
            if ( UDPProcess(&remoteNode, &tempLocalIP, dataCount) )
                smStack = SM_STACK_IDLE;
            break;
#endif

#if defined(STACK_USE_TCP)
        case SM_STACK_TCP:
            if ( TCPProcess(&remoteNode, &tempLocalIP, dataCount) )
                smStack = SM_STACK_IDLE;
            break;
#endif

        case SM_STACK_ICMP:
            smStack = SM_STACK_IDLE;

#if defined(STACK_USE_ICMP)
            if ( dataCount <= (MAX_ICMP_DATA_LEN+8) )
            {
                if ( ICMPGet(&type.ICMPCode,
                             data,
                             (BYTE*)&dataCount,
                             &ICMPId,
                             &ICMPSeq) )
                {
					if ( type.ICMPCode == ICMP_ECHO_REQUEST )
					{
						lbContinue = TRUE;
						smStack = SM_STACK_ICMP_REPLY;
					}
                }
            }
#endif
            MACDiscardRx();
            break;

#if defined(STACK_USE_ICMP)
        case SM_STACK_ICMP_REPLY:
            if ( ICMPIsTxReady() )
            {
                ICMPPut(&remoteNode,
                        ICMP_ECHO_REPLY,
                        data,
                        (BYTE)dataCount,
                        ICMPId,
                        ICMPSeq);

                smStack = SM_STACK_IDLE;
            }
            break;
#endif

        }

    } while(lbContinue);

#if defined(STACK_USE_TCP)
    // Perform timed TCP FSM.
    TCPTick();
#endif


#if defined(STACK_USE_DHCP)
    /*
     * DHCP must be called all the time even after IP configuration is
     * discovered.
     * DHCP has to account lease expiration time and renew the configuration
     * time.
     */
    DHCPTask();

    if(DHCPIsBound())
        AppConfig.Flags.bInConfigMode = FALSE;

#endif
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
北岛玲一区二区三区四区| 午夜电影一区二区| 国产成人精品一区二| 国产三级久久久| 欧美一级视频精品观看| 青娱乐精品视频| 国产亚洲自拍一区| 99麻豆久久久国产精品免费优播| 中文字幕佐山爱一区二区免费| 欧美中文字幕亚洲一区二区va在线 | www.色综合.com| 亚洲免费观看高清完整版在线观看 | 一区二区三区精品在线观看| 欧美亚洲一区二区在线| 免费视频最近日韩| 中文字幕av一区二区三区免费看| 色悠悠亚洲一区二区| 日韩影院免费视频| 国产亚洲欧美激情| 91麻豆swag| 久久成人精品无人区| 亚洲三级久久久| 日韩一级二级三级| 暴力调教一区二区三区| 日韩成人dvd| 国产精品成人在线观看| 欧美一级久久久| 不卡的av中国片| 久久99国产精品成人| 亚洲欧美日韩国产另类专区| 日韩欧美在线一区二区三区| av在线播放一区二区三区| 日韩中文字幕区一区有砖一区 | 成人久久18免费网站麻豆| 亚洲午夜激情网页| 日本一区二区三区电影| 91精品国产综合久久久久久久久久| 国产精品中文字幕日韩精品| 亚洲妇女屁股眼交7| 欧美国产成人精品| 日韩欧美一级二级三级久久久| 91在线免费看| 国产乱码字幕精品高清av | 国产精品伦理在线| 日韩三级.com| 欧美日产在线观看| 99re6这里只有精品视频在线观看| 蜜桃视频一区二区三区在线观看| 亚洲欧洲av在线| 久久久久久免费网| 日韩丝袜美女视频| 欧美日韩精品免费观看视频| 97aⅴ精品视频一二三区| 韩日欧美一区二区三区| 首页国产欧美日韩丝袜| 亚洲女厕所小便bbb| 中文在线一区二区| 久久久亚洲国产美女国产盗摄 | 国产精品美女久久久久久| 日韩精品一区国产麻豆| 久久久久国产精品人| 欧美一区二区三区四区高清 | 日韩中文字幕1| 一级女性全黄久久生活片免费| 国产精品视频线看| 久久久国产精品午夜一区ai换脸| 日韩精品一区二区三区四区 | 色88888久久久久久影院野外 | 日本色综合中文字幕| 亚洲高清不卡在线观看| 亚洲成人av免费| 亚洲一区二区高清| 午夜一区二区三区在线观看| 一区二区三区在线视频免费观看 | 中文字幕av一区 二区| 久久精品亚洲精品国产欧美kt∨| 精品国产三级a在线观看| 精品久久免费看| 久久久精品国产免大香伊| 国产日韩精品视频一区| 中文字幕欧美激情一区| 成人欧美一区二区三区小说| 日韩理论片在线| 一区二区三区在线观看网站| 亚洲制服丝袜av| 午夜视频久久久久久| 免费xxxx性欧美18vr| 精品一区二区三区影院在线午夜 | 国产一区二区三区香蕉| 国产精品一区专区| 成人国产精品免费观看动漫| 91视频免费观看| 欧美精品乱码久久久久久| 日韩免费视频线观看| 日本一区二区视频在线| 亚洲欧美激情一区二区| 天堂资源在线中文精品| 久久99久国产精品黄毛片色诱| 国内外精品视频| 99久精品国产| 制服.丝袜.亚洲.另类.中文 | 欧美精品一卡二卡| 欧美一区二区三区日韩| 久久久蜜桃精品| 国产精品伦一区二区三级视频| 亚洲精品国产第一综合99久久| 香蕉久久一区二区不卡无毒影院 | 中文字幕国产一区二区| 亚洲影院在线观看| 韩国三级电影一区二区| 日本韩国精品在线| 欧美一区二区大片| 亚洲欧洲在线观看av| 午夜视频一区二区三区| 高清国产午夜精品久久久久久| 欧美最猛性xxxxx直播| 日韩欧美的一区| 一区二区三区四区视频精品免费| 久久精品国产在热久久| 99久久精品国产一区| 日韩欧美一区在线| 亚洲欧美电影一区二区| 蜜臀av性久久久久蜜臀aⅴ| 不卡影院免费观看| 日韩精品在线一区| 一区二区三区国产精品| 国产成人啪免费观看软件| 欧美精品在线一区二区三区| 国产精品系列在线| 久久成人免费网| 欧美日韩小视频| 中文字幕一区二| 国产精品一区二区三区乱码| 777xxx欧美| 亚洲综合成人在线| 成人动漫在线一区| 久久久久9999亚洲精品| 日韩精品电影在线观看| 在线观看成人小视频| 国产精品美日韩| 国产成人自拍在线| 欧美一级黄色录像| 亚洲第一久久影院| 色综合中文字幕| 国产精品久久免费看| 国产成人一级电影| 欧美大胆一级视频| 蜜臀精品久久久久久蜜臀| 欧美伊人久久久久久久久影院| 亚洲欧洲性图库| 成人免费观看男女羞羞视频| 久久久久国产精品麻豆| 韩国av一区二区三区四区| 91精品国产色综合久久不卡电影 | 亚洲精品在线一区二区| 亚洲国产婷婷综合在线精品| 色婷婷国产精品综合在线观看| 国产亚洲欧美在线| 国产另类ts人妖一区二区| 精品毛片乱码1区2区3区| 久久精品国内一区二区三区| 欧美成人官网二区| 狠狠网亚洲精品| 26uuu另类欧美亚洲曰本| 久久99精品国产| 亚洲精品在线一区二区| 国产一区二区三区视频在线播放| 26uuu精品一区二区| 国产酒店精品激情| 欧美激情一区在线| 成年人午夜久久久| 亚洲欧洲精品天堂一级| 色婷婷亚洲精品| 亚洲不卡av一区二区三区| 欧美一级片在线观看| 麻豆精品一区二区av白丝在线| 日韩欧美国产综合一区 | 亚洲国产精品视频| 欧美日韩www| 精品亚洲国内自在自线福利| 久久精子c满五个校花| 99久久久久免费精品国产| 亚洲码国产岛国毛片在线| 欧美日韩激情一区二区| 久久se精品一区精品二区| 欧美国产97人人爽人人喊| 91麻豆高清视频| 日韩av午夜在线观看| 久久夜色精品国产噜噜av| 99国产一区二区三精品乱码| 一区二区高清在线| 欧美草草影院在线视频| 成人黄色小视频| 亚洲成人免费在线观看| 精品国产人成亚洲区| 亚洲国产视频直播| 日韩免费视频一区| 成人18视频在线播放| 丝袜亚洲另类丝袜在线| 久久亚洲私人国产精品va媚药|