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

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

?? tcpip.c

?? 優龍LPC1788開發板資料
?? C
?? 第 1 頁 / 共 3 頁
字號:
/******************************************************************
 *****                                                        *****
 *****  Name: tcpip.c                                         *****
 *****  Ver.: 1.0                                             *****
 *****  Date: 07/05/2001                                      *****
 *****  Auth: Andreas Dannenberg                              *****
 *****        HTWK Leipzig                                    *****
 *****        university of applied sciences                  *****
 *****        Germany                                         *****
 *****  Func: implements the TCP/IP-stack and provides a      *****
 *****        simple API to the user                          *****
 *****                                                        *****
 ******************************************************************/

#include "tcpip.h"
#include "EMAC.h"         // Keil: Line added
#include <string.h>       // Keil: Line added
#include "LPC177x_8x.h"      // Keil: Register definition file for LPC2378
#include "lpc177x_8x_clkpwr.h"
#include "lpc177x_8x_pinsel.h"
#include "lpc177x_8x_timer.h"
#include "lpc177x_8x_nvic.h"
#include "lpc177x_8x_emac.h"

const uint8_t MyMAC[6] =   // "M1-M2-M3-M4-M5-M6"
{
  MYMAC_1, MYMAC_2, MYMAC_3,
  MYMAC_4, MYMAC_5, MYMAC_6
};

// easyWEB-API function
// initalizes the LAN-controller, reset flags, starts timer-ISR
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
void TCPLowLevelInit(void)
{
	Init_EMAC();

	TransmitControl = 0;
	TCPFlags = 0;
	TCPStateMachine = CLOSED;
	SocketStatus = 0;
}

// easyWEB-API function
// does a passive open (listen on 'MyIP:TCPLocalPort' for an incoming
// connection)
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
void TCPPassiveOpen(void)
{
  if (TCPStateMachine == CLOSED)
  {
    TCPFlags &= ~TCP_ACTIVE_OPEN;                // let's do a passive open!
    TCPStateMachine = LISTENING;
    SocketStatus = SOCK_ACTIVE;                  // reset, socket now active
  }
}

// easyWEB-API function
// does an active open (tries to establish a connection between
// 'MyIP:TCPLocalPort' and 'RemoteIP:TCPRemotePort')
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
void TCPActiveOpen(void)
{
  if ((TCPStateMachine == CLOSED) || (TCPStateMachine == LISTENING))
  {
    TCPFlags |= TCP_ACTIVE_OPEN;                 // let's do an active open!
    TCPFlags &= ~IP_ADDR_RESOLVED;               // we haven't opponents MAC yet

    PrepareARP_REQUEST();                        // ask for MAC by sending a broadcast
    LastFrameSent = ARP_REQUEST;
    TCPStartRetryTimer();
    SocketStatus = SOCK_ACTIVE;                  // reset, socket now active
  }
}

// easyWEB-API function
// closes an open connection
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
void TCPClose(void)
{
  switch (TCPStateMachine)
  {
    case LISTENING :
    case SYN_SENT :
    {
      TCPStateMachine = CLOSED;
      TCPFlags = 0;
      SocketStatus = 0;
      break;
    }
    case SYN_RECD :
    case ESTABLISHED :
    {
      TCPFlags |= TCP_CLOSE_REQUESTED;
      break;
    }
    default:
    	break;
  }
}

// easyWEB-API function
// releases the receive-buffer and allows easyWEB to store new data
// NOTE: rx-buffer MUST be released periodically, else the other TCP
//       get no ACKs for the data it sent
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
void TCPReleaseRxBuffer(void)
{
  SocketStatus &= ~SOCK_DATA_AVAILABLE;
}

// easyWEB-API function
// transmitts data stored in 'TCP_TX_BUF'
// NOTE: * number of bytes to transmit must have been written to 'TCPTxDataCount'
//       * data-count MUST NOT exceed 'MAX_TCP_TX_DATA_SIZE'
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
void TCPTransmitTxBuffer(void)
{
  if ((TCPStateMachine == ESTABLISHED) || (TCPStateMachine == CLOSE_WAIT))
    if (SocketStatus & SOCK_TX_BUF_RELEASED)
    {
      SocketStatus &= ~SOCK_TX_BUF_RELEASED;               // occupy tx-buffer
      TCPUNASeqNr += TCPTxDataCount;                       // advance UNA

      TxFrame1Size = ETH_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE + TCPTxDataCount;
      TransmitControl |= SEND_FRAME1;

      LastFrameSent = TCP_DATA_FRAME;
      TCPStartRetryTimer();
    }
}

