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

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

?? hdlc.c

?? 聞停開發板視頻程序
?? C
字號:
//--------------------------------------------------------------------------
// Ip Stack
//--------------------------------------------------------------------------
// HDLC.C
//
// Member functions for the HDLC CLIENT and SERVER
//
// Author: Michael A. Denio
// Copyright 2001, 2004 by Texas Instruments Inc.
//-------------------------------------------------------------------------
#include <stkmain.h>
#include "hdlcif.h"

//-----------------------------------------------
// Static Functions used in callbacks
static void hdlcInput( PBM_Handle hPkt );
static void hdlcTimer( HANDLE hHDLC );

//-----------------------------------------------
// Shared Functions
static void hdlcSI( HANDLE hSI, uint Msg, UINT32 Aux, PBM_Handle hPkt );

//-----------------------------------------------
// HDLC Object

//-----------------------------------------------
// Max count for service list and max name length
#define HDLC_NAMESIZE          32

// HDLC Instance Structure
typedef struct _hdlc_instance {
    uint         Type;                      // Instance TYPE
#define HDLC_INST_SERVER        0x2501
#define HDLC_INST_CLIENT        0x2502
    uint         DevSerial;                 // Serial Device Index
    HANDLE       hPPP;                      // PPP Interface
    uint         Status;                    // Call status
    uint         pppFlags;                  // PPP Flags
    UINT32       cmap_out;                  // Sending CMAP
    UINT32       cmap_in;                   // Desired Rx CMAP
    char         Username[HDLC_NAMESIZE];   // Specified Username (client)
    char         Password[HDLC_NAMESIZE];   // Specified Password (client)
    IPN          IPServer;                  // Our IP address     (server)
    IPN          IPMask;                    // Our IP mask        (server)
    IPN          IPClient;                  // Client IP address  (server)
    } HDLC_INSTANCE;

//----------------------------------------------------------------------
// USER FUNCTIONS
//
// The following functions must be callable from outside the kernel.
// They use llEnter()/llExit().
//----------------------------------------------------------------------

//--------------------------------------------------------------
// hdlcNew()   USER FUNCTION
//
// Open HDLC in Client mode
//--------------------------------------------------------------
HANDLE hdlcNew( uint DevSerial, uint pppFlags, UINT32 ourcmap,
                char *Username, char *Password )
{
    HDLC_INSTANCE *pi = 0;

    // Enter kernel mode
    llEnter();

    // Validate arguments
    if( !DevSerial || !Username || !Password )
        goto ExitNew;

    // If size of Username or Password > HDLC_NAMESIZE,
    // then abort
    if( strlen(Username) >= HDLC_NAMESIZE
                         || strlen(Password) >= HDLC_NAMESIZE )
        goto ExitNew;

    // Allocate space for instance
    if( !(pi = mmAlloc(sizeof(HDLC_INSTANCE))) )
    {
        _TaskFlagLowResource = 1;
        goto ExitNew;
    }

    // Initialize Instance
    mmZeroInit( pi, sizeof(HDLC_INSTANCE) );
    pi->Type            = HDLC_INST_CLIENT;
    pi->DevSerial       = DevSerial;
    pi->pppFlags        = pppFlags;
    pi->cmap_out        = 0xFFFFFFFF;
    pi->cmap_in         = ourcmap;
    strcpy( pi->Username, Username );
    strcpy( pi->Password, Password );

    // Report padding requirements (2:header + 2:protocol) & 2:checksum
    IFSetPad( 4, 2 );

    // Open the serial device
    if( !llSerialOpenHDLC( pi->DevSerial, (HANDLE)pi, hdlcTimer, hdlcInput ) )
        goto FatalError;

    // Make sure the character escape map is correct
    llSerialHDLCPeerMap( pi->DevSerial, pi->cmap_out );

    // Start the PPP session now
    pi->hPPP = pppNew( pi, pi->pppFlags, 1500, 0, 0, 0,
                       pi->Username, pi->Password, pi->cmap_in,
                       (void(*)(HANDLE,uint,UINT32,PBM_Pkt*))&hdlcSI );
    if( !pi->hPPP )
    {
        llSerialCloseHDLC( pi->DevSerial );
FatalError:
        pi->Type = 0;
        mmFree(pi);
        pi = 0;
    }

ExitNew:
    // Exit kernel mode
    llExit();

    return( (HANDLE)pi );
}

