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

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

?? tcp_ip.c

?? Analog公司的ADSP_BF532上面實現以太網接口的源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
    *(WORD*)&TCP_TxFrame2[IP_FLAGS_FRAG_OFS] = 0;
    *(WORD*)&TCP_TxFrame2[IP_TTL_PROT_OFS] = swap_bytes((DEFAULT_TTL << 8) | PROT_TCP);
    *(WORD*)&TCP_TxFrame2[IP_HEAD_CHKSUM_OFS] = 0;
    memcpy( &TCP_TxFrame2[IP_SOURCE_OFS], &TCP_Local_IP, 4);
    memcpy( &TCP_TxFrame2[IP_DESTINATION_OFS], &TCP_RemoteIP, 4);
    *(WORD*)&TCP_TxFrame2[IP_HEAD_CHKSUM_OFS] = TCP_CalcChecksum(&TCP_TxFrame2[IP_VER_IHL_TOS_OFS], IP_HEADER_SIZE, 0);

    // TCP
    *(WORD*)&TCP_TxFrame2[TCP_SRCPORT_OFS] = swap_bytes(TCP_LocalPort);
    *(WORD*)&TCP_TxFrame2[TCP_DESTPORT_OFS] = swap_bytes(TCP_RemotePort);

    WriteDWBE(&TCP_TxFrame2[TCP_SEQNR_OFS], TCP_Seq_Nr);
    WriteDWBE(&TCP_TxFrame2[TCP_ACKNR_OFS], TCP_Ack_Nr);

    // data bytes to accept
    *(WORD*)&TCP_TxFrame2[TCP_WINDOW_OFS] = swap_bytes(MAX_TCP_RX_SIZE);

    // initalize checksum
    *(WORD*)&TCP_TxFrame2[TCP_CHKSUM_OFS] = 0;
    *(WORD*)&TCP_TxFrame2[TCP_URGENT_OFS] = 0;

    // if SYN, we want to use the MSS option
    if (TCPCode & TCP_CODE_SYN)
    {
        // TCP header length = 24
        *(WORD*)&TCP_TxFrame2[TCP_DATA_CODE_OFS] = swap_bytes(0x6000 | TCPCode);

        // MSS option
        *(WORD*)&TCP_TxFrame2[TCP_DATA_OFS] = swap_bytes(TCP_OPT_MSS);

        // max. length of TCP-data we accept
        *(WORD*)&TCP_TxFrame2[TCP_DATA_OFS + 2] = swap_bytes(MAX_TCP_RX_SIZE);
        *(WORD*)&TCP_TxFrame2[TCP_CHKSUM_OFS] = TCP_CalcChecksum(&TCP_TxFrame2[TCP_SRCPORT_OFS], TCP_HEADER_SIZE + TCP_OPT_MSS_SIZE, 1);
        TCP_TxFrame2Size = ETH_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE + TCP_OPT_MSS_SIZE;
    }
    else
    {
        // TCP header length = 20
        *(WORD*)&TCP_TxFrame2[TCP_DATA_CODE_OFS] = swap_bytes(0x5000 | TCPCode);
        *(WORD*)&TCP_TxFrame2[TCP_CHKSUM_OFS] = TCP_CalcChecksum(&TCP_TxFrame2[TCP_SRCPORT_OFS], TCP_HEADER_SIZE, 1);
        TCP_TxFrame2Size = ETH_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE;
    }
    TCP_TransmitControl |= TCP_SEND_FRAME2;
}