// Reads the length of the received ethernet frame and checks if the
// destination address is a broadcast message or not
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
unsigned int IsBroadcast(void) {
  uint16_t RecdDestMAC[3];         // 48 bit MAC

  RecdFrameLength = StartReadFrame();

  CopyFromFrame_EMAC(&RecdDestMAC,  6);           // receive DA to see if it was a broadcast
  CopyFromFrame_EMAC(&RecdFrameMAC, 6);           // store SA (for our answer)

  if ((RecdDestMAC[0] == 0xFFFF) &&
      (RecdDestMAC[1] == 0xFFFF) &&
      (RecdDestMAC[2] == 0xFFFF)) {
    return(1);
  } else {
    return (0);
  }
}


// easyWEB's 'main()'-function
// must be called from user program periodically (the often - the better)
// handles network, TCP/IP-stack and user events
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
void DoNetworkStuff(void)
{
	if (CheckFrameReceived())                      // Packet received
	{
		if (IsBroadcast())
		{
			ProcessEthBroadcastFrame();
		} 
		else 
		{
			ProcessEthIAFrame();
		}
		
		EndReadFrame();                              // release buffer in ethernet controller
	}

	if (TCPFlags & TCP_TIMER_RUNNING)
	{
		if (TCPFlags & TIMER_TYPE_RETRY)
		{
			if (TCPTimer > RETRY_TIMEOUT)
			{
				TCPRestartTimer();                       // set a new timeout

				if (RetryCounter)
				{
					TCPHandleRetransmission();             // resend last frame
					RetryCounter--;
				}
				else
				{
					TCPStopTimer();
					TCPHandleTimeout();
				}
			}
		}
		else if (TCPTimer > FIN_TIMEOUT)
		{
			TCPStateMachine = CLOSED;
			TCPFlags = 0;                              // reset all flags, stop retransmission...
			SocketStatus &= SOCK_DATA_AVAILABLE;       // clear all flags but data available
		}
	}
	
	switch (TCPStateMachine)
	{
		case CLOSED :
		case LISTENING :
		{
			if (TCPFlags & TCP_ACTIVE_OPEN)            // stack has to open a connection?
			{
				if (TCPFlags & IP_ADDR_RESOLVED)         // IP resolved?
				{
					if (!(TransmitControl & SEND_FRAME2))  // buffer free?
					{
						TCPSeqNr = ((unsigned long)ISNGenHigh << 16) | (LPC_TIM0->TC & 0xFFFF);  // Keil: changed from TAR to T0TC;
						// set local ISN
						TCPUNASeqNr = TCPSeqNr;
						TCPAckNr = 0;                                       // we don't know what to ACK!
						TCPUNASeqNr++;                                      // count SYN as a byte

						PrepareTCP_FRAME(TCP_CODE_SYN);                     // send SYN frame

						LastFrameSent = TCP_SYN_FRAME;

						TCPStartRetryTimer();                               // we NEED a retry-timeout

						TCPStateMachine = SYN_SENT;
					}
				}
			}
			
			break;
		}
		
		case SYN_RECD :
		case ESTABLISHED :
		{
			if (TCPFlags & TCP_CLOSE_REQUESTED)                  // user has user initated a close?
			{
				if (!(TransmitControl & (SEND_FRAME2 | SEND_FRAME1)))   // buffers free?
				{   
					if (TCPSeqNr == TCPUNASeqNr)                          // all data ACKed?
					{
						TCPUNASeqNr++;

						PrepareTCP_FRAME(TCP_CODE_FIN | TCP_CODE_ACK);

						LastFrameSent = TCP_FIN_FRAME;

						TCPStartRetryTimer();

						TCPStateMachine = FIN_WAIT_1;
					}
				}
			}
			
			break;
		}
		case CLOSE_WAIT :
		{
			if (!(TransmitControl & (SEND_FRAME2 | SEND_FRAME1)))     // buffers free?
			{
				if (TCPSeqNr == TCPUNASeqNr)                            // all data ACKed?
				{
					TCPUNASeqNr++;                                        // count FIN as a byte

					PrepareTCP_FRAME(TCP_CODE_FIN | TCP_CODE_ACK);        // we NEED a retry-timeout

					LastFrameSent = TCP_FIN_FRAME;                        // time to say goodbye...

					TCPStartRetryTimer();

					TCPStateMachine = LAST_ACK;
				}
			}
			
			break;
		}
		
		default:
			break;
	}

	if (TransmitControl & SEND_FRAME2)
	{
		RequestSend(TxFrame2Size);

		if (Rdy4Tx())                                // NOTE: when using a very fast MCU, maybe
			SendFrame2();                              // the EMAC isn't ready yet, include
		else 
		{                                       // a kind of timer or counter here
			TCPStateMachine = CLOSED;
			SocketStatus = SOCK_ERR_ETHERNET;          // indicate an error to user
			TCPFlags = 0;                              // clear all flags, stop timers etc.
		}

		TransmitControl &= ~SEND_FRAME2;             // clear tx-flag
	}

	if (TransmitControl & SEND_FRAME1)
	{
		PrepareTCP_DATA_FRAME();                     // build frame w/ actual SEQ, ACK....
		RequestSend(TxFrame1Size);

		if (Rdy4Tx())                                // EMAC ready to accept our frame?
			SendFrame1();                              // (see note above)
		else 
		{
			TCPStateMachine = CLOSED;
			SocketStatus = SOCK_ERR_ETHERNET;          // indicate an error to user
			TCPFlags = 0;                              // clear all flags, stop timers etc.
		}

		TransmitControl &= ~SEND_FRAME1;             // clear tx-flag
	}
}

// easyWEB internal function
// handles an incoming broadcast frame
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
void ProcessEthBroadcastFrame(void)
{
  uint16_t TargetIP[2];

  if (ReadFrameBE_EMAC() == FRAME_ARP)           // get frame type, check for ARP
    if (ReadFrameBE_EMAC() == HARDW_ETH10)       // Ethernet frame
      if (ReadFrameBE_EMAC() == FRAME_IP)        // check protocol
        if (ReadFrameBE_EMAC() == IP_HLEN_PLEN)  // check HLEN, PLEN
          if (ReadFrameBE_EMAC() == OP_ARP_REQUEST)
          {
            DummyReadFrame_EMAC(6);              // ignore sender's hardware address
            CopyFromFrame_EMAC(&RecdFrameIP, 4); // read sender's protocol address
            DummyReadFrame_EMAC(6);              // ignore target's hardware address
            CopyFromFrame_EMAC(&TargetIP, 4);    // read target's protocol address
            if (!memcmp(&MyIP, &TargetIP, 4))    // is it for us?
              PrepareARP_ANSWER();               // yes->create ARP_ANSWER frame
          }
}

// easyWEB internal function
// handles an incoming frame that passed EMAC's address filter
// (individual addressed = IA)
/*********************************************************************//**
 * @brief		
 * @param[in]	
 * @return		
 **********************************************************************/