//--------------------------------------------------------------
// hdlcFree()  USER FUNCTIION
//
// Close HDLC Client
//--------------------------------------------------------------
void hdlcFree( HANDLE hHDLC )
{
    HDLC_INSTANCE *pi = (HDLC_INSTANCE *)hHDLC;

    // Enter kernel mode
    llEnter();

    if( pi && (pi->Type==HDLC_INST_CLIENT || pi->Type==HDLC_INST_SERVER)  )
    {
        // This message will close PPP
        hdlcSI( hHDLC, SI_MSG_CALLSTATUS, SI_CSTATUS_DISCONNECT, 0 );

        // Zap the type
        pi->Type = 0;

        // Close the serial driver
        llSerialCloseHDLC( pi->DevSerial );

        // Free the instance
        mmFree( pi );
    }

    // Exit kernel mode
    llExit();
}

//--------------------------------------------------------------
// hdlcGetStatus()     USER FUNCTION
//
// Get the status of the HDLC Client
//--------------------------------------------------------------
uint hdlcGetStatus( HANDLE hHDLC )
{
    HDLC_INSTANCE *pi = (HDLC_INSTANCE *)hHDLC;
    uint status       = 0;

    // Enter kernel mode
    llEnter();

    // Get Status
    if( pi && (pi->Type==HDLC_INST_CLIENT || pi->Type==HDLC_INST_SERVER)  )
        status = pi->Status;

    // Exit kernel mode
    llExit();

    return( status );
}

//--------------------------------------------------------------
// hdlcsNew()  USER FUNCTION
//
// Open HDLC Server
//--------------------------------------------------------------
HANDLE hdlcsNew( uint DevSerial, uint pppFlags, UINT32 ourcmap,
                 IPN IPServer, IPN IPMask, IPN IPClient )
{
    HDLC_INSTANCE *pi = 0;

    // Enter kernel mode
    llEnter();

    // Validate arguments
    if( !DevSerial || !IPClient || !IPServer || !IPMask )
        goto ExitSNew;

    // Allocate space for instance
    if( !(pi = mmAlloc(sizeof(HDLC_INSTANCE))) )
    {
        _TaskFlagLowResource = 1;
        goto ExitSNew;
    }

    // Initialize Instance
    mmZeroInit( pi, sizeof(HDLC_INSTANCE) );
    pi->Type            = HDLC_INST_SERVER;
    pi->DevSerial       = DevSerial;
    pi->pppFlags        = pppFlags;
    pi->cmap_out        = 0xFFFFFFFF;
    pi->cmap_in         = ourcmap;
    pi->IPServer        = IPServer;
    pi->IPMask          = IPMask;
    pi->IPClient        = IPClient;

    // Report padding requirements (2:header + 2:protocol) & 2:checksum
    IFSetPad( 4, 2 );

    // Open the serial device
    if( !llSerialOpenHDLC( pi->DevSerial, (HANDLE)pi, hdlcTimer, hdlcInput ) )
        goto FatalErrorS;

    // Make sure the character escape map is correct
    llSerialHDLCPeerMap( pi->DevSerial, pi->cmap_out );

    // Start the PPP session now
    pi->hPPP = pppNew( pi, pi->pppFlags, 1500,
                       pi->IPServer, pi->IPMask, pi->IPClient,
                       0, 0, pi->cmap_in,
                       (void(*)(HANDLE,uint,UINT32,PBM_Pkt*))&hdlcSI );

    if( !pi->hPPP )
    {
        llSerialCloseHDLC( pi->DevSerial );
FatalErrorS:
        pi->Type = 0;
        mmFree(pi);
        pi = 0;
    }

ExitSNew:
    // Exit kernel mode
    llExit();

    return( (HANDLE)pi );
}