/******************************************************************************
 * TCP_IP_STACK: TCP_Prep_TCP_DATA_FRAME()
 *
 * Purpose:
 *  prepares the TxFrame1-buffer to send a payload-packet
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_Prep_TCP_DATA_FRAME()
{
    // Ethernet
    memcpy( &TCP_TxFrame1[ETH_DA_OFS], &TCP_RemoteMAC, 6);
    memcpy( &TCP_TxFrame1[ETH_SA_OFS], &TCP_MyMAC, 6);
    *(WORD*)&TCP_TxFrame1[ETH_TYPE_OFS] = FRAME_IP;

    // IP
    *(WORD*)&TCP_TxFrame1[IP_VER_IHL_TOS_OFS] = swap_bytes(IP_VER_IHL | IP_TOS_D);
    *(WORD*)&TCP_TxFrame1[IP_TOTAL_LENGTH_OFS] = swap_bytes( IP_HEADER_SIZE + TCP_HEADER_SIZE + TCP_Tx_Data_Count);
    *(WORD*)&TCP_TxFrame1[IP_IDENT_OFS] = 0;
    *(WORD*)&TCP_TxFrame1[IP_FLAGS_FRAG_OFS] = 0;
    *(WORD*)&TCP_TxFrame1[IP_TTL_PROT_OFS] = swap_bytes((DEFAULT_TTL << 8) | PROT_TCP);
    *(WORD*)&TCP_TxFrame1[IP_HEAD_CHKSUM_OFS] = 0;
    memcpy( &TCP_TxFrame1[IP_SOURCE_OFS], &TCP_Local_IP, 4);
    memcpy( &TCP_TxFrame1[IP_DESTINATION_OFS], &TCP_RemoteIP, 4);
    *(WORD*)&TCP_TxFrame1[IP_HEAD_CHKSUM_OFS] = TCP_CalcChecksum(&TCP_TxFrame1[IP_VER_IHL_TOS_OFS], IP_HEADER_SIZE, 0);

    // TCP
    *(WORD*)&TCP_TxFrame1[TCP_SRCPORT_OFS] = swap_bytes(TCP_LocalPort);
    *(WORD*)&TCP_TxFrame1[TCP_DESTPORT_OFS] = swap_bytes(TCP_RemotePort);

    WriteDWBE(&TCP_TxFrame1[TCP_SEQNR_OFS], TCP_Seq_Nr);
    WriteDWBE(&TCP_TxFrame1[TCP_ACKNR_OFS], TCP_Ack_Nr);

    // TCP header length = 20
    *(WORD*)&TCP_TxFrame1[TCP_DATA_CODE_OFS] = swap_bytes(0x5000 | TCP_CODE_ACK | TCP_CODE_PSH);

    // data bytes to accept
    *(WORD*)&TCP_TxFrame1[TCP_WINDOW_OFS] = swap_bytes(MAX_TCP_RX_SIZE);
    *(WORD*)&TCP_TxFrame1[TCP_CHKSUM_OFS] = 0;
    *(WORD*)&TCP_TxFrame1[TCP_URGENT_OFS] = 0;
    *(WORD*)&TCP_TxFrame1[TCP_CHKSUM_OFS] = TCP_CalcChecksum(&TCP_TxFrame1[TCP_SRCPORT_OFS], TCP_HEADER_SIZE + TCP_Tx_Data_Count, 1);

}

/******************************************************************************
 * TCP_IP_STACK: CalcChecksum()
 *
 * Purpose:
 *  calculates the TCP/IP checksum. if 'IsTCP != 0', the TCP pseudo-header
 *  will be included.
 *
 * Actions:
 *
 *****************************************************************************/
MC WORD TCP_CalcChecksum(BYTE *Start, WORD Count, BYTE IsTCP)
{
    DWORD Sum = 0;

    // if we've a TCP frame...
    // ...include TCP pseudo-header
    if (IsTCP)
    {
        Sum += TCP_Local_IP[0];
        Sum += TCP_Local_IP[1];
        Sum += TCP_RemoteIP[0];
        Sum += TCP_RemoteIP[1];
        // TCP header length plus data length
        Sum += swap_bytes(Count);
        Sum += swap_bytes(PROT_TCP);
    }

    // sum words
    while (Count > 1)
    {
        //access data pointed to as WORD
        Sum += *(WORD*)Start;

        // increment pointer and decrement count
        Start += 2;
        Count -= 2;
    }

    // add left-over byte, if any
    if (Count)
        Sum += *(BYTE*)Start;

    // fold 32-bit sum to 16 bits
    while (Sum >> 16)
        Sum = (Sum & 0xFFFF) + (Sum >> 16);

    return ~Sum;
}


/******************************************************************************
 * TCP_IP_STACK: TCP_StartRetryTimer()
 *
 * Purpose:
 *  starts the timer as a retry-timer (used for retransmission-timeout)
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_StartRetryTimer()
{
    TCP_Timer = 0;
    TCP_RetryCounter = TCP_MAX_RETRIES;
    TCP_Flags |= TCP_TIMER_RUNNING;
    TCP_Flags |= TCP_TIMER_TYPE_RETRY;
}


/******************************************************************************
 * TCP_IP_STACK: TCP_StartTimeWaitTimer()
 *
 * Purpose:
 *  starts the timer as a 'TIME_WAIT'-timer (used to finish a TCP-session)
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_StartTimeWaitTimer()
{
    TCP_Timer = 0;
    TCP_Flags |= TCP_TIMER_RUNNING;
    TCP_Flags &= ~TCP_TIMER_TYPE_RETRY;
}


/******************************************************************************
 * TCP_IP_STACK: TCP_RestartTimer()
 *
 * Purpose:
 *  restarts the timer
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_RestartTimer()
{
    TCP_Timer = 0;
}


/******************************************************************************
 * TCP_IP_STACK: TCP_StopTimer()
 *
 * Purpose:
 *  stops the timer
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_StopTimer()
{
    TCP_Flags &= ~TCP_TIMER_RUNNING;
}


/******************************************************************************
 * TCP_IP_STACK: TCP_HandleRetransmission()
 *
 * Purpose:
 *  if a retransmission-timeout occured, check which packet to resend.
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_HandleRetransmission()
{
    switch (TCP_LastFrameSent)
    {
        case ARP_REQUEST :
        {
            TCP_Prep_ARP_REQUEST();
            break;
        }
        case TCP_SYN_FRAME :
        {
            TCP_Prep_TCP_FRAME(TCP_CODE_SYN);
            break;
        }
        case TCP_SYN_ACK_FRAME :
        {
            TCP_Prep_TCP_FRAME(TCP_CODE_SYN | TCP_CODE_ACK);
            break;
        }
        case TCP_FIN_FRAME :
        {
            TCP_Prep_TCP_FRAME(TCP_CODE_FIN | TCP_CODE_ACK);
            break;
        }
        case TCP_DATA_FRAME :
        {
            TCP_TransmitControl |= TCP_SEND_FRAME1;
            break;
        }
    }
}


/******************************************************************************
 * TCP_IP_STACK: TCP_HandleTimeout()
 *
 * Purpose:
 *  if all retransmissions failed, close connection and indicate an error
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_HandleTimeout()
{
    TCP_StateMachine = CLOSED;

    if ((TCP_Flags & (TCP_ACTIVE_OPEN | TCP_IP_ADDR_RESOLVED)) == TCP_ACTIVE_OPEN)

        // indicate an error to user
        TCP_SocketStatus = TCP_SOCK_ERR_ARP_TIMEOUT;
    else
        TCP_SocketStatus = TCP_SOCK_ERR_TCP_TIMEOUT;

    // clear all flags
    TCP_Flags = 0;
}


/******************************************************************************
 * TCP_IP_STACK: TCP_Copy_Frame()
 *
 * Purpose:
 *  Copies prepared frame to LAN transmit buffer
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_Copy_Frame(WORD length, BYTE *Frame)
{
#ifndef USE_16_BITS
    DWORD *data_src = (DWORD*) Frame;
    DWORD *data_dst = LAN_tx_packet.data;
    int i;

    LAN_tx_packet.length = length;
    LAN_tx_packet.busy = 1;
    for (i=0; i<=(length>>2); i++)
        *data_dst++ = *data_src++;
    return;
#else
    WORD *data_src = (WORD*) Frame;
    WORD *data_dst = LAN_tx_packet.data;
    int i;

    LAN_tx_packet.length = length;
    LAN_tx_packet.busy = 1;
    for (i=0; i<=(length>>1); i++)
        *data_dst++ = *data_src++;
    return;
#endif
}

/******************************************************************************
 * TCP_IP_STACK: swap_bytes()
 *
 * Purpose:
 *  swaps lower 8bits with higher 8bits and vice versa
 *
 * Actions:
 *
 *****************************************************************************/
