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

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

?? wdbviodrv.c

?? vxworks的完整的源代碼
?? C
字號:
/* wdbVioDrv.c - virtual tty I/O driver for the WDB agent *//* Copyright 1994-2001 Wind River Systems, Inc. *//*modification history--------------------01j,18oct01,jhw  Fixed documentation build errors.01i,26feb99,jmp  canceled fixed for SPR #23898, reinstate the outputDone		 mechanism.01h,27jan99,dbt  modified event dequeue routine to never send NULL size VIO                 events (SPR #23898). Fixed the close routine (SPR #24654).01g,09aug96,ms   close now waits for output complete (SPR 6211).01f,24oct95,ms   don't send up more data than wdbCommMtu (SPR #5228).01e,14oct95,jdi  doc: cleanup.01d,01jun95,ms	 fixed vioInput01c,24may95,ms	 keep calling tyITx until it returns ERROR.01b,19may95,ms   one device, multiplexed on open().01a,08nov94,ms   written.*//*DESCRIPTIONThis library provides a psuedo-tty driver for use with the WDB debugagent.  I/O is performed on a virtual I/O device just like it is ona VxWorks serial device.  The difference is that the data is notmoved over a physical serial channel, but rather over a virtualchannel created between the WDB debug agent and the Tornado hosttools.The driver is installed with wdbVioDrv().  Individual virtual I/O channelsare created by opening the device (see wdbVioDrv for details).  Thevirtual I/O channels are defined as follows:.TStab(|);lf3 lf3l   l.Channel		| Usage_0		| Virtual console1-0xffffff	| Dynamically created on the host>= 0x1000000	| User defined.TEOnce data is written to a virtual I/O channel on the target, it is sentto the host-based target server.  The target server allows this data to besent to another host tool, redirected to the "virtual console," orredirected to a file.  For details see the.I Tornado User's Guide.*/#include "vxWorks.h"#include "ioLib.h"#include "iosLib.h"#include "tyLib.h"#include "stdlib.h"#include "stdio.h"#include "intLib.h"#include "rngLib.h"#include "taskLib.h"#include "wdb/wdb.h"#include "wdb/wdbLibP.h"#include "wdb/wdbEvtLib.h"#include "wdb/wdbVioLib.h"#include "wdb/wdbLibP.h"#define INBUF_SIZE		512#define OUTBUF_SIZE		512#define MAX_VIO_XFER_SIZE	512#define MAX_FLUSH_TRIES		60typedef struct    {    DEV_HDR	devHdr;			/* device header */    char        buf[MAX_VIO_XFER_SIZE]; /* temporary buffer */    } VIO_DEV;typedef struct    {    TY_DEV	tyDev;			/* input/output buffers, etc */    WDB_VIO_NODE vioNode;		/* VIO device list node */    WDB_EVT_NODE eventNode;		/* RPC event list node */    VIO_DEV *	pVioDev;		/* device handle */    BOOL	outputDone;		/* done with output */    BOOL	vioChannelIsClosed;	/* VIO channel is closed */    } VIO_CHANNEL_DESC;static int vioDrvNum;           /* driver number assigned to this driver *//* forward declarations */static int     vioOpen		 (VIO_DEV *pDev, char * name, int mode);static STATUS  vioClose		 (VIO_CHANNEL_DESC *pChannelDesc);static STATUS  vioIoctl		 (VIO_CHANNEL_DESC *pChannelDesc, int request,					int arg);static void    vioStartup	 (VIO_CHANNEL_DESC *pChannelDesc);static int     vioInput		 (WDB_VIO_NODE *pNode, char *pData,					uint_t nBytes);static void    vioWriteEventGet  (void * pChannelDesc, WDB_EVT_DATA *pEvtData);static void    vioWriteEventDeq  (void * pChannelDesc);/********************************************************************************* wdbVioDrv - initialize the tty driver for a WDB agent** This routine initializes the VxWorks virtual I/O driver and creates* a virtual I/O device of the specified name.** This routine should be called exactly once, before any reads, writes, or* opens.  Normally, it is called by usrRoot() in usrConfig.c,* and the device name created is "/vio".** After this routine has been called, individual virtual I/O channels* can be open by appending the channel number to the virtual I/O* device name.  For example, to get a file descriptor for virtual I/O* channel 0x1000017, call open() as follows:* .CS*     fd = open ("/vio/0x1000017", O_RDWR, 0)* .CE** RETURNS: OK, or ERROR if the driver cannot be installed.*/STATUS wdbVioDrv    (    char *name    )    {    static VIO_DEV	vioDev;			/* virtual I/O device */    /* check if driver already installed */    if (vioDrvNum > 0)	return (OK);    vioDrvNum = iosDrvInstall (vioOpen, (FUNCPTR) NULL, vioOpen,                                (FUNCPTR) vioClose, tyRead, tyWrite, vioIoctl);    if (vioDrvNum <= 0)        return (ERROR);    /* Add the device to the I/O systems device list */    return (iosDevAdd (&vioDev.devHdr, name, vioDrvNum));    }/********************************************************************************* vioOpen - open a virtual I/O channel** RETURNS: vioDv handle*/static int vioOpen    (    VIO_DEV *	pDev,    char *	name,    int		mode    )    {    VIO_CHANNEL_DESC *	pChannelDesc;    int			channel;    /* parse the channel number from the name */    if (name[0]=='/')	name = &name[1];    channel = (int) strtol (name, (char **)NULL, 10);    if ((channel == 0) && (name[0] != '0'))	return (ERROR);    /* create a channel descriptor */    pChannelDesc = (VIO_CHANNEL_DESC *) malloc (sizeof (VIO_CHANNEL_DESC));    if (pChannelDesc == NULL)	return (ERROR);    /* initialize the channel descriptor */    if (tyDevInit (&pChannelDesc->tyDev, INBUF_SIZE, OUTBUF_SIZE,                    (FUNCPTR)vioStartup) != OK)        return (ERROR);    wdbEventNodeInit (&pChannelDesc->eventNode, vioWriteEventGet,			vioWriteEventDeq, (void *)pChannelDesc);    pChannelDesc->pVioDev		 = pDev;    pChannelDesc->vioNode.channel	 = channel;    pChannelDesc->vioNode.pVioDev	 = &pChannelDesc->vioNode;    pChannelDesc->vioNode.inputRtn	 = vioInput;    pChannelDesc->vioChannelIsClosed	 = FALSE;    if (wdbVioChannelRegister (&pChannelDesc->vioNode) == ERROR)	return (ERROR);    return ((int) pChannelDesc);    }/******************************************************************************** vioClose - close a VIO channel*/ static STATUS vioClose    (    VIO_CHANNEL_DESC *	pChannelDesc	/* chanel to close */    )    {    int numTries;    /* unregister VIO channel to prevent further input from host */    wdbVioChannelUnregister (&pChannelDesc->vioNode);    /*     * Dequeue the event node to prevent further output to the host.     * But first try waiting a bit to allow pending data to be flushed.     */    for (numTries = 0; numTries < MAX_FLUSH_TRIES; numTries++)	if (pChannelDesc->eventNode.onQueue == TRUE)	    taskDelay (1);    /* indicate that the VIO channel is closed */    pChannelDesc->vioChannelIsClosed = TRUE;    /* dequeue the event node */    wdbEventDeq (&pChannelDesc->eventNode);    /* free all the malloc'ed memory */    rngDelete (pChannelDesc->tyDev.wrtBuf);    rngDelete (pChannelDesc->tyDev.rdBuf);    free (pChannelDesc);    return (OK);    }/********************************************************************************* vioIoctl - special device control** This routine passes all requests to tyIoctl().** RETURNS: whatever tyIoctl() returns.*/static STATUS vioIoctl    (    VIO_CHANNEL_DESC *	pChannelDesc,	/* device to control */    int 		request,	/* request code */    int 		arg		/* some argument */    )    {    STATUS status;    switch (request)        {        default:            status = tyIoctl (&pChannelDesc->tyDev, request, arg);            break;        }    return (status);    }/********************************************************************************* vioStartup - transmitter startup routine** Call interrupt level character output routine.** RETURNS: N/A*/static void vioStartup    (    VIO_CHANNEL_DESC *pChannelDesc	/* ty device to start up */    )    {    wdbEventPost (&pChannelDesc->eventNode);    }/******************************************************************************** vioWriteEventGet - retrieve the WDB_VIO_WRITE event data*/static void vioWriteEventGet    (    void *	   arg,    WDB_EVT_DATA * pEvtData    )    {    uint_t	nBytes;    VIO_CHANNEL_DESC *	pChannelDesc;    uint_t	lockKey;    char *	outBuf;    int		maxBytes;    pChannelDesc = (VIO_CHANNEL_DESC *)arg;    pChannelDesc->outputDone = FALSE;    /* if the VIO channel is closed, return */    if (pChannelDesc->vioChannelIsClosed)    	return;    outBuf = pChannelDesc->pVioDev->buf;    maxBytes = wdbCommMtu - 90;    if (maxBytes > MAX_VIO_XFER_SIZE)	maxBytes = MAX_VIO_XFER_SIZE;    for (nBytes = 0; nBytes < maxBytes; nBytes++)	{	lockKey = intLock();	if (tyITx (&pChannelDesc->tyDev, &outBuf[nBytes]) == ERROR)	    {	    pChannelDesc->outputDone = TRUE;	    intUnlock (lockKey);	    break;	    }	intUnlock (lockKey);	}    pEvtData->evtType = WDB_EVT_VIO_WRITE;    pEvtData->eventInfo.vioWriteInfo.destination =				(TGT_ADDR_T)pChannelDesc->vioNode.channel;    pEvtData->eventInfo.vioWriteInfo.numBytes   = nBytes;    pEvtData->eventInfo.vioWriteInfo.source	= outBuf;    }/******************************************************************************** vioWriteEventDeq - delete the WDB_VIO_WRITE event*/static void vioWriteEventDeq    (    void *	arg    )    {    uint_t		lockKey;    VIO_CHANNEL_DESC *	pChannelDesc = (VIO_CHANNEL_DESC *)arg;    /* if the VIO channel is closed, return */    if (pChannelDesc->vioChannelIsClosed)    	return;    /* any data remaining? if so, post the event */    lockKey = intLock();    if (pChannelDesc->outputDone == FALSE)	wdbEventPost (&pChannelDesc->eventNode);    intUnlock (lockKey);    }/******************************************************************************** vioInput - handle incoming VIO packets*/static int vioInput    (    WDB_VIO_NODE *	pVioNode,    char *		pData,    uint_t		maxBytes    )    {    int		nBytes;    uint_t	lockKey;    TY_DEV *	pTyDev;#undef	OFFSET#define OFFSET(type, field) ((int)&((type *)0)->field)    pTyDev	= (TY_DEV *)((int)pVioNode - OFFSET (VIO_CHANNEL_DESC, vioNode)				+ OFFSET (VIO_CHANNEL_DESC, tyDev));    for (nBytes = 0; nBytes < maxBytes; nBytes++)	{        lockKey = intLock();	if (wdbIsNowExternal())	    intCnt++;		/* fake an ISR context */	if (tyIRd (pTyDev, pData[nBytes]) == ERROR)	    {	    intUnlock (lockKey);	    break;	    }	if (wdbIsNowExternal())	    intCnt--;		/* fake an ISR exit */	intUnlock (lockKey);	}    return (nBytes);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人avav影音| 欧美一级精品在线| 蜜臀av亚洲一区中文字幕| 国产亚洲欧美日韩日本| 欧美日韩国产在线观看| 国产黄色精品视频| 日本欧美一区二区三区| 亚洲视频在线一区| 国产亚洲午夜高清国产拍精品 | 成人免费一区二区三区视频| 欧美男男青年gay1069videost | 久久一夜天堂av一区二区三区| 91欧美激情一区二区三区成人| 精品一二三四区| 五月婷婷综合网| 亚洲精品免费在线| 国产精品久久777777| 精品精品国产高清一毛片一天堂| 欧美色图免费看| 一本一道综合狠狠老| 国产成人啪午夜精品网站男同| 美女国产一区二区三区| 婷婷中文字幕一区三区| 亚洲午夜久久久久久久久电影院 | 欧美电影精品一区二区| 欧美日韩黄色一区二区| 在线精品视频一区二区三四| 成人av网站在线观看| 高清shemale亚洲人妖| 经典三级视频一区| 激情综合色综合久久综合| 男男成人高潮片免费网站| 丝袜美腿亚洲色图| 首页国产欧美日韩丝袜| 日本sm残虐另类| 久久成人av少妇免费| 美女视频黄久久| 看电视剧不卡顿的网站| 蜜桃视频在线一区| 久久99在线观看| 国产真实精品久久二三区| 久久精品国产精品亚洲综合| 久久aⅴ国产欧美74aaa| 国产激情精品久久久第一区二区| 国产精华液一区二区三区| 国产成人h网站| a4yy欧美一区二区三区| 91丨九色丨国产丨porny| 91免费观看视频| 91福利精品视频| 这里是久久伊人| 欧美成人一区二区三区| 国产清纯白嫩初高生在线观看91| 日本一区二区成人在线| 亚洲天堂免费看| 日韩精品视频网站| 麻豆精品国产91久久久久久| 国产乱码精品一品二品| 不卡影院免费观看| 欧美在线观看视频一区二区| 欧美日韩成人综合| 精品粉嫩aⅴ一区二区三区四区| 久久女同性恋中文字幕| 国产精品美女视频| 亚洲午夜影视影院在线观看| 美腿丝袜在线亚洲一区| 成人中文字幕电影| 欧美日韩aaaaa| 国产欧美精品一区二区色综合| 亚洲欧美日韩一区二区三区在线观看| 亚洲成a人片在线不卡一二三区| 欧美aaaaaa午夜精品| 波波电影院一区二区三区| 欧美熟乱第一页| 久久亚洲精品国产精品紫薇| 亚洲视频电影在线| 美女诱惑一区二区| av在线不卡免费看| 欧美成人女星排行榜| 亚洲女人****多毛耸耸8| 青青国产91久久久久久| 99国内精品久久| 日韩欧美国产成人一区二区| 一区二区中文视频| 男女视频一区二区| 91福利在线观看| 久久精品免视看| 日韩成人dvd| 色综合色狠狠综合色| 精品三级av在线| 亚洲成人av一区| 成人av资源网站| 欧美电影免费观看高清完整版| 亚洲精品高清视频在线观看| 国内精品伊人久久久久av一坑| 在线日韩国产精品| 欧美激情一区二区三区不卡 | 亚洲第一狼人社区| av一二三不卡影片| 精品免费国产一区二区三区四区| 亚洲天堂网中文字| 丁香桃色午夜亚洲一区二区三区| 91精品国产黑色紧身裤美女| 中文字幕日韩精品一区| 狠狠色伊人亚洲综合成人| 欧美亚一区二区| 中文字幕人成不卡一区| 国产很黄免费观看久久| 91精品国产品国语在线不卡| 一区二区三区在线高清| 丰满少妇久久久久久久| 久久亚洲精品国产精品紫薇| 日本不卡一二三区黄网| 欧美视频在线观看一区| 亚洲精品老司机| 成人av网址在线观看| 国产亚洲人成网站| 国产专区欧美精品| 亚洲精品一区二区精华| 日韩av一区二区在线影视| 欧美日韩视频在线观看一区二区三区 | 欧美tickle裸体挠脚心vk| 日韩精品一二区| 在线电影欧美成精品| 性做久久久久久免费观看| 色悠悠亚洲一区二区| 中文字幕一区三区| 不卡高清视频专区| 中文字幕成人在线观看| 成人精品gif动图一区| 国产日韩精品一区二区三区在线| 国产成人在线色| 国产欧美一区二区精品忘忧草| 狠狠色狠狠色综合日日91app| 欧美一区二区三区在线观看| 午夜av电影一区| 欧美日韩精品久久久| 天堂一区二区在线| 欧美成人午夜电影| 国产一区二区不卡在线| 国产日本亚洲高清| 99在线精品视频| 亚洲欧美日韩国产成人精品影院 | 精品一区二区三区蜜桃| 欧美videos中文字幕| 国产激情91久久精品导航| 欧美激情一区在线观看| 91丨九色丨尤物| 亚洲电影中文字幕在线观看| 3d动漫精品啪啪| 国内精品写真在线观看| 国产女人水真多18毛片18精品视频 | 精品在线播放午夜| 国产亚洲综合在线| 97精品国产露脸对白| 亚洲福利一二三区| 精品处破学生在线二十三| 国产精品456| 亚洲色图一区二区三区| 欧美日韩免费视频| 国内外成人在线| 1区2区3区欧美| 欧美一级精品在线| 顶级嫩模精品视频在线看| 玉米视频成人免费看| 6080yy午夜一二三区久久| 国产一区视频在线看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 4438x亚洲最大成人网| 激情五月激情综合网| 中文字幕字幕中文在线中不卡视频| 欧美自拍偷拍一区| 看电影不卡的网站| 国产精品天干天干在线综合| 欧美日免费三级在线| 国产乱码精品一品二品| 夜色激情一区二区| 久久久久久麻豆| 在线免费亚洲电影| 国内外成人在线视频| 亚洲综合一区在线| 久久夜色精品一区| 欧美日韩精品欧美日韩精品一 | 手机精品视频在线观看| 欧美激情在线看| 91精品一区二区三区久久久久久 | 国产一区二区三区在线观看免费| 亚洲欧洲成人精品av97| 777色狠狠一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 亚洲成人777| 中文字幕五月欧美| 精品成人一区二区| 欧美男男青年gay1069videost | 1000部国产精品成人观看| 欧美成人精精品一区二区频| 在线观看亚洲一区| 成人高清视频在线观看| 国产一区二区看久久| 三级精品在线观看|