//----------------------------------------------------------------------
// STACK FUNCTIONS
//
// The following functions are Kernel Mode stack functions.
//----------------------------------------------------------------------

//--------------------------------------------------------------
// hdlcTimer()
//
// Dispatches timer ticks to the stack's PPP module
//--------------------------------------------------------------
static void hdlcTimer( HANDLE hHDLC )
{
    HDLC_INSTANCE *pi = (HDLC_INSTANCE *)hHDLC;

    if( pi && (pi->Type==HDLC_INST_CLIENT ||
        pi->Type==HDLC_INST_SERVER) && pi->hPPP )
        pppTimer( pi->hPPP );
}

//--------------------------------------------------------------
// hdlcInput()
//
// Dispatches packets to the stack's PPP module
//--------------------------------------------------------------
void hdlcInput( PBM_Handle hPkt )
{
    HDLC_INSTANCE *pi = 0;
    uint          Size;

    // If we were given a packet, our handle is the RX interface
    if( hPkt )
        pi = (HDLC_INSTANCE *)PBM_getIFRx(hPkt);

    // Verify what we were given
    if( !pi || (pi->Type!=HDLC_INST_CLIENT && pi->Type!=HDLC_INST_SERVER)  )
    {
        DbgPrintf(DBG_ERROR,"hdlcInput: Invalid Handle");
        goto ReturnPacket;
    }

    // Do a sanity check on the size
    Size = PBM_getValidLen(hPkt);
    if( Size < 7 )
    {
        DbgPrintf(DBG_ERROR,"hdlcInput: Bad Packet");
        goto ReturnPacket;
    }

    // Packet comes in as FF03(2), PROT(2), DATA(n), CHECKSUM(2)
    // We need to remove the FF03 and two byte checksum
    Size -= 4;
    PBM_setValidLen(hPkt,Size);
    PBM_setDataOffset(hPkt,PBM_getDataOffset(hPkt)+2);

/*
// Print out packet for debug
{
int i;
printf("rx: ");
for(i=0; i<Size; i++)
printf("%02x ",*(PBM_getDataBuffer(hPkt)+PBM_getDataOffset(hPkt)+i));
printf("\n");
}
*/

    // When closing, when can get here with a null PPP handle. (This
    // is because PPP must switch out of kernel mode to clean up any
    // installed routes.) Thus we make sure to only give the packet to
    // PPP when the PPP handle is valid.
    if( pi->hPPP )
    {
        pppInput( pi->hPPP, hPkt );
        return;
    }

ReturnPacket:
    if( hPkt )
         PBM_free(hPkt);
    return;
}

//--------------------------------------------------------------------
// SI Control Function
//--------------------------------------------------------------------
void hdlcSI( HANDLE hSI, uint Msg, UINT32 Aux, PBM_Handle hPkt )
{
    HDLC_INSTANCE       *pi = (HDLC_INSTANCE *)hSI;
    HANDLE              hTmp;
    uint                Offset,Size;
    UINT8               *pBuf;

    switch( Msg )
    {
    case SI_MSG_CALLSTATUS:
        // Update Connection Status
        pi->Status = (uint)Aux;
        if( Aux >= SI_CSTATUS_DISCONNECT )
        {
            // Close PPP - we clear the handle to make sure we
            // only call pppFree() once. (We may get multiple
            // disconnect messages - one from each protocol.)
            if( pi->hPPP )
            {
                hTmp = pi->hPPP;
                pi->hPPP = 0;
                pppFree( hTmp );
            }
        }
        break;

    case SI_MSG_PEERCMAP:
        // Update Out CMAP for Transmit
        pi->cmap_out = Aux;
        llSerialHDLCPeerMap( pi->DevSerial, Aux );
        break;

    case SI_MSG_SENDPACKET:
        if( !hPkt )
        {
            DbgPrintf(DBG_ERROR,"hdlcSI: No packet");
            break;
        }

        Offset = PBM_getDataOffset(hPkt);
        Size = PBM_getValidLen(hPkt);

        // Make sure packet is valid, room for protocol, room for checksum
        if( (Offset<4) || ((Offset+Size+2)>PBM_getBufferLen(hPkt)) )
        {
            DbgPrintf(DBG_ERROR,"hdlcSI: Bad packet");
            PBM_free( hPkt );
            break;
        }

/*
// Print out packet for debug
{
int i;
printf("tx: %02x %02x ",Aux/256,Aux%256);
for(i=0; i<Size; i++)
printf("%02x ",*(PBM_getDataBuffer(hPkt)+PBM_getDataOffset(hPkt)+i));
printf("\n");
}
*/

        // Add in 2 byte Protocol and 2 byte header. Also add in size for
        // 2 byte checksum. Note that the outgoing checksum is corrected
        // (calculated) by the serial driver.
        Offset -= 4;
        Size += 6;
        PBM_setDataOffset(hPkt, Offset );
        PBM_setValidLen(hPkt, Size );
        pBuf = PBM_getDataBuffer(hPkt)+Offset;
        *pBuf++ = 0xFF;
        *pBuf++ = 0x03;
        *pBuf++ = (UINT8)(Aux/256);
        *pBuf   = (UINT8)(Aux%256);

        // Send the buffer to the serial driver
        llSerialSendPkt( pi->DevSerial, hPkt );
        break;
    }
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲一区二区三区在线| 972aa.com艺术欧美| 日本aⅴ免费视频一区二区三区| 一区二区三区av电影| 亚洲va国产va欧美va观看| 精品一区二区在线视频| 波多野结衣中文字幕一区| 欧美揉bbbbb揉bbbbb| 日韩欧美123| 亚洲欧美日韩一区二区三区在线观看| 日韩高清在线电影| 在线免费视频一区二区| 久久综合久久99| 亚洲一区二区三区美女| 不卡大黄网站免费看| 一区二区三区在线播放| 欧美精品乱码久久久久久按摩| 国产精品久久毛片a| 久久精品噜噜噜成人88aⅴ | 久久福利视频一区二区| 久久综合九色综合欧美98| 9久草视频在线视频精品| 国产精品欧美极品| 国产精品一区在线观看你懂的| 成人免费在线播放视频| 国产很黄免费观看久久| 久久一二三国产| 在线免费不卡电影| 精彩视频一区二区三区| 亚洲精品国产第一综合99久久 | 麻豆精品精品国产自在97香蕉| 91麻豆国产香蕉久久精品| 国产欧美日韩另类一区| 国产在线精品视频| 精品国产91乱码一区二区三区 | 亚洲国产精品尤物yw在线观看| 99久久精品99国产精品| 亚洲777理论| 国产亲近乱来精品视频| 欧美老人xxxx18| 成人深夜视频在线观看| 亚洲手机成人高清视频| 色婷婷精品久久二区二区蜜臂av| 欧美经典一区二区| 9色porny自拍视频一区二区| 麻豆一区二区三区| 亚洲综合色婷婷| 国产片一区二区| 精品日韩欧美一区二区| 国产一区二区三区久久久| 亚洲综合视频在线| 日韩美女精品在线| 久久久99久久精品欧美| 午夜av电影一区| 精品欧美一区二区久久| 欧美午夜精品免费| 午夜影院在线观看欧美| 亚洲天堂福利av| 国产欧美日韩一区二区三区在线观看 | 777a∨成人精品桃花网| 极品尤物av久久免费看| 亚洲电影一级黄| 一区二区三区四区av| 国产精品福利影院| 国产精品美女久久久久aⅴ国产馆| 日韩欧美电影一二三| 日韩一二三区视频| 国产成人av一区二区| 久久精品国产成人一区二区三区| 日韩av高清在线观看| 午夜激情一区二区三区| 亚洲风情在线资源站| 亚洲福利视频一区| 视频一区欧美精品| 久久久久久毛片| 久久久777精品电影网影网 | 欧美成人女星排行榜| 日韩三区在线观看| 精品乱人伦一区二区三区| 欧美xxxxxxxxx| 久久亚洲一区二区三区明星换脸 | 欧美一区二区久久| 国产盗摄视频一区二区三区| 国产一区二区三区在线观看免费视频| 麻豆精品国产91久久久久久| 韩国视频一区二区| 亚洲图片自拍偷拍| 久久国产视频网| 国产精品影音先锋| 成人免费视频视频| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 精品亚洲porn| 国产精品性做久久久久久| 岛国av在线一区| 91久久香蕉国产日韩欧美9色| 极品销魂美女一区二区三区| 国产一区日韩二区欧美三区| 成人影视亚洲图片在线| 91在线观看免费视频| 在线看国产一区二区| 91精品国产综合久久久久久久久久 | 91精品国产色综合久久久蜜香臀| 日韩女优制服丝袜电影| 中文字幕欧美区| 亚洲一区在线视频观看| 久久国产视频网| 99久久久国产精品免费蜜臀| 欧美日韩你懂得| 久久久综合网站| 一区二区三国产精华液| 蜜臀久久久99精品久久久久久| 高清不卡一区二区在线| 首页国产丝袜综合| 国产成人精品三级| 在线精品观看国产| 精品欧美一区二区三区精品久久 | 国产午夜亚洲精品午夜鲁丝片| 日韩一区有码在线| 日本一区中文字幕| 成人精品视频一区| 欧美一二三区在线| 国产精品国产精品国产专区不片| 五月激情综合网| av午夜精品一区二区三区| 欧美日本不卡视频| 91精品国产乱| 亚洲色图一区二区三区| 免费欧美日韩国产三级电影| 不卡av在线免费观看| 日韩亚洲国产中文字幕欧美| 亚洲日本在线天堂| 国产一区二区三区久久久| 欧美日韩国产高清一区二区三区| 国产欧美日韩综合| 久久aⅴ国产欧美74aaa| 欧美日韩情趣电影| 亚洲美女一区二区三区| 国产一区二区三区蝌蚪| 欧美一级理论片| 亚洲国产精品麻豆| www.亚洲精品| 亚洲国产精品高清| 蜜臀久久99精品久久久画质超高清| 91久久国产综合久久| 国产精品毛片高清在线完整版 | 国产精品二区一区二区aⅴ污介绍| 青青草97国产精品免费观看 | 欧美一区二区三区不卡| 日本伊人精品一区二区三区观看方式| 大桥未久av一区二区三区中文| 精品奇米国产一区二区三区| 丝袜美腿成人在线| 欧美日精品一区视频| 亚洲女同一区二区| av亚洲精华国产精华精| 国产精品久久久久9999吃药| 国产精品一区二区久激情瑜伽| 日韩视频一区二区| 久久爱www久久做| 日韩一区二区三区免费看| 丝袜美腿亚洲一区| 91精品国产免费| 久久99日本精品| 欧美刺激脚交jootjob| 美洲天堂一区二卡三卡四卡视频| 在线不卡中文字幕| 首页综合国产亚洲丝袜| 91麻豆精品国产无毒不卡在线观看| 亚洲小说欧美激情另类| 欧美日韩一级二级三级| 日日嗨av一区二区三区四区| 欧美丰满嫩嫩电影| 人人狠狠综合久久亚洲| 日韩精品一区二区三区在线观看| 青青草国产精品97视觉盛宴| 精品国内片67194| 国产一区二区三区四区在线观看| 国产日产欧产精品推荐色| 成人夜色视频网站在线观看| 国产精品久久久久aaaa| 在线一区二区三区四区五区| 一区二区久久久| 69堂精品视频| 国产精品亚洲第一| 亚洲免费观看高清完整版在线| 欧美亚洲综合在线| 免费在线观看视频一区| 久久综合色天天久久综合图片| 国产成人亚洲综合a∨婷婷图片| 国产精品美女久久久久久久久 | 欧美男生操女生| 青青青爽久久午夜综合久久午夜| 精品国产伦理网| 成人h动漫精品一区二区| 亚洲综合在线观看视频| 日韩欧美美女一区二区三区| 成人午夜视频在线| 五月天激情综合| 欧美高清一级片在线观看| 欧美视频在线播放|