void ProcessEthIAFrame(void)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品77777竹菊影视小说| a级精品国产片在线观看| 精品一区二区三区不卡 | 成人av电影在线观看| 91福利社在线观看| 精品国产乱码久久久久久夜甘婷婷| 亚洲欧美中日韩| 精品无人码麻豆乱码1区2区| 91福利在线免费观看| 欧美国产精品一区二区三区| 日韩一区精品字幕| 色综合久久久久久久| 国产午夜精品久久久久久久| 奇米777欧美一区二区| 色播五月激情综合网| 国产蜜臀av在线一区二区三区| 亚洲www啪成人一区二区麻豆| 成人av在线网站| 欧美精品一区二区三区在线播放 | 国产suv一区二区三区88区| 欧美日韩久久久一区| 最新热久久免费视频| 国产成人日日夜夜| 日韩欧美久久久| 天天做天天摸天天爽国产一区| 99久久99久久综合| 国产精品视频第一区| 国产一区日韩二区欧美三区| 日韩一区二区麻豆国产| 午夜精品久久久久影视| 欧美主播一区二区三区| 一区二区三区在线免费观看 | 热久久免费视频| 3d成人h动漫网站入口| 石原莉奈在线亚洲三区| 制服丝袜中文字幕亚洲| 丝袜美腿一区二区三区| 精品污污网站免费看| 亚洲成av人片| 欧美一级生活片| 久久国产欧美日韩精品| 欧美videos中文字幕| 国产在线精品一区二区夜色| 久久综合九色欧美综合狠狠| 国产乱人伦偷精品视频不卡| 久久综合九色综合欧美98| 国产一区视频导航| 中文字幕第一页久久| av电影一区二区| 一区二区三区 在线观看视频| 在线观看网站黄不卡| 亚洲国产aⅴ天堂久久| 91精品蜜臀在线一区尤物| 美国av一区二区| 国产日韩欧美麻豆| 97se亚洲国产综合自在线| 一区二区三区成人在线视频 | 色综合天天综合色综合av| 一区二区在线看| 欧美日韩国产色站一区二区三区| 日韩电影在线观看电影| 2019国产精品| 色噜噜久久综合| 另类欧美日韩国产在线| 国产精品天干天干在观线| 日本乱码高清不卡字幕| 亚洲第一电影网| 国产亚洲欧洲997久久综合| 色欧美片视频在线观看| 免费观看91视频大全| 国产精品国产三级国产aⅴ无密码| 欧美曰成人黄网| 国产在线视频一区二区| 一区二区三区四区在线| 精品久久久久久久人人人人传媒 | 欧美一个色资源| 国产在线精品视频| 一级日本不卡的影视| 精品国产免费一区二区三区四区 | 91在线丨porny丨国产| 日韩av电影免费观看高清完整版 | 国产精品99久久久久久宅男| ●精品国产综合乱码久久久久| 欧美精选午夜久久久乱码6080| 国产精品自产自拍| 一区二区三区波多野结衣在线观看| 日韩欧美卡一卡二| 91官网在线免费观看| 韩国一区二区视频| 亚洲伊人色欲综合网| 国产视频不卡一区| 制服丝袜亚洲播放| 91麻豆免费看| 成人午夜av电影| 免播放器亚洲一区| 亚洲黄色av一区| 国产精品水嫩水嫩| 精品久久人人做人人爰| 欧美日韩亚洲综合在线| av中文一区二区三区| 国产综合色在线视频区| 午夜av一区二区| 综合在线观看色| 国产亚洲欧美日韩日本| 欧美mv日韩mv国产网站app| 欧美午夜在线一二页| 91在线国产福利| 成人激情黄色小说| 国产iv一区二区三区| 91在线免费视频观看| 成人激情校园春色| 国产一区二区免费在线| 看片的网站亚洲| 日韩高清不卡在线| 亚洲18影院在线观看| 香蕉av福利精品导航| 丝袜诱惑亚洲看片 | 国产精品第五页| 国产精品区一区二区三| 国产欧美一区二区精品秋霞影院 | 久久精品夜夜夜夜久久| 精品精品欲导航| 亚洲精品一区二区三区蜜桃下载| 精品国产亚洲在线| 久久尤物电影视频在线观看| 久久久久久久久99精品| xf在线a精品一区二区视频网站| 欧美一区二区久久| 日韩欧美不卡在线观看视频| 精品盗摄一区二区三区| 国产亚洲欧美色| 国产精品美女一区二区三区| 成人欧美一区二区三区白人| 亚洲精选视频免费看| 亚洲欧美日韩国产成人精品影院| 亚洲欧美偷拍另类a∨色屁股| 亚洲欧美电影一区二区| 亚洲自拍偷拍av| 免费高清视频精品| 国产精品1区2区3区| 97国产精品videossex| 欧美撒尿777hd撒尿| 日韩欧美一区在线| 久久精品综合网| 亚洲精品日日夜夜| 日韩精品久久理论片| 国产综合成人久久大片91| 成人av先锋影音| 欧美美女bb生活片| 久久久精品国产免大香伊| 亚洲人成7777| 麻豆一区二区在线| 成人一区二区三区视频在线观看 | 在线成人免费观看| 国产亚洲自拍一区| 亚洲午夜私人影院| 国产精品综合二区| 在线看日韩精品电影| 精品91自产拍在线观看一区| 自拍视频在线观看一区二区| 五月天一区二区三区| 国产传媒一区在线| 欧美日韩国产综合一区二区| 久久久亚洲欧洲日产国码αv| 亚洲精品欧美专区| 国产精品自在欧美一区| 欧美日韩专区在线| 国产精品久久久久影院亚瑟| 日本伊人色综合网| 99riav久久精品riav| 日韩精品一区国产麻豆| 亚洲精品亚洲人成人网| 国内外成人在线视频| 欧美日韩国产在线观看| 亚洲欧洲日韩女同| 国产一区二区三区日韩| 欧美日韩一级视频| 中文字幕欧美一| 国产精品一区二区男女羞羞无遮挡| 欧美日韩一区二区三区在线| 中文字幕一区二区三区四区| 国模娜娜一区二区三区| 欧美老人xxxx18| 亚洲男同性视频| 成人av资源网站| 国产欧美日韩卡一| 精品综合久久久久久8888| 欧美日韩亚州综合| 一区二区三区中文字幕精品精品 | 菠萝蜜视频在线观看一区| 日韩一级视频免费观看在线| 亚洲国产精品天堂| 色婷婷久久综合| 国产精品福利av| 99re热这里只有精品免费视频 | 亚洲欧美日韩国产一区二区三区| 国产高清无密码一区二区三区| 欧美mv日韩mv亚洲| 九九精品一区二区| 精品奇米国产一区二区三区|