⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcp.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 000A 2C97              sbiw R28,12
 000C                   .dbline -1
 000C                   .dbline 147
 000C           ; 
 000C           ; //      TCP A                                                 TCP B
 000C           ; //  1.  CLOSED                                                LISTEN
 000C           ; //
 000C           ; //  2.  SYN-SENT    --> <SEQ=100><CTL=SYN>                --> SYN-RECEIVED
 000C           ; //  3.  ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK>   <-- SYN-RECEIVED
 000C           ; //  4.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK>       --> ESTABLISHED
 000C           ; //
 000C           ; //  5.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED
 000C           ; //  6.    etc
 000C           ; //
 000C           ; //
 000C           ; //
 000C           ; //  7.  FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>   --> CLOSE-WAIT
 000C           ; //  8.  FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>       <-- CLOSE-WAIT
 000C           ; //  9.  TIME-WAIT   <-- <SEQ=300><ACK=101><CTL=FIN,ACK>   <-- LAST-ACK
 000C           ; // 10.  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>       --> CLOSED
 000C           ; // 11.  (2 MSL)
 000C           ; //      CLOSED
 000C           ; 
 000C           ; /*
 000C           ;  * Copyright (C) 2003-2004 by Clive Moss All rights reserved.
 000C           ;  *
 000C           ;  * Help & Contributions from D.J.Armstrong
 000C           ; 
 000C           ;  * Redistribution and use in source and binary forms, with or without
 000C           ;  * modification, are permitted provided that the following conditions
 000C           ;  * are met:
 000C           ;  *
 000C           ;  * 1. Redistributions of source code must retain the above copyright
 000C           ;  *    notice, this list of conditions and the following disclaimer.
 000C           ;  * 2. Redistributions in binary form must reproduce the above copyright
 000C           ;  *    notice, this list of conditions and the following disclaimer in the
 000C           ;  *    documentation and/or other materials provided with the distribution.
 000C           ;  * 3. Neither the name of the copyright holders nor the names of
 000C           ;  *    contributors may be used to endorse or promote products derived
 000C           ;  *    from this software without specific prior written permission.
 000C           ;  *
 000C           ;  * THIS SOFTWARE IS PROVIDED BY CLIVE MOSS 'AS IS' AND ANY EXPRESS OR
 000C           ;  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 000C           ;  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 000C           ;  * ARE DISCLAIMED.
 000C           ;  * IN NO EVENT SHALL CLIVE MOSS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 000C           ;  * INDIRECT, INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 000C           ;  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 000C           ;  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 000C           ;  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 000C           ;  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
 000C           ;  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 000C           ;  * SUCH DAMAGE.
 000C           ;  */
 000C           ; 
 000C           ; //#ifdef CPU_eZ8
 000C           ; //    #pragma stkck                                                                   // enable stack checking
 000C           ; //#endif
 000C           ; 
 000C           ; #include <string.h>
 000C           ; #include <stdlib.h>
 000C           ; #include <stdio.h>
 000C           ; 
 000C           ; #include "common.h"
 000C           ; #include "ppp.h"
 000C           ; #include "ip.h"
 000C           ; #include "tcp.h"
 000C           ; 
 000C           ; #ifdef Debug
 000C           ; flash char    tcp_str1[]      =       "    TCPHdr: SrcPrt:";
 000C           ; flash char    tcp_str2[]      =       " DestPrt:";
 000C           ; flash char    tcp_str3[]      =       " SeqNum:";
 000C           ; flash char    tcp_str4[]      =       " AckNum:";
 000C           ; flash char    tcp_str5[]      =       " DataOfs:";
 000C           ; flash char    tcp_str6[]      =       " CBits:";
 000C           ; flash char    tcp_str7[]      =       "-URG";
 000C           ; flash char    tcp_str8[]      =       "-ACK";
 000C           ; flash char    tcp_str9[]      =       "-PSH";
 000C           ; flash char    tcp_str10[]     =       "-RST";
 000C           ; flash char    tcp_str11[]     =       "-SYN";
 000C           ; flash char    tcp_str12[]     =       "-FIN";
 000C           ; flash char    tcp_str13[]     =       " WinSize:";
 000C           ; flash char    tcp_str14[]     =       " Chksum:";
 000C           ; flash char    tcp_str15[]     =       " UrgPtr:";
 000C           ; flash char    tcp_str16[]     =       "    option:";
 000C           ; flash char    tcp_str17[]     =       "    DataBytes:";
 000C           ; flash char    tcp_str18[]     =       " Conn RESET\n";
 000C           ; flash char    tcp_str19[]     =       " Conn ACCEPTED\n";
 000C           ; flash char    tcp_str20[]     =       " Conn ESTABLISHED\n";
 000C           ; flash char    tcp_str21[]     =       " - BLOCKED\n";
 000C           ; 
 000C           ; flash char    tcp_str22[]     =       "TCP Skt State: ";
 000C           ; flash char    tcp_str23[]     =       "CLOSED\n";
 000C           ; flash char    tcp_str24[]     =       "LISTEN\n";
 000C           ; flash char    tcp_str25[]     =       "SYN_SENT\n";
 000C           ; flash char    tcp_str26[]     =       "SYN_RECEIVED\n";
 000C           ; flash char    tcp_str27[]     =       "ESTABLISHED\n";
 000C           ; flash char    tcp_str28[]     =       "FIN_WAIT_1\n";
 000C           ; flash char    tcp_str29[]     =       "FIN_WAIT_2\n";
 000C           ; flash char    tcp_str30[]     =       "CLOSE_WAIT\n";
 000C           ; flash char    tcp_str31[]     =       "CLOSING\n";
 000C           ; flash char    tcp_str32[]     =       "LAST_ACK\n";
 000C           ; flash char    tcp_str33[]     =       "TIME_WAIT\n";
 000C           ; flash char    tcp_str34[]     =       "UNKNOWN\n";
 000C           ; 
 000C           ; flash char    tcp_Str35[]     =       "*** failed to get mem for socket\n";
 000C           ; 
 000C           ; flash char    tcp_str40[]     =       "*** TCP chksum err\n";
 000C           ; 
 000C           ; flash char    TCP_Str50[]     =       "      Connect Time: ";
 000C           ; flash char    TCP_Str51[]     =       "      Last Rx Data: ";
 000C           ; flash char    TCP_Str52[]     =       "Their Max Seg Size: ";
 000C           ; flash char    TCP_Str53[]     =       "     Their Seq Num: ";
 000C           ; flash char    TCP_Str54[]     =       "       Our Seq Num: ";
 000C           ; flash char    TCP_Str55[]     =       "    Their Win Size: ";
 000C           ; flash char    TCP_Str56[]     =       "   Last Bytes Sent: ";
 000C           ; flash char    TCP_Str57[]     =       "          Their IP: ";
 000C           ; flash char    TCP_Str58[]     =       "       Remote Port: ";
 000C           ; flash char    TCP_Str59[]     =       "        Local Port: ";
 000C           ; flash char    TCP_Str60[]     =       "   Round Trip Time: ";
 000C           ; flash char    TCP_Str61[]     =       "           Retries: ";
 000C           ; flash char    TCP_Str62[]     =       "       Retry Timer: ";
 000C           ; flash char    TCP_Str63[]     =       "        TxBufferRd: ";
 000C           ; flash char    TCP_Str64[]     =       "        TxBufferWr: ";
 000C           ; flash char    TCP_Str65[]     =       "        RxBufferRd: ";
 000C           ; flash char    TCP_Str66[]     =       "        RxBufferWr: ";
 000C           ; #endif
 000C           ; 
 000C           ; #ifdef CPU_eZ8
 000C           ; near u16              TCP_TmpPort = 0;                                                                        // this is usedfor deciding what source port to use when making out going tcp connections
 000C           ; #endif
 000C           ; #ifdef CPU_ATmega128
 000C           ; u16                   TCP_TmpPort = 0;                                                                                //  "
 000C           ; #endif
 000C           ; 
 000C           ; #ifdef StaticTCPSocket
 000C           ; T_TCP_Socket  TCP_Static_Socket;                                                                      // static socket
 000C           ; T_TCP_Socket  *TCP_Socket = (T_TCP_Socket*)&TCP_Static_Socket;        // set the pointer to point to it
 000C           ; #else
 000C           ; T_TCP_Socket  *TCP_Socket = NULL;                                                                     // it'll be dynamically allocated
 000C           ; #endif
 000C           ; 
 000C           ; T_TCP_Header  *TCP_Header = NULL;                                                                     // points to the tcp header in a tx or rx packet
 000C           ; 
 000C           ; //*****************************************************************************************************
 000C           ; 
 000C           ; #ifdef Debug
 000C           ; 
 000C           ; void TCP_DisplayHeader(int HeaderIdx, int TotalBytes)
 000C           ; {     // display the tcp header details
 000C                   .dbline 175
 000C           ;       u8      b, type, len;
 000C           ;       int     i, j;
 000C           ;       u16     w;
 000C           ;       u32     dw;
 000C           ; 
 000C           ; /*
 000C           ;        0                   1                   2                   3
 000C           ;        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 000C           ;       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 000C           ;       |          Source Port          |       Destination Port        |
 000C           ;       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 000C           ;       |                        Sequence Number                        |
 000C           ;       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 000C           ;       |                    Acknowledgment Number                      |
 000C           ;       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 000C           ;       |  Data |           |U|A|P|R|S|F|                               |
 000C           ;       | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
 000C           ;       |       |           |G|K|H|T|N|N|                               |
 000C           ;       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 000C           ;       |           Checksum            |         Urgent Pointer        |
 000C           ;       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 000C           ;       |                    Options                    |    Padding    | < optional
 000C           ;       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 000C           ; */
 000C           ; 
 000C           ;       // display the header
 000C           ; 
 000C           ;       if (!SendDebugRStr(tcp_str1)) return;
 000C 00E0              ldi R16,<_tcp_str1
 000E 10E0              ldi R17,>_tcp_str1
 0010 0E940000          xcall _SendDebugRStr
 0014 0023              tst R16
 0016 09F4              brne L2
 0018                   .dbline 175
 0018 0EC2              xjmp L1
 001A           L2:
 001A                   .dbline 176
 001A           ;       sprintf((char*)ScratchPad, "%u", ntohs(TCP_Header->SourcePort));
 001A E0910400          lds R30,_TCP_Header
 001E F0910500          lds R31,_TCP_Header+1
 0022 0081              ldd R16,z+0
 0024 1181              ldd R17,z+1
 0026 0E940000          xcall _ntohs
 002A 1983              std y+1,R17
 002C 0883              std y+0,R16
 002E 20E0              ldi R18,<L4
 0030 30E0              ldi R19,>L4
 0032 00E0              ldi R16,<_ScratchPad
 0034 10E0              ldi R17,>_ScratchPad
 0036 0E940000          xcall _sprintf
 003A                   .dbline 177
 003A           ;       if (!SendDebugStr((char*)ScratchPad)) return;
 003A 00E0              ldi R16,<_ScratchPad
 003C 10E0              ldi R17,>_ScratchPad
 003E 0E940000          xcall _SendDebugStr
 0042 0023              tst R16
 0044 09F4              brne L5
 0046                   .dbline 177
 0046 F7C1              xjmp L1
 0048           L5:
 0048                   .dbline 179
 0048           ; 
 0048           ;       if (!SendDebugRStr(tcp_str2)) return;
 0048 00E0              ldi R16,<_tcp_str2
 004A 10E0              ldi R17,>_tcp_str2
 004C 0E940000          xcall _SendDebugRStr
 0050 0023              tst R16
 0052 09F4              brne L7
 0054                   .dbline 179
 0054 F0C1              xjmp L1
 0056           L7:
 0056                   .dbline 180
 0056           ;       sprintf((char*)ScratchPad, "%u", ntohs(TCP_Header->DestPort));
 0056 E0910400          lds R30,_TCP_Header
 005A F0910500          lds R31,_TCP_Header+1
 005E 0281              ldd R16,z+2
 0060 1381              ldd R17,z+3
 0062 0E940000          xcall _ntohs
 0066 1983              std y+1,R17
 0068 0883              std y+0,R16
 006A 20E0              ldi R18,<L4
 006C 30E0              ldi R19,>L4
 006E 00E0              ldi R16,<_ScratchPad
 0070 10E0              ldi R17,>_ScratchPad
 0072 0E940000          xcall _sprintf
 0076                   .dbline 181
 0076           ;       if (!SendDebugStr((char*)ScratchPad)) return;
 0076 00E0              ldi R16,<_ScratchPad
 0078 10E0              ldi R17,>_ScratchPad
 007A 0E940000          xcall _SendDebugStr
 007E 0023              tst R16
 0080 09F4              brne L9
 0082                   .dbline 181
 0082 D9C1              xjmp L1
 0084           L9:
 0084                   .dbline 183
 0084           ; 
 0084           ;       if (!SendDebugRStr(tcp_str3)) return;
 0084 00E0              ldi R16,<_tcp_str3
 0086 10E0              ldi R17,>_tcp_str3
 0088 0E940000          xcall _SendDebugRStr
 008C 0023              tst R16
 008E 09F4              brne L11
 0090                   .dbline 183
 0090 D2C1              xjmp L1
 0092           L11:
 0092                   .dbline 184
 0092           ;       dw = ntohl(TCP_Header->SequenceNum);
 0092 E0910400          lds R30,_TCP_Header
 0096 F0910500          lds R31,_TCP_Header+1
 009A 0481              ldd R16,z+4
 009C 1581              ldd R17,z+5
 009E 2681              ldd R18,z+6
 00A0 3781              ldd R19,z+7
 00A2 0E940000          xcall _ntohl
 00A6 FE01              movw R30,R28

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -