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

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

?? picslip.h

?? 《嵌入式系統 Web 服務器:TCP/IP Lean》
?? H
字號:
/* SLIP I/O functions for PIC Web server Copyright (c) Iosoft Ltd 2000
**
** This software is only licensed for distribution with the book 'TCP/IP Lean', 
** and may only be used for personal experimentation by the purchaser 
** of that book, on condition that this copyright notice is retained. 
** For commercial licensing, contact license@iosoft.co.uk
**
** This is experimental software; use it entirely at your own risk */

/* Revisions:
** v0.01 JPB 30/3/00 Functions extracted from PICWEB v0.14
*/

#define TXBUFFLEN  96       // Tx buffer
#define RXBUFFLEN  80       // Rx buffer: more than enough for a 32-byte Ping
#define RXHDR_LEN  40       // After header, data is checksummed on arrival

#define SLIP_END    0xc0    // SLIP escape codes
#define SLIP_ESC    0xdb
#define ESC_END     0xdc
#define ESC_ESC     0xdd

BYTE txbuff[TXBUFFLEN];     // Transmit buffer
int txin, txout;            // Buffer I/P and O/P counters
WORD txi2c;                 // Count of i2c bytes to be sent
BOOL txflag;                // Flag to start sending out Tx data

BYTE rxbuff[RXBUFFLEN];     // Receive buffer, I/O ptrs, and 'Rx full' flag
int rxin, rxout, rxcount;
BOOL rxflag;
BOOL modemflag;             // Flag to show modem command received

BOOL slipend;               // Flag to mark end of I/P SLIP message
BOOL checkflag;             // Checksum flag & byte values
BYTE checkhi, checklo;
BOOL rdcheckflag;           // Checksum for Rx data (excl. IP & TCP hdrs)
BYTE rdcheckhi, rdchecklo;
int dropcount;

/* Prototypes for this file */
int get_data(BYTE *ptr, int maxlen);
BOOL get_byte(BYTE &b);
BOOL get_word(WORD &w);
BOOL get_lword(LWORD &lw);
BOOL get_hexbyte(BYTE &val);
void discard_data(void);
BYTE getch_slip(void);
BOOL match_byte(BYTE b);
BOOL match_word(WORD w);
BOOL match_str(char *s);
void skip_space(void);
BOOL skip_byte();
BOOL skip_word();
BOOL skip_lword();
int check_str(char *s);
void check_byte(BYTE b);
void check_word(WORD w);
void check_lword(LWORD &lw);
void check_bytes(BYTE *dat, int len);
void put_byte(BYTE b);
void put_str(char *s);
void put_null(void);
void put_word(WORD w);
void put_nullw(void);
void put_lword(LWORD &lw);
void tx_start(void);
void tx_byte(BYTE b);
void tx_end(void);
void check_txbytes(int n);
BYTE read_txbuff(int &oset);
void write_txbuff(int &oset, BYTE &b);

/* Get incoming data in buffer; discard any buffer overflow */
int get_data(BYTE *ptr, int maxlen)
{
    BYTE b;
    int n=0;

    while (maxlen-- > 0 && get_byte(b))
    {
        *ptr++ = b;
        n++;
    }
    discard_data();
    return(n);
}

/* Discard incoming data */
void discard_data(void)
{
    while (!slipend)
        getch_slip();
}

/* Get an incoming byte value, return 0 if end of message */
BOOL get_byte(BYTE &b)
{
    b = getch_slip();
    return(!slipend);
}

/* Get an incoming word value, return 0 if end of message */
BOOL get_word(WORD &w)
{
    BYTE hi, lo;

    hi = getch_slip();
    lo = getch_slip();
    w = ((WORD)hi<<8) | (WORD)lo;
    return(!slipend);
}
/* Get an incoming lword value, return 0 if end of message */
BOOL get_lword(LWORD &lw)
{
    lw.b[3] = getch_slip();
    lw.b[2] = getch_slip();
    lw.b[1] = getch_slip();
    lw.b[0] = getch_slip();
    return(!slipend);
}

/* Get an incoming byte value as 1 or 2 hex characters */
BOOL get_hexbyte(BYTE &val)
{
    BYTE b;
    BOOL ok=0;

    val = 0;
    while (isxdigit(rxbuff[rxout]) && get_byte(b))
    {
        ok = 1;
        val <<= 4;
        if (b <= '9')
            val += b - '0';
        else
            val += (b-'A'+10) & 0xf;
    }
    return(ok);
}

/* Get a SLIP byte from buffer; if end, set flag */
BYTE getch_slip(void)
{
    BYTE b=0;

    slipend = rxout>=rxcount;
    if (!slipend)
    {
        b = rxbuff[rxout++];
        check_byte(b);
    }
    return(b);
}

/* Match an incoming byte value, return 0 not matched, or end of message */
BOOL match_byte(BYTE b)
{
    return(b==getch_slip() && !slipend);
}
/* Match an incoming byte value, return 0 not matched, or end of message */
BOOL match_word(WORD w)
{
    WORD inw;

    return(get_word(inw) && inw==w);
}
/* Match a string value, return 0 (and don't move O/P ptr) if not matched */
BOOL match_str(char *s)
{
    BOOL ok=1;
    int rxo;

    rxo = rxout;
    while (ok && *s)
        ok = match_byte(*s++);
    if (!ok)
        rxout = rxo;
}

/* Skip whitespace & ctrl chars in incoming data */
void skip_space(void)
{
    while (rxbuff[rxout] <= ' ')
        getch_slip();
}
/* Skip an incoming byte value, return 0 if end of message */
BOOL skip_byte()
{
    getch_slip();
    return(!slipend);
}
/* Skip an incoming byte value, return 0 if end of message */
BOOL skip_word()
{
    getch_slip();
    getch_slip();
    return(!slipend);
}
/* Skip an incoming byte value, return 0 if end of message */
BOOL skip_lword()
{
    getch_slip();
    getch_slip();
    getch_slip();
    getch_slip();
    return(!slipend);
}

/* Compute checksum of a string, return its length */
int check_str(char *s)
{
    char c;
    int n=0;

    while ((c = s[n])!=0)
    {
        check_byte(c);
        n++;
    }
    return(n);
}

/* Add byte to checksum value */
void check_byte(BYTE b)
{
    if (checkflag)
    {
        if ((checklo = b+checklo) < b)
        {
            if (++checkhi == 0)
                checklo++;
        }
    }
    else
    {
        if ((checkhi = b+checkhi) < b)
        {
            if (++checklo == 0)
                checkhi++;
        }
    }
    checkflag = !checkflag;
}
/* Add word to checksum value */
void check_word(WORD w)
{
    check_byte(w>>8);
    check_byte(w);
}
/* Add longword to checksum value */
void check_lword(LWORD &lw)
{
    check_byte(lw.b[3]);
    check_byte(lw.b[2]);
    check_byte(lw.b[1]);
    check_byte(lw.b[0]);
}

/* Add array of bytes to checksum value */
void check_bytes(BYTE *dat, int len)
{
    while (len--)
        check_byte(*dat++);
}

/* Start a transmission */
void tx_start(void)
{
    putchar(SLIP_END);
}

/* Encode and transmit a single SLIP byte */
void tx_byte(BYTE b)
{
    if (b==SLIP_END || b==SLIP_ESC)
    {
        putchar(SLIP_ESC);
        putchar(b==SLIP_END ? ESC_END : ESC_ESC);
    }
    else
        putchar(b);
}

/* End a transmission, start sending it out */
void tx_end(void)
{
    txflag = 1;
}

/* Send a byte out to the SLIP link, then add to checksum */
void put_byte(BYTE b)
{
    if (txin < TXBUFFLEN)
    {
        write_txbuff(txin, b);
        txin++;
    }
    check_byte(b);
}

/* Send a string out to the SLIP link, add to checksum */
void put_str(char *s)
{
    while (*s)
        put_byte(*s++);
}

/* Send a null out to the SLIP link */
void put_null(void)
{
    put_byte(0);
}

/* Send a word out to the SLIP link, then add to checksum */
void put_word(WORD w)
{
    put_byte(w >> 8);
    put_byte(w);
}

/* Send a null word out to the SLIP link */
void put_nullw(void)
{
    put_byte(0);
    put_byte(0);
}

void put_lword(LWORD &lw)
{
    put_byte(lw.b[3]);
    put_byte(lw.b[2]);
    put_byte(lw.b[1]);
    put_byte(lw.b[0]);
}

/* Compute checksum of Tx bytes, given count */
void check_txbytes(int n)
{
    while (n--)
    {
        check_byte(read_txbuff(txin));
        txin++;
    }
}

/* Read a byte from the Tx buffer */
BYTE read_txbuff(int &oset)
{
    return(txbuff[oset]);
}

/* Write a byte to the Tx buffer */
void write_txbuff(int &oset, BYTE &b)
{
    txbuff[oset] = b;
}