inline WORD swap_bytes(DWORD in)
{
    return ((in&0xff)<<8) | ((in&0xff00)>>8);
#if 0
    WORD rval;
    asm("r5 = %1.l (z); %1 >>=8; r5 <<=8; %0 = r5 |%1;"
        : "=D" (rval)
        : "D" (in)
        : "r5");
    return rval;
#endif
}


/******************************************************************************
 * TCP_IP_STACK: WriteDWBE()
 *
 * Purpose:
 *  swaps lower 8bits with higher 8bits and vice versa
 *
 * Actions:
 *
 *****************************************************************************/
inline void WriteDWBE(BYTE* Add, DWORD Data)
{
    *Add++ = Data >> 24;
    *Add++ = Data >> 16;
    *Add++ = Data >> 8;
    *Add = Data;
}

/******************************************************************************
 * TCP_IP_STACK: get_cyles()
 *
 * Purpose:
 *  returns --XXXX-- out of CYCLES register for ISN Generation
 *
 * Actions:
 *
 *****************************************************************************/
inline WORD get_cycles()
{
    WORD rval;
    asm("%0 = CYCLES; %0 >>= 9;"
        : "=D" (rval)
        :
        : );
    return rval;
}

// end-of-file

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久国产综合久久| 久久精品视频在线看| 久久综合视频网| 亚洲色图在线播放| 国产麻豆一精品一av一免费| 日本伦理一区二区| 国产午夜精品久久久久久久| 日韩综合小视频| 99久久久无码国产精品| 精品久久久久久久久久久久久久久久久| 综合在线观看色| 国产在线视频一区二区三区| 欧美视频精品在线观看| 国产精品久久久久永久免费观看| 蜜桃视频第一区免费观看| 日本韩国精品在线| 国产精品电影院| 国产精品一区2区| 欧美va亚洲va在线观看蝴蝶网| 亚洲福利视频导航| 色欧美日韩亚洲| 亚洲婷婷综合久久一本伊一区| 国产真实精品久久二三区| 91精品国产91久久久久久最新毛片 | 精品精品欲导航| 午夜成人免费视频| 欧美三片在线视频观看| 亚洲一级二级三级| 欧美性色综合网| 亚洲一区二区四区蜜桃| 一本色道a无线码一区v| 亚洲四区在线观看| 99精品视频一区| 一区二区三区在线视频观看58 | 国内久久精品视频| 日韩精品自拍偷拍| 韩国一区二区在线观看| 亚洲精品在线电影| 国产精品一区二区男女羞羞无遮挡| 精品国产露脸精彩对白| 黄网站免费久久| 国产人成一区二区三区影院| 国产成人丝袜美腿| 国产精品久久毛片av大全日韩| 99精品国产99久久久久久白柏| 中文字幕一区二区三区av| 91在线看国产| 亚洲国产精品一区二区久久| 欧美日韩精品久久久| 奇米影视一区二区三区小说| 日韩精品一区二区三区四区| 国产麻豆精品一区二区| 国产精品乱码人人做人人爱 | 国产一区二区免费在线| 国产精品蜜臀在线观看| 在线观看欧美精品| 免费看欧美女人艹b| 国产欧美精品在线观看| 99精品黄色片免费大全| 爽好多水快深点欧美视频| 欧美v国产在线一区二区三区| 国产高清亚洲一区| 亚洲午夜视频在线观看| 日韩免费视频一区| 99国产精品久久久久久久久久久| 亚洲综合色视频| 久久综合久久综合九色| 91一区二区在线观看| 欧美aaaaaa午夜精品| 国产精品久久综合| 欧美精品在线观看播放| 成人在线一区二区三区| 亚洲成av人片一区二区梦乃| 国产亲近乱来精品视频| 欧美日本一区二区在线观看| 国产电影一区二区三区| 天天色天天操综合| 国产精品无码永久免费888| 欧美老人xxxx18| 成人av网址在线| 久久国产麻豆精品| 亚洲成人激情av| 国产精品久久久久久久久免费丝袜| 欧美日韩高清一区二区三区| 99久久精品情趣| 国产大陆精品国产| 日韩国产一区二| 亚洲精品久久7777| 欧美激情艳妇裸体舞| 日韩三级视频在线看| 在线日韩av片| 99在线精品视频| 国产激情视频一区二区三区欧美 | 欧美日韩一区 二区 三区 久久精品| 国产不卡视频一区二区三区| 蜜臀av一区二区三区| 亚洲一二三区在线观看| 国产精品久久久久影院| 久久久久久免费网| 精品久久久久久久久久久久久久久久久 | 精品日韩av一区二区| 欧美美女一区二区三区| 91官网在线观看| 色综合视频一区二区三区高清| 国产精品一区三区| 国内精品久久久久影院薰衣草| 三级久久三级久久久| 亚洲一二三四在线观看| 亚洲精品videosex极品| 中文字幕亚洲电影| 中文字幕一区免费在线观看| 欧美韩国日本不卡| 欧美国产日产图区| 国产欧美日韩麻豆91| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美一区二区三区日韩视频| 3d动漫精品啪啪1区2区免费| 欧美日韩午夜在线| 欧美日韩高清一区| 欧美精品久久久久久久多人混战 | 日韩精品电影一区亚洲| 亚洲国产欧美日韩另类综合| 亚洲第一电影网| 日本va欧美va精品发布| 蜜臀av一区二区在线免费观看| 老汉av免费一区二区三区 | 91色porny在线视频| 色综合天天综合色综合av| 欧美性猛片aaaaaaa做受| 欧美日韩一级黄| 日韩免费视频一区| 中文字幕第一区二区| 亚洲精品va在线观看| 日韩一区欧美二区| 国产尤物一区二区在线| 国产成人精品亚洲777人妖| www..com久久爱| 色偷偷久久一区二区三区| 欧美精品1区2区3区| 精品88久久久久88久久久| 亚洲视频一区二区在线观看| 香蕉成人啪国产精品视频综合网| 蜜桃视频第一区免费观看| 成人午夜视频在线| 欧美情侣在线播放| 久久精品视频免费| 一区二区三区欧美日| 蜜臀久久99精品久久久久久9| 国产一区二区久久| 在线观看日韩毛片| 久久久不卡网国产精品二区| 亚洲免费资源在线播放| 六月丁香婷婷久久| 一本色道a无线码一区v| 精品国产乱码久久久久久浪潮| 中文字幕一区二区三区在线观看| 香蕉久久一区二区不卡无毒影院| 精品一区二区三区欧美| 色就色 综合激情| 亚洲精品一区二区三区影院| 一区二区理论电影在线观看| 九九**精品视频免费播放| 97久久精品人人做人人爽| 精品国产伦理网| 亚洲chinese男男1069| 成人黄色a**站在线观看| 6080午夜不卡| 亚洲与欧洲av电影| 成人精品视频.| 欧美精品一区二区三区蜜臀| 亚洲国产精品久久人人爱| 国产99精品国产| 精品少妇一区二区三区日产乱码| 亚洲综合一区二区三区| 国产99久久久久久免费看农村| 日韩视频国产视频| 午夜不卡av免费| 在线观看91视频| 亚洲男人的天堂一区二区| 国产福利一区在线观看| 精品久久国产97色综合| 三级欧美韩日大片在线看| 欧美羞羞免费网站| 亚洲六月丁香色婷婷综合久久| 风流少妇一区二区| 26uuu久久综合| 激情综合一区二区三区| 日韩精品一区二区三区老鸭窝| 亚洲国产精品精华液网站| 91色九色蝌蚪| 综合自拍亚洲综合图不卡区| 成人永久免费视频| 久久久蜜桃精品| 国内精品国产成人国产三级粉色 | 欧美日韩一区二区在线观看视频| 亚洲婷婷在线视频| 色素色在线综合| 夜夜嗨av一区二区三区中文字幕 | 久久你懂得1024| 免费人成黄页网站在线一区二区|