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

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

?? tcpip.c

?? 基于msp430的TCPIP協議棧包括源代碼和文檔說明
?? C
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************** *****                                                        ***** *****  Name: tcpip.c                                         ***** *****  Ver.: 1.0                                             ***** *****  Date: 07/05/2001                                      ***** *****  Auth: Andreas Dannenberg                              ***** *****        HTWK Leipzig                                    ***** *****        university of applied sciences                  ***** *****        Germany                                         ***** *****        adannenb@et.htwk-leipzig.de                     ***** *****  Func: implements the TCP/IP-stack and provides a      ***** *****        simple API to the user                          ***** *****                                                        ***** ******************************************************************/#include "tcpip.h"// easyWEB-API function// initalizes the LAN-controller, reset flags, starts timer-ISRvoid 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            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 CS8900's address filter// (individual addressed = IA)void ProcessEthIAFrame(void){  unsigned int TargetIP[2];  unsigned char ProtocolType;  // 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  CopyFromFrame8900(&RecdFrameMAC, 6);           // store SA (for our answer)  switch (ReadFrameBE8900())                     // get frame type  {    case FRAME_ARP :                             // check for ARP    {      if ((TCPFlags & (TCP_ACTIVE_OPEN | IP_ADDR_RESOLVED)) == TCP_ACTIVE_OPEN)        if (ReadFrameBE8900() == HARDW_ETH10)         // check for the right prot. etc.          if (ReadFrameBE8900() == FRAME_IP)            if (ReadFrameBE8900() == IP_HLEN_PLEN)              if (ReadFrameBE8900() == OP_ARP_ANSWER)              {                TCPStopTimer();                       // OK, now we've the MAC we wanted ;-)                CopyFromFrame8900(&RemoteMAC, 6);     // extract opponents MAC                TCPFlags |= IP_ADDR_RESOLVED;              }      break;    }    case FRAME_IP :                                        // check for IP-type    {      if ((ReadFrameBE8900() & 0xFF00 ) == IP_VER_IHL)     // IPv4, IHL=5 (20 Bytes Header)      {                                                    // ignore Type Of Service        RecdIPFrameLength = ReadFrameBE8900();             // get IP frame's length        ReadFrameBE8900();                                 // ignore identification        if (!(ReadFrameBE8900() & (IP_FLAG_MOREFRAG | IP_FRAGOFS_MASK)))  // only unfragm. frames

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩美女一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 一区二区三区在线播| 蜜桃av一区二区| 91麻豆视频网站| 日韩一区二区电影网| 亚洲素人一区二区| 狠狠网亚洲精品| 91麻豆精品国产91久久久| 国产精品国产a级| 国产精品一区二区你懂的| 欧美天堂亚洲电影院在线播放| 日本一二三不卡| 精品一区二区三区影院在线午夜| 91九色最新地址| 中文字幕第一区综合| 精品一区二区三区免费| 精品视频资源站| 亚洲女厕所小便bbb| 福利电影一区二区三区| 欧美哺乳videos| 美国欧美日韩国产在线播放| 欧美中文字幕一区二区三区亚洲| 国产精品白丝在线| 成人晚上爱看视频| 国产喂奶挤奶一区二区三区| 久久99国产精品尤物| 欧美日韩在线三级| 一个色综合网站| 色综合天天综合色综合av| 国产精品毛片久久久久久久| 国产精品一区二区三区乱码| 精品免费99久久| 国产一区美女在线| 精品不卡在线视频| 国产麻豆精品久久一二三| 精品粉嫩超白一线天av| 狠狠色丁香婷婷综合| 2021久久国产精品不只是精品| 日本va欧美va欧美va精品| 欧美一区二区福利视频| 奇米色一区二区| 日韩欧美一区在线| 国产呦萝稀缺另类资源| 久久精品无码一区二区三区| 国产精品亚洲а∨天堂免在线| 久久久亚洲高清| 成人h动漫精品一区二区| 国产精品成人在线观看| 色嗨嗨av一区二区三区| 五月天久久比比资源色| 日韩天堂在线观看| 国产乱对白刺激视频不卡| 国产精品午夜免费| 91视视频在线观看入口直接观看www| 亚洲人成在线观看一区二区| 91精品福利视频| 日本91福利区| 欧美国产欧美综合| 在线视频亚洲一区| 天天色 色综合| 欧美精品一区二区三区一线天视频| 国产一二精品视频| 亚洲激情图片一区| 欧美一区二区成人6969| 国产成人免费av在线| 亚洲精品一二三| 欧美电影免费观看高清完整版 | 国产成人精品免费| 中文字幕五月欧美| 69堂成人精品免费视频| 国产成人精品午夜视频免费| 一区二区日韩av| 久久久亚洲精品石原莉奈| 一本一道综合狠狠老| 六月丁香婷婷久久| 伊人开心综合网| 久久日一线二线三线suv| 91国产成人在线| 国产主播一区二区三区| 一区二区三区在线视频免费| 精品国产sm最大网站免费看| 色吧成人激情小说| 国产精品888| 亚洲成人av免费| 国产精品久久二区二区| 91精品国产aⅴ一区二区| 不卡免费追剧大全电视剧网站| 天天综合色天天| 亚洲天堂免费在线观看视频| 亚洲精品一区二区三区香蕉| 91电影在线观看| 高清免费成人av| 精品亚洲国产成人av制服丝袜 | 日本一不卡视频| ●精品国产综合乱码久久久久| 欧美va天堂va视频va在线| 在线亚洲一区二区| av中文字幕一区| 国产精品一二三四区| 日本三级韩国三级欧美三级| 亚洲激情中文1区| 国产精品美女久久福利网站| 欧美精品一区二区三区蜜桃| 91精品国产综合久久久蜜臀粉嫩| 91久久精品国产91性色tv| 99国产精品国产精品毛片| 国产a级毛片一区| 久久99久久99| 久久成人18免费观看| 日韩主播视频在线| 日韩高清中文字幕一区| 亚洲成人先锋电影| 亚洲va韩国va欧美va精品| 一区二区三区在线观看欧美| 亚洲欧美在线另类| 亚洲欧美日韩精品久久久久| 国产精品毛片久久久久久| 国产日韩欧美高清在线| 久久久亚洲欧洲日产国码αv| 精品免费日韩av| 久久精品一区二区| 国产欧美日本一区二区三区| 国产欧美一区二区在线观看| 日本一区二区三区四区| 中文字幕+乱码+中文字幕一区| 中文字幕 久热精品 视频在线| 欧美激情一区三区| 国产精品国产三级国产aⅴ无密码| 国产精品欧美久久久久一区二区| 国产精品成人一区二区艾草 | 亚洲欧美怡红院| 亚洲欧美偷拍另类a∨色屁股| 亚洲少妇中出一区| 亚洲影院免费观看| 青娱乐精品视频| 精品无人码麻豆乱码1区2区| 国产成人综合在线观看| 成人动漫一区二区| 欧美亚日韩国产aⅴ精品中极品| 欧美伊人精品成人久久综合97| 欧美精品乱码久久久久久| 精品三级av在线| 国产精品欧美精品| 亚洲成人动漫一区| 国产在线视频一区二区三区| 风流少妇一区二区| 欧美色成人综合| 精品久久久久香蕉网| 中文字幕视频一区| 亚洲成国产人片在线观看| 久久精品99国产精品日本| 丰满白嫩尤物一区二区| 欧美专区日韩专区| 久久久久国产精品麻豆| 亚洲精品一卡二卡| 男女男精品视频网| 伊人婷婷欧美激情| 久久99精品网久久| 91玉足脚交白嫩脚丫在线播放| 欧美精品在欧美一区二区少妇| 国产亚洲一二三区| 亚洲va欧美va天堂v国产综合| 狠狠色丁香婷综合久久| 欧美影院一区二区三区| 国产三级欧美三级| 午夜国产精品影院在线观看| 国产精品一区二区久久不卡| 欧美日产国产精品| 国产精品午夜在线观看| 美女视频一区在线观看| 日本久久一区二区| 国产日韩欧美激情| 奇米一区二区三区av| 在线视频你懂得一区| 国产免费观看久久| 久久疯狂做爰流白浆xx| 日本韩国精品在线| 国产精品久久久久久福利一牛影视| 日日摸夜夜添夜夜添国产精品| 91麻豆精品秘密| 国产精品免费aⅴ片在线观看| 男男成人高潮片免费网站| 欧美怡红院视频| 亚洲蜜臀av乱码久久精品 | 国产盗摄女厕一区二区三区| 欧美日韩免费观看一区二区三区 | 欧美一区二区三区视频免费播放| 国产精品国产三级国产普通话三级| 激情综合一区二区三区| 制服丝袜日韩国产| 亚洲成人免费观看| 色狠狠色狠狠综合| 亚洲美女区一区| 91性感美女视频| 亚洲乱码国产乱码精品精可以看| 成人精品视频一区二区三区| 国产欧美一区二区精品性色超碰| 黄色日韩网站视频| 久久精品一区二区三区不卡牛牛|