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

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

?? tcpip.c

?? NXP產品LPC23XX的開發板的原文件,包含了源代碼,使用手冊,開發板線路圖
?? 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 <LPC23xx.h>      // Keil: Register definition file for LPC2378const unsigned char 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-ISRvoid TCPLowLevelInit(void){// Keil: Timer 0 is used for TCP retransmission control  T0MR0 = 3144000;                            // 262mSec
  T0MCR = 3;                                  // Interrupt and Reset on MR0
  T0TCR = 1;                                  // Timer0 Enable
  VICVectAddr4 = (unsigned int)TCPClockHandler;// set interrupt vector in 4
  VICIntEnable = 0x00000010;                  // Enable Timer0 Interrupt

  PCONP |= (1<<12);                           // Deliver clock to AD
  PINSEL1 = 0x00014000;                       // Enable AD0 and AD1 inputs

  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)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')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 connectionvoid 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;    }  }}// 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 sentvoid 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'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 notunsigned int IsBroadcast(void) {  unsigned short 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 eventsvoid 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) | (T0TC & 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;    }  }  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 framevoid ProcessEthBroadcastFrame(void){  unsigned short 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)void ProcessEthIAFrame(void){  unsigned short TargetIP[2];  unsigned char ProtocolType;  switch (ReadFrameBE_EMAC())                     // get frame type  {    case FRAME_ARP :                             // check for ARP    {      if ((TCPFlags & (TCP_ACTIVE_OPEN | IP_ADDR_RESOLVED)) == TCP_ACTIVE_OPEN)        if (ReadFrameBE_EMAC() == HARDW_ETH10)         // check for the right prot. etc.          if (ReadFrameBE_EMAC() == FRAME_IP)            if (ReadFrameBE_EMAC() == IP_HLEN_PLEN)              if (ReadFrameBE_EMAC() == OP_ARP_ANSWER)              {                TCPStopTimer();                       // OK, now we've the MAC we wanted ;-)                CopyFromFrame_EMAC(&RemoteMAC, 6);    // extract opponents MAC                TCPFlags |= IP_ADDR_RESOLVED;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美狂野另类xxxxoooo| 国产乱码精品1区2区3区| 色综合久久天天| 成人免费一区二区三区在线观看| 国产成人亚洲综合a∨婷婷图片 | 日韩一区二区三区电影| 丝袜国产日韩另类美女| 在线播放91灌醉迷j高跟美女 | 在线观看国产一区二区| 亚洲影院在线观看| 欧美日韩成人一区| 激情小说亚洲一区| 国产精品久久看| 欧美午夜精品电影| 美女一区二区三区在线观看| 精品国产第一区二区三区观看体验 | 不卡的看片网站| 亚洲欧洲韩国日本视频| 在线观看日韩精品| 久久国产精品99久久久久久老狼 | 99久久精品一区| 亚洲一区二区高清| 日韩欧美不卡在线观看视频| 国产福利电影一区二区三区| 亚洲欧洲精品一区二区精品久久久| 91福利小视频| 国产成人免费视频精品含羞草妖精 | 久久成人久久鬼色| 国产精品青草综合久久久久99| 色94色欧美sute亚洲线路一久| 亚洲成av人片在www色猫咪| 国产精品美女久久久久aⅴ国产馆| 成人av电影在线网| 日日夜夜精品视频免费| 欧美激情一区二区三区| 欧美日韩一区 二区 三区 久久精品| 激情综合网最新| 曰韩精品一区二区| 久久蜜桃一区二区| 欧美亚洲综合一区| 成人在线视频首页| 毛片av一区二区| 亚洲综合无码一区二区| 国产欧美日韩视频在线观看| 欧美日韩在线免费视频| 成人一区二区视频| 久久激情综合网| 性做久久久久久久免费看| 国产精品毛片大码女人| 日韩精品资源二区在线| 欧美性大战久久久| a级高清视频欧美日韩| 久久er99热精品一区二区| 亚洲一二三四久久| 日韩一区日韩二区| 国产校园另类小说区| 日韩精品中文字幕一区| 欧美日韩免费电影| 99视频一区二区| 成人av电影在线播放| 国产福利一区在线观看| 国产一区免费电影| 美女视频黄久久| 日韩激情一区二区| 亚洲一区二区精品视频| 一区二区三区资源| 亚洲欧美日韩中文播放 | 久久先锋影音av鲁色资源网| 在线综合+亚洲+欧美中文字幕| 色乱码一区二区三区88| 成人97人人超碰人人99| 国产成人激情av| 国产成人精品亚洲日本在线桃色 | 国产美女久久久久| 久久www免费人成看片高清| 日韩高清在线观看| 天堂av在线一区| 天使萌一区二区三区免费观看| 亚洲成人激情综合网| 午夜精品久久久久久久久久久| 亚洲精品综合在线| 一区二区三区色| 亚洲午夜久久久久久久久久久| 一区二区三区在线影院| 亚洲综合激情网| 亚洲成av人在线观看| 人人狠狠综合久久亚洲| 蜜桃一区二区三区在线观看| 欧美aaaaaa午夜精品| 麻豆91在线播放免费| 黑人巨大精品欧美黑白配亚洲| 国产一区二区三区综合| 国产69精品一区二区亚洲孕妇| 成人性生交大片免费看中文网站| 99久久综合精品| 欧美性欧美巨大黑白大战| 欧美午夜片在线看| 欧美一区日韩一区| 久久综合一区二区| 国产精品欧美久久久久无广告| 亚洲欧美在线aaa| 亚洲成人精品影院| 国产精品一区在线观看乱码 | 欧美三级在线播放| 久久久久久日产精品| 中文字幕一区在线观看视频| 依依成人精品视频| 秋霞午夜av一区二区三区| 国产乱子轮精品视频| 色综合久久久久综合体桃花网| 欧美日韩在线免费视频| 久久久久久久久久久久电影| 亚洲欧美一区二区视频| 日本午夜一本久久久综合| 国产精品系列在线播放| 一本大道久久a久久精二百| 制服丝袜av成人在线看| 中文字幕精品一区二区精品绿巨人| 一区二区三区国产| 国产在线播放一区二区三区| 99精品国产热久久91蜜凸| 欧美一级片在线看| 中文字幕亚洲一区二区av在线| 日本vs亚洲vs韩国一区三区二区 | 欧美一二三区在线| 国产精品不卡在线| 另类专区欧美蜜桃臀第一页| 97国产一区二区| 日韩欧美在线网站| 亚洲人吸女人奶水| 麻豆国产精品视频| 欧美系列亚洲系列| 国产精品色在线观看| 日韩va欧美va亚洲va久久| eeuss鲁片一区二区三区在线看| 91精品国产综合久久蜜臀| 国产精品国产三级国产aⅴ入口| 日韩制服丝袜先锋影音| 91视频观看免费| 国产午夜精品一区二区| 午夜精品视频一区| 91豆麻精品91久久久久久| 国产欧美日韩亚州综合| 久久se这里有精品| 91精品国产品国语在线不卡| 亚洲欧美日韩一区二区| 成人免费视频国产在线观看| 精品久久人人做人人爰| 亚洲成在人线在线播放| 色婷婷av一区| 亚洲视频一区二区在线| 成人性生交大片免费看在线播放| 日韩精品一区二区三区视频播放 | 国产精品天干天干在线综合| 久久国产日韩欧美精品| 91精品午夜视频| 亚洲成a人片综合在线| 色综合网色综合| 亚洲欧洲99久久| 99久久国产综合精品女不卡| 337p粉嫩大胆噜噜噜噜噜91av| 琪琪久久久久日韩精品| 91精品欧美福利在线观看| 五月天久久比比资源色| 欧美性猛交xxxxxx富婆| 亚洲影院免费观看| 欧美日韩一区二区三区免费看| 亚洲午夜激情网页| 欧美日韩免费视频| 亚洲第一av色| 91精品国产91久久久久久最新毛片| 国内精品久久久久影院一蜜桃| 制服丝袜亚洲精品中文字幕| 亚洲成在人线免费| 欧美一区二区三区成人| 蜜臀av一区二区在线免费观看 | 欧美精品久久天天躁| 丝袜亚洲另类欧美综合| 日韩午夜在线播放| 韩国女主播成人在线观看| 久久网站最新地址| 成人激情动漫在线观看| 国产精品传媒入口麻豆| 欧美中文字幕一二三区视频| 亚洲一区av在线| 日韩一区二区不卡| 国产夫妻精品视频| 亚洲欧洲av一区二区三区久久| 在线免费观看日本欧美| 亚洲va国产天堂va久久en| 91精品欧美综合在线观看最新| 久久综合综合久久综合| 国产蜜臀97一区二区三区| 99免费精品视频| 日日摸夜夜添夜夜添精品视频| 欧美不卡在线视频| av在线不卡免费看| 亚洲自拍偷拍麻豆| 精品国产自在久精品国产| 成+人+亚洲+综合天堂|