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

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

?? tcpip.c

?? An example of TCP/IP stuff on msp430, taken from slaa137.pdf.
?? C
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************** *****                                                        ***** *****  Name: tcpip.c                                         ***** *****  Ver.: 1.0                                             ***** *****  Date: November 2001                                   ***** *****  Auth: Andreas Dannenberg                              ***** *****  Func: implements the TCP/IP-stack and provides a      ***** *****        simple API to the user                          ***** *****                                                        ***** ******************************************************************//* $Id: tcpip.c,v 1.3 2003/11/25 14:28:20 coppice Exp $ */#include "cs8900.h"#include "tcpip.h"// easyWEB-API function// initalizes the LAN-controller, reset flags, starts timer-ISR// constantsconst unsigned int MyIP[] =                      // "MYIP1.MYIP2.MYIP3.MYIP4"{  MYIP_1 + (MYIP_2 << 8),                        // use 'unsigned int' to  MYIP_3 + (MYIP_4 << 8)                         // achieve word alignment};const unsigned int SubnetMask[] =                // "SUBMASK1.SUBMASK2.SUBMASK3.SUBMASK4"{  SUBMASK_1 + (SUBMASK_2 << 8),                  // use 'unsigned int' to  SUBMASK_3 + (SUBMASK_4 << 8)                   // achieve word alignment};const unsigned int GatewayIP[] =                 // "GWIP1.GWIP2.GWIP3.GWIP4"{  GWIP_1 + (GWIP_2 << 8),                        // use 'unsigned int' to  GWIP_3 + (GWIP_4 << 8)                         // achieve word alignment};// easyWEB's internal variablesTTCPStateMachine TCPStateMachine;                // perhaps the most important var at all ;-)TLastFrameSent LastFrameSent;                    // retransmission typeunsigned int ISNGenHigh;                         // upper word of our Initial Sequence Numberunsigned long TCPSeqNr;                          // next sequence number to sendunsigned long TCPUNASeqNr;                       // last unaknowledged sequence number                                                 // incremented AFTER sending dataunsigned long TCPAckNr;                          // next seq to receive and ack to send                                                 // incremented AFTER receiving dataunsigned char TCPTimer;                          // inc'd each 262msunsigned char RetryCounter;                      // nr. of retransmissions// properties of the just received frameunsigned int RecdFrameLength;                    // CS8900 reported frame lengthunsigned int RecdFrameMAC[3];                    // 48 bit MACunsigned int RecdFrameIP[2];                     // 32 bit IPunsigned int RecdIPFrameLength;                  // 16 bit IP packet length// the next 3 buffers must be word-aligned!// (here the 'RecdIPFrameLength' above does that)unsigned char TxFrame1[ETH_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE + MAX_TCP_TX_DATA_SIZE];unsigned char TxFrame2[ETH_HEADER_SIZE + MAX_ETH_TX_DATA_SIZE];unsigned char RxTCPBuffer[MAX_TCP_RX_DATA_SIZE]; // space for incoming TCP-dataunsigned int TxFrame1Size;                       // bytes to send in TxFrame1unsigned char TxFrame2Size;                      // bytes to send in TxFrame2unsigned char TransmitControl;unsigned char TCPFlags;// easyWEB-API global vars and flagsunsigned int TCPRxDataCount;                     // nr. of bytes rec'dunsigned int TCPTxDataCount;                     // nr. of bytes to sendunsigned int TCPLocalPort;                       // TCP portsunsigned int TCPRemotePort;unsigned int RemoteMAC[3];                       // MAC and IP of current TCP-sessionunsigned int RemoteIP[2];unsigned char SocketStatus;inline unsigned int SwapBytes(unsigned int Data){  return (Data >> 8) | (Data << 8);}void TCPLowLevelInit(void){  BCSCTL1 &= ~DIVA0;                             // ACLK = XT1 / 4 = 2 MHz  BCSCTL1 |= DIVA1;  TACTL = ID1 | ID0 | TASSEL0 | TAIE;            // stop timer, use ACLK / 8 = 250 kHz, gen. int.  TACTL |= MC1;                                  // start timer in continuous up-mode  _EINT();                                       // enable interrupts    Init8900();  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();    }}// 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){  unsigned int ActRxEvent;                       // copy of cs8900's RxEvent-Register  Write8900(ADD_PORT, PP_RxEvent);               // point to RxEvent  ActRxEvent = Read8900(DATA_PORT);              // read, implied skip the last frame  if (ActRxEvent & RX_OK)  {    if (ActRxEvent & RX_IA) ProcessEthIAFrame();    if (ActRxEvent & RX_BROADCAST) ProcessEthBroadcastFrame();  }  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) | TAR; // 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 CS8900 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())                                // CS8900 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 int TargetIP[2];  // next two words MUST be read with High-Byte 1st (CS8900 AN181 Page 2)  ReadHB1ST8900(RX_FRAME_PORT);                  // ignore RxStatus Word  RecdFrameLength = ReadHB1ST8900(RX_FRAME_PORT);// get real length of frame       DummyReadFrame8900(6);                         // ignore DA (FF-FF-FF-FF-FF-FF)  CopyFromFrame8900(&RecdFrameMAC, 6);           // store SA (for our answer)  if (ReadFrameBE8900() == FRAME_ARP)            // get frame type, check for ARP    if (ReadFrameBE8900() == HARDW_ETH10)        // Ethernet frame      if (ReadFrameBE8900() == FRAME_IP)         // check protocol        if (ReadFrameBE8900() == IP_HLEN_PLEN)   // check HLEN, PLEN          if (ReadFrameBE8900() == OP_ARP_REQUEST)          {            DummyReadFrame8900(6);               // ignore sender's hardware address            CopyFromFrame8900(&RecdFrameIP, 4);  // read sender's protocol address            DummyReadFrame8900(6);               // ignore target's hardware address            CopyFromFrame8900(&TargetIP, 4);     // read target's protocol address

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频一区二区| 91精品国产综合久久久久| wwww国产精品欧美| 亚洲18女电影在线观看| 色综合久久88色综合天天免费| 精品精品欲导航| 精品一区二区三区在线播放视频| 欧美天天综合网| 日本视频中文字幕一区二区三区| 欧美中文字幕亚洲一区二区va在线| 亚洲天堂福利av| 91视频观看视频| 亚洲一区二区欧美日韩| 欧美性高清videossexo| 五月天精品一区二区三区| 777午夜精品免费视频| 麻豆成人久久精品二区三区红| 91精品福利在线一区二区三区| 日本成人在线电影网| 欧美一区二区三区小说| 久久国产成人午夜av影院| 国产农村妇女毛片精品久久麻豆| 成人免费va视频| 天天影视色香欲综合网老头| 日韩视频一区在线观看| 不卡的电视剧免费网站有什么| 亚洲人妖av一区二区| 日韩欧美中文字幕制服| 国产成人在线免费| 日日夜夜免费精品| 国产区在线观看成人精品| 欧美三级视频在线播放| 精品制服美女久久| 亚洲精品第一国产综合野| 日韩欧美国产系列| 色噜噜狠狠一区二区三区果冻| 久久精品久久综合| 亚洲一区影音先锋| 国产欧美日韩在线| 日韩女优毛片在线| 欧美色国产精品| 欧美影院一区二区三区| 成人免费不卡视频| 国产成人在线观看| 国产另类ts人妖一区二区| 视频一区中文字幕| 亚洲国产美女搞黄色| 亚洲乱码一区二区三区在线观看| 欧美精品一区二区在线观看| 日韩一区和二区| 91麻豆精品91久久久久久清纯| 欧洲一区二区三区免费视频| 91年精品国产| 一本一道波多野结衣一区二区| 波多野结衣欧美| 不卡区在线中文字幕| 成人自拍视频在线观看| 成人18视频日本| 色综合久久天天| 91久久精品一区二区| 欧美日韩视频在线一区二区| www.欧美日韩国产在线| 色悠悠亚洲一区二区| 欧美日韩小视频| 欧美一区二区三级| 久久久一区二区| √…a在线天堂一区| 亚洲精品国产一区二区精华液| 亚洲欧美日韩国产综合在线| 午夜精品福利视频网站| 麻豆国产精品官网| eeuss鲁一区二区三区| 在线视频中文字幕一区二区| 欧美一区二区三区视频免费| 日韩午夜激情av| 亚洲蜜臀av乱码久久精品| 日本亚洲电影天堂| 成人小视频在线观看| 精品国产一区二区三区不卡| 一区二区久久久| 国产精品久久久久久久久免费丝袜| 亚洲免费资源在线播放| 奇米777欧美一区二区| www.视频一区| 精品久久久久一区二区国产| 亚洲一级在线观看| 国产福利精品导航| 日韩欧美中文字幕精品| 一级特黄大欧美久久久| 国产精品一二二区| 欧美精品第1页| 中文字幕高清不卡| 久久精品国产99国产| 91偷拍与自偷拍精品| 久久亚洲综合色一区二区三区| 亚洲国产精品一区二区www在线 | 色8久久精品久久久久久蜜 | 欧美少妇性性性| 中文字幕中文字幕中文字幕亚洲无线| 青青国产91久久久久久| 在线观看国产一区二区| 亚洲欧美日韩精品久久久久| 高清不卡一二三区| 国产清纯白嫩初高生在线观看91| 美女免费视频一区| 在线播放欧美女士性生活| 婷婷国产v国产偷v亚洲高清| 91精品1区2区| 亚洲精品老司机| 欧美日韩高清不卡| 亚洲gay无套男同| 日韩精品最新网址| 国产呦萝稀缺另类资源| 国产日韩欧美不卡在线| 国产成人免费9x9x人网站视频| 久久久久国产精品麻豆ai换脸 | 一区二区三国产精华液| 91啪九色porn原创视频在线观看| 日韩美女啊v在线免费观看| 一本色道综合亚洲| 91精品国产综合久久久久久漫画| 久久亚洲综合av| 成人av午夜影院| 亚洲午夜电影在线| 日韩欧美亚洲一区二区| 国产成人aaa| 国产精品123| 成人免费看的视频| 99视频精品在线| 91在线码无精品| 在线观看一区二区视频| 在线一区二区视频| 欧美三级一区二区| 欧美一级一级性生活免费录像| 在线播放一区二区三区| 日韩欧美激情在线| 欧美激情一二三区| 亚洲狼人国产精品| 男女男精品视频网| 国产乱人伦精品一区二区在线观看| 精品一区二区三区免费| 成人综合婷婷国产精品久久免费| 国产激情91久久精品导航| a在线播放不卡| 91精品国产日韩91久久久久久| 久久综合九色综合97_久久久| 亚洲国产精品二十页| 亚洲午夜电影在线观看| 美国毛片一区二区三区| 波多野结衣中文字幕一区二区三区| 在线观看三级视频欧美| 日韩亚洲欧美高清| 亚洲欧美另类久久久精品| 奇米一区二区三区| av在线综合网| 久久久久久久久久电影| 亚洲午夜激情网站| 春色校园综合激情亚洲| 这里只有精品电影| 日韩一区中文字幕| 经典三级在线一区| 欧美一区二区网站| 国产精品电影院| 国产成人一区在线| 91精品蜜臀在线一区尤物| 亚洲视频你懂的| 粉嫩绯色av一区二区在线观看| 日韩你懂的电影在线观看| 亚洲成人自拍网| 在线视频欧美区| 亚洲乱码一区二区三区在线观看| 免费观看30秒视频久久| 日本不卡在线视频| 国产一区二区三区四| 4438成人网| 午夜国产精品影院在线观看| 91看片淫黄大片一级在线观看| 久久伊人中文字幕| 国产一区91精品张津瑜| 日韩欧美123| 激情文学综合网| 久久久高清一区二区三区| 国产a久久麻豆| 国产精品美女久久久久久2018| 国产精品888| 亚洲国产高清在线| 不卡av在线免费观看| 亚洲丝袜精品丝袜在线| 91免费版pro下载短视频| 一区二区激情小说| 日韩一级高清毛片| 国产91在线看| 亚洲国产欧美在线| 精品日韩一区二区| 成人高清在线视频| 玉足女爽爽91| 精品少妇一区二区三区免费观看| 国产一区二区三区久久悠悠色av| 国产精品久久久久久久久免费丝袜 | 色综合激情久久|