/* Rx interrupt handler */
#INT_RDA
void rx_handler(void)
{
    BYTE b;
    BOOL escflag;

    if (kbhit())                    // Make sure serial character received
    {
        if ((b = getchar()) == SLIP_ESC)
            escflag = 1;            // SLIP escape character?
        else if (b == SLIP_END)
        {                           // SLIP end-of-frame character?
            if (rxin > 0)
            {                       // If non-zero frame length..
                rxflag = 1;         // ..set Rx frame flag
                rxcount = rxin;     // Reset counter for new frame
                rxin = 0;
            }
        }                           // Modem command 'AT...<CR>'?
        else if (b=='\r' && rxbuff[0]=='A')
        {
            modemflag = 1;          // Set flag (can't be handled on interrupt)
            rxin = 0;
        }
        else                        // Normal SLIP character..
        {
            if (escflag)            // ..following an escape char?
                b = b==ESC_END ? SLIP_END : b==ESC_ESC ? SLIP_ESC : b;
            escflag = 0;
            if (rxin == RXHDR_LEN-1)
            {                       // If nearly at end of hdrs, reset checksum
                rdcheckhi = rdchecklo = 0;
                rdcheckflag = 0;
            }                       // If after headers, calculate checksum
            if (rxin >= RXHDR_LEN)
            {                       // Alternate between checksum bytes..
                if (rdcheckflag)
                {                   // Update lo byte value
                    if ((rdchecklo = b+rdchecklo) < b)
                    {               // If lo byte overflow, increment hi byte
                        if (++rdcheckhi == 0)
                            rdchecklo++;
                    }               // ..and maybe carry back to lo byte!
                }
                else
                {                   // Update hi byte value
                    if ((rdcheckhi = b+rdcheckhi) < b)
                    {               // If hi byte overflow, increment lo byte
                        if (++rdchecklo == 0)
                            rdcheckhi++;
                    }               // ..and maybe carry back to hi byte!
                }
                rdcheckflag = !rdcheckflag; // Next time, check other byte
            }
            if (rxin < RXBUFFLEN)   // Save char if room left in buffer
            {
                rxbuff[rxin++] = b;
            }
        }
    }
}
/* EOF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产美女主播视频一区| 91在线观看地址| 国产午夜亚洲精品理论片色戒| 日韩成人精品在线观看| 久久久美女毛片| 欧美羞羞免费网站| 国产精品一区二区在线观看网站| 久久伊人蜜桃av一区二区| 99久久伊人精品| 国产夫妻精品视频| 日韩精品一级中文字幕精品视频免费观看| 日韩一级黄色大片| 欧美在线短视频| 不卡的电视剧免费网站有什么| 一级日本不卡的影视| 日韩欧美国产精品一区| 91丝袜高跟美女视频| 国产在线观看一区二区| 亚洲国产精品天堂| 亚洲精品ww久久久久久p站| 久久久精品国产免大香伊| 欧美日韩国产高清一区二区| 91麻豆文化传媒在线观看| 国产精品一二三四| 精品一区二区三区在线播放视频 | 国产经典欧美精品| 婷婷综合另类小说色区| 亚洲日本va午夜在线影院| 欧美激情在线看| 国产欧美一区二区精品性色超碰| 精品国产99国产精品| 国产日韩欧美综合在线| 国产喷白浆一区二区三区| 国产视频一区二区在线| 国产欧美精品一区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲va天堂va国产va久| 丝袜国产日韩另类美女| 免费精品视频在线| 成人性生交大片免费看视频在线| 国产69精品久久777的优势| 色综合久久天天| 欧美人与性动xxxx| 久久久夜色精品亚洲| 一区二区三区自拍| 日韩av在线发布| 99精品欧美一区二区蜜桃免费| 日本韩国一区二区三区视频| 日韩天堂在线观看| 亚洲日本欧美天堂| 国内一区二区在线| 一本久久a久久精品亚洲| 日韩一区二区在线播放| 亚洲精品第1页| 91老司机福利 在线| 色偷偷久久人人79超碰人人澡| 日韩欧美国产综合一区 | 3d成人h动漫网站入口| 国产精品蜜臀av| 狠狠色丁香久久婷婷综合_中| 在线精品视频小说1| 中文字幕第一区二区| 美女网站在线免费欧美精品| 欧洲人成人精品| 中文子幕无线码一区tr| 精品一区二区日韩| 日韩欧美在线1卡| 日本特黄久久久高潮| 欧美日韩国产三级| 亚洲一本大道在线| 7777精品伊人久久久大香线蕉超级流畅 | 精品成人免费观看| 韩国三级中文字幕hd久久精品| 欧美成人精品高清在线播放| 亚洲国产精品久久久男人的天堂 | 免费一区二区视频| 中文字幕在线一区| 91豆麻精品91久久久久久| 日韩高清欧美激情| 精品精品欲导航| 粉嫩久久99精品久久久久久夜| 午夜精品视频在线观看| 欧美日韩国产成人在线免费| 蜜臀久久99精品久久久久久9| 日韩区在线观看| a在线欧美一区| 日韩高清国产一区在线| 国产精品福利一区二区三区| 在线观看视频91| 久久se精品一区精品二区| 国产精品剧情在线亚洲| 欧美精品免费视频| 成人亚洲一区二区一| 日韩二区在线观看| 中文字幕一区二区三区视频| 欧美高清hd18日本| 色屁屁一区二区| 成人黄色大片在线观看| 国产91在线观看丝袜| 亚洲一区二区三区激情| 久久亚洲综合色| 日韩免费高清av| 欧美一区二区视频在线观看2022 | 偷拍日韩校园综合在线| 国产精品福利一区二区| 久久精品男人的天堂| 欧美精品一区男女天堂| 欧美丰满少妇xxxxx高潮对白| 成人免费电影视频| 国产福利精品一区二区| 狠狠色丁香婷婷综合| 韩国成人在线视频| 懂色中文一区二区在线播放| 极品销魂美女一区二区三区| 日韩国产在线观看一区| 日本不卡中文字幕| 美女视频黄久久| 精品一区二区在线观看| 国产毛片精品一区| 成人av电影免费在线播放| a美女胸又www黄视频久久| 91福利国产精品| 欧美一区二区三区影视| 久久亚洲二区三区| 国产精品沙发午睡系列990531| 国产精品蜜臀av| 视频一区欧美精品| 国产精品69久久久久水密桃| 91污在线观看| 日韩欧美国产系列| 亚洲成va人在线观看| 国产伦精品一区二区三区免费| 色一情一乱一乱一91av| 日韩小视频在线观看专区| 日韩伦理av电影| 久久精品国产99国产| 91视频免费看| 久久人人97超碰com| 天天爽夜夜爽夜夜爽精品视频| 大美女一区二区三区| 91精品欧美一区二区三区综合在| 亚洲精品一区二区三区在线观看| 亚洲色欲色欲www| 国产精品自在在线| 欧美军同video69gay| 一区二区三区欧美日韩| 成人免费高清在线观看| 欧美精品一区二区三区一线天视频 | 亚洲精品伦理在线| 99久久久免费精品国产一区二区| 欧美成人精品3d动漫h| 天天爽夜夜爽夜夜爽精品视频| 色婷婷精品久久二区二区蜜臀av| 久久综合久久99| 国产成人精品三级| 久久久99精品久久| 色噜噜狠狠一区二区三区果冻| 精品处破学生在线二十三| 天天影视网天天综合色在线播放| 色综合久久久久| 夜夜揉揉日日人人青青一国产精品| av一本久道久久综合久久鬼色| 日韩伦理av电影| 欧美久久一二区| 夫妻av一区二区| 亚洲成人黄色小说| 精品毛片乱码1区2区3区| 成人午夜私人影院| 尤物视频一区二区| 精品国产1区二区| 99久久精品一区二区| 日本一区中文字幕| 国产精品久久久久久久久久久免费看 | 一本色道久久综合亚洲aⅴ蜜桃| 亚洲国产日韩a在线播放性色| 久久久蜜桃精品| 97se狠狠狠综合亚洲狠狠| 奇米在线7777在线精品| 国产精品剧情在线亚洲| 精品日韩一区二区三区| 欧美色综合久久| 国产精品一区不卡| 奇米888四色在线精品| 亚洲三级在线免费| 国产精品―色哟哟| 精品国产制服丝袜高跟| 91麻豆精品91久久久久同性| 91色综合久久久久婷婷| 国产乱码字幕精品高清av | 亚洲精品视频在线观看网站| 久久久久久久久久久久电影| 精品久久人人做人人爱| 国内精品国产成人国产三级粉色| 美日韩一区二区| 色94色欧美sute亚洲线路二 | 91精品国产综合久久久久久| 欧美午夜宅男影院| 久久综合久久鬼色| 国产精品视频看| 亚洲综合色噜噜狠狠|