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

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

?? usb-driver.c

?? Xilinx USB下載線 Linux驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* libusb/ppdev connector for XILINX impact * * Copyright (c) 2007 Michael Gernoth <michael@gernoth.net> * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */#define _GNU_SOURCE 1#include <dlfcn.h>#include <stdarg.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/time.h>#include <stdio.h>#include <signal.h>#include <errno.h>#include <inttypes.h>#include <sys/ioctl.h>#include <sys/utsname.h>#include <bits/wordsize.h>#include <sys/ipc.h>#include <sys/sem.h>#include "usb-driver.h"#include "config.h"#include "xpcu.h"static int (*ioctl_func) (int, int, void *) = NULL;static int *windrvrfds = NULL;static int windrvrfds_count = 0;static unsigned long ppbase = 0;static unsigned long ecpbase = 0;static struct parport_config *pport = NULL;static FILE *modulesfp = NULL;static FILE *baseaddrfp = NULL;static int baseaddrnum = 0;static int modules_read = 0;#define NO_WINDRVR 1void hexdump(unsigned char *buf, int len, char *prefix) {	int i;	fprintf(stderr, "%s ", prefix);	for(i=0; i<len; i++) {		fprintf(stderr,"%02x ", buf[i]);		if ((i % 16) == 15)			fprintf(stderr,"\n%s ", prefix);	}	fprintf(stderr,"\n");}static int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {	struct header_struct* wdheader = (struct header_struct*)wdioctl;	struct version_struct *version;	int ret = 0;	if (wdheader->magic != MAGIC) {		fprintf(stderr,"!!!ERROR: magic header does not match!!!\n");		return (*ioctl_func) (fd, request, wdioctl);	}	switch(request & ~(0xc0000000)) {		case VERSION:			version = (struct version_struct*)(wdheader->data);			strcpy(version->version, "libusb-driver.so version: " USB_DRIVER_VERSION);			version->versionul = 802;			DPRINTF("VERSION\n");			break;		case LICENSE:			DPRINTF("LICENSE\n");			break;		case CARD_REGISTER_OLD:		case CARD_REGISTER:			DPRINTF("CARD_REGISTER\n");			{				struct card_register* cr = (struct card_register*)(wdheader->data);				DPRINTF("-> Items: %lu, Addr: 0x%lx, bytes: %lu, bar: %lu\n",				cr->Card.dwItems,				(unsigned long)cr->Card.Item[0].I.IO.dwAddr,				cr->Card.Item[0].I.IO.dwBytes,				cr->Card.Item[0].I.IO.dwBar);								DPRINTF("-> Items: %lu, Addr: 0x%lx, bytes: %lu, bar: %lu\n",				cr->Card.dwItems,				(unsigned long)cr->Card.Item[1].I.IO.dwAddr,				cr->Card.Item[1].I.IO.dwBytes,				cr->Card.Item[1].I.IO.dwBar);#ifndef NO_WINDRVR				ret = (*ioctl_func) (fd, request, wdioctl);#else				pport = config_get((unsigned long)cr->Card.Item[0].I.IO.dwAddr / 0x10);				if (!pport)					break;				ret = pport->open((unsigned long)cr->Card.Item[0].I.IO.dwAddr / 0x10);				ppbase = (unsigned long)cr->Card.Item[0].I.IO.dwAddr;				if (cr->Card.dwItems > 1 && cr->Card.Item[1].I.IO.dwAddr)					ecpbase = (unsigned long)cr->Card.Item[1].I.IO.dwAddr;				if (ret >= 0) {					cr->hCard = ret;				} else {					cr->hCard = 0;				}#endif				DPRINTF("<-hCard: %lu\n", cr->hCard);			}			break;		case USB_TRANSFER:			DPRINTF("USB_TRANSFER\n");			{				struct usb_transfer *ut = (struct usb_transfer*)(wdheader->data);#ifdef DEBUG				DPRINTF("-> unique: 0x%lx, pipe: %lu, read: %lu, options: %lx, size: %lu, timeout: %lx\n",				ut->dwUniqueID, ut->dwPipeNum, ut->fRead,				ut->dwOptions, ut->dwBufferSize, ut->dwTimeout);				if (ut->dwPipeNum == 0) {					DPRINTF("-> setup packet:");					hexdump(ut->SetupPacket, 8, "");				}				if (!ut->fRead && ut->dwBufferSize)				{					hexdump(ut->pBuffer, ut->dwBufferSize, "->");				}#endif#ifndef NO_WINDRVR				ret = (*ioctl_func) (fd, request, wdioctl);#else				ret = xpcu_transfer(ut);#endif#ifdef DEBUG				DPRINTF("Transferred: %lu (%s)\n",ut->dwBytesTransferred, (ut->fRead?"read":"write"));				if (ut->fRead && ut->dwBytesTransferred)				{					hexdump(ut->pBuffer, ut->dwBytesTransferred, "<-");				}#endif			}			break;		case INT_ENABLE_OLD:		case INT_ENABLE:			DPRINTF("INT_ENABLE\n");			{				struct interrupt *it = (struct interrupt*)(wdheader->data);				DPRINTF("-> Handle: 0x%lx, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",				it->hInterrupt, it->dwOptions,				it->dwCmds, it->fEnableOk, it->dwCounter,				it->dwLost, it->fStopped);#ifndef NO_WINDRVR				ret = (*ioctl_func) (fd, request, wdioctl);#else				ret = xpcu_int_state(it, ENABLE_INTERRUPT);#endif				DPRINTF("<- Handle: 0x%lx, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",				it->hInterrupt, it->dwOptions,				it->dwCmds, it->fEnableOk, it->dwCounter,				it->dwLost, it->fStopped);			}			break;					case INT_DISABLE:			DPRINTF("INT_DISABLE\n");			{				struct interrupt *it = (struct interrupt*)(wdheader->data);				DPRINTF("-> Handle: 0x%lx, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",				it->hInterrupt, it->dwOptions,				it->dwCmds, it->fEnableOk, it->dwCounter,				it->dwLost, it->fStopped);#ifndef NO_WINDRVR				ret = (*ioctl_func) (fd, request, wdioctl);#else				ret = xpcu_int_state(it, DISABLE_INTERRUPT);#endif				DPRINTF("<- Handle: 0x%lx, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",				it->hInterrupt, it->dwOptions,				it->dwCmds, it->fEnableOk, it->dwCounter,				it->dwLost, it->fStopped);			}			break;		case USB_SET_INTERFACE:			DPRINTF("USB_SET_INTERFACE\n");			{				struct usb_set_interface *usi = (struct usb_set_interface*)(wdheader->data);				DPRINTF("-> unique: 0x%lx, interfacenum: %lu, alternatesetting: %lu, options: %lx\n",				usi->dwUniqueID, usi->dwInterfaceNum,				usi->dwAlternateSetting, usi->dwOptions);#ifndef NO_WINDRVR				ret = (*ioctl_func) (fd, request, wdioctl);#else				ret = xpcu_set_interface(usi);#endif				DPRINTF("<- unique: 0x%lx, interfacenum: %lu, alternatesetting: %lu, options: %lx\n",				usi->dwUniqueID, usi->dwInterfaceNum,				usi->dwAlternateSetting, usi->dwOptions);			}			break;		case USB_GET_DEVICE_DATA_OLD:		case USB_GET_DEVICE_DATA:			DPRINTF("USB_GET_DEVICE_DATA\n");			{				struct usb_get_device_data *ugdd = (struct usb_get_device_data*)(wdheader->data);				DPRINTF("-> unique: 0x%lx, bytes: %lu, options: %lx\n",				ugdd->dwUniqueID, ugdd->dwBytes,				ugdd->dwOptions);				ret = xpcu_deviceinfo(ugdd);			}			break;		case EVENT_REGISTER_OLD:		case EVENT_REGISTER:			DPRINTF("EVENT_REGISTER\n");			{				struct event *e = (struct event*)(wdheader->data);#ifdef DEBUG				int i;#endif				DPRINTF("-> handle: 0x%lx, action: %lu, status: %lu, eventid: %lu, cardtype: %lu, kplug: %lu, options: %lu, dev: %lx:%lx, unique: 0x%lx, ver: %lu, nummatch: %lu\n",				e->handle, e->dwAction,				e->dwStatus, e->dwEventId, e->dwCardType,				e->hKernelPlugIn, e->dwOptions,				e->u.Usb.deviceId.dwVendorId,				e->u.Usb.deviceId.dwProductId,				e->u.Usb.dwUniqueID, e->dwEventVer,				e->dwNumMatchTables);#ifndef NO_WINDRVR				ret = (*ioctl_func) (fd, request, wdioctl);#else				ret = xpcu_find(e);#endif#ifdef DEBUG				DPRINTF("<- handle: 0x%lx, action: %lu, status: %lu, eventid: %lu, cardtype: %lu, kplug: %lu, options: %lu, dev: %lx:%lx, unique: 0x%lx, ver: %lu, nummatch: %lu\n",				e->handle, e->dwAction,				e->dwStatus, e->dwEventId, e->dwCardType,				e->hKernelPlugIn, e->dwOptions,				e->u.Usb.deviceId.dwVendorId,				e->u.Usb.deviceId.dwProductId,				e->u.Usb.dwUniqueID, e->dwEventVer,				e->dwNumMatchTables);				for (i = 0; i < e->dwNumMatchTables; i++)					DPRINTF("match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n",					e->matchTables[i].VendorId,					e->matchTables[i].ProductId,					e->matchTables[i].bDeviceClass,					e->matchTables[i].bDeviceSubClass,					e->matchTables[i].bInterfaceClass,					e->matchTables[i].bInterfaceSubClass,					e->matchTables[i].bInterfaceProtocol);#endif			}			break;		case TRANSFER_OLD:		case TRANSFER:			DPRINTF("TRANSFER\n");			{				WD_TRANSFER *tr = (WD_TRANSFER*)(wdheader->data);#ifndef NO_WINDRVR				ret = (*ioctl_func) (fd, request, wdioctl);#else				ret = pport->transfer(tr, fd, request, ppbase, ecpbase, 1);#endif			}			break;		case MULTI_TRANSFER_OLD:		case MULTI_TRANSFER:			DPRINTF("MULTI_TRANSFER\n");			{				WD_TRANSFER *tr = (WD_TRANSFER*)(wdheader->data);				unsigned long num = wdheader->size/sizeof(WD_TRANSFER);#ifndef NO_WINDRVR				ret = (*ioctl_func) (fd, request, wdioctl);#else				ret = pport->transfer(tr, fd, request, ppbase, ecpbase, num);#endif			}			break;		case EVENT_UNREGISTER:			{				struct event *e = (struct event*)(wdheader->data);				DPRINTF("EVENT_UNREGISTER\n");#ifndef NO_WINDRVR				ret = (*ioctl_func) (fd, request, wdioctl);#else				ret = xpcu_close(e);#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色天天综合久久久久综合片| 2014亚洲片线观看视频免费| 色吧成人激情小说| 99综合电影在线视频| 成人av综合一区| 成人福利视频在线| 91日韩一区二区三区| 99久久99久久精品免费看蜜桃| 成人美女视频在线看| 99国产精品视频免费观看| 99久久综合狠狠综合久久| 91在线你懂得| 在线观看不卡视频| 91精品国产综合久久精品麻豆| 7777精品伊人久久久大香线蕉 | 日韩亚洲电影在线| 精品国产一区二区三区不卡| 精品国一区二区三区| 亚洲国产精品成人综合| 国产精品毛片大码女人| 一区二区三区在线观看网站| 亚洲一区二区四区蜜桃| 秋霞电影网一区二区| 国产精品一区二区久激情瑜伽| 国产成人一区在线| 91福利视频久久久久| 在线电影院国产精品| 久久久五月婷婷| 亚洲同性gay激情无套| 亚洲va欧美va国产va天堂影院| 日韩精品成人一区二区在线| 国产综合久久久久影院| a级高清视频欧美日韩| 欧美日韩精品专区| 26uuu亚洲| 亚洲欧美另类小说视频| 日本怡春院一区二区| 韩国成人精品a∨在线观看| 成人h精品动漫一区二区三区| 欧洲激情一区二区| 欧美tickling网站挠脚心| 中文字幕欧美国产| 三级亚洲高清视频| 高清成人在线观看| 欧美日韩中文另类| 国产亚洲精品超碰| 偷偷要91色婷婷| 成人av网站在线观看免费| 欧美午夜电影在线播放| 久久综合狠狠综合| 亚洲一区二区五区| 国产69精品一区二区亚洲孕妇| 在线视频一区二区三区| 久久亚洲综合色一区二区三区| 亚洲日本护士毛茸茸| 麻豆精品视频在线观看视频| 色综合天天综合网天天狠天天| 日韩免费高清视频| 一区二区成人在线视频| 国产一区二区导航在线播放| 欧洲精品在线观看| 中文字幕精品一区| 麻豆精品在线播放| 欧美三级电影精品| 自拍视频在线观看一区二区| 奇米四色…亚洲| 色婷婷av久久久久久久| 欧美国产乱子伦| 麻豆91小视频| 666欧美在线视频| 一区二区三区鲁丝不卡| www.亚洲人| 精品99一区二区| 天天综合日日夜夜精品| 日本韩国欧美国产| 国产精品视频第一区| 国产在线精品免费av| 欧美精品三级日韩久久| 一区二区三区在线高清| 丁香一区二区三区| 欧美精品一区二区三区在线播放| 亚洲大片在线观看| 在线观看国产91| 伊人婷婷欧美激情| av午夜一区麻豆| 国产日韩欧美精品一区| 奇米综合一区二区三区精品视频| 欧美视频一区二区三区四区| 伊人色综合久久天天人手人婷| 大陆成人av片| 久久精品欧美一区二区三区麻豆| 免费一级片91| 91精品中文字幕一区二区三区 | 色噜噜狠狠一区二区三区果冻| 国产精品天美传媒| 国产精品18久久久久久久久| 欧美tickle裸体挠脚心vk| 男人的j进女人的j一区| 91麻豆精品久久久久蜜臀 | 一本久久综合亚洲鲁鲁五月天| 国产精品欧美久久久久无广告| 国产成人综合网站| 久久女同精品一区二区| 国产剧情在线观看一区二区| 欧美成人乱码一区二区三区| 久久国产精品免费| 久久久精品蜜桃| 国产大陆亚洲精品国产| 久久久不卡影院| 成人av动漫网站| 国产精品福利av| 日本精品一区二区三区高清 | 精品一区二区三区免费| 久久看人人爽人人| 成人精品国产免费网站| 中文字幕一区二区三区av| av不卡在线观看| 亚洲主播在线播放| 91精品国产综合久久国产大片 | 在线区一区二视频| 午夜欧美在线一二页| 在线播放日韩导航| 狠狠色综合日日| 中文字幕亚洲一区二区av在线| 91麻豆国产福利在线观看| 亚洲午夜日本在线观看| 日韩精品中文字幕一区| 国产精品456| 亚洲六月丁香色婷婷综合久久| 欧美性xxxxx极品少妇| 日本91福利区| 国产亚洲欧美色| 欧美综合色免费| 国产一区二区中文字幕| 国产精品福利一区| 在线电影国产精品| 国产成人精品一区二区三区网站观看 | 欧美一级一区二区| 粉嫩aⅴ一区二区三区四区 | 国产美女精品在线| 亚洲女女做受ⅹxx高潮| 欧美精品久久天天躁| 国产最新精品免费| 一区二区三区成人在线视频| 欧美一区二区三区日韩| 懂色av噜噜一区二区三区av| 亚洲综合在线电影| 日韩欧美另类在线| 成人app在线| 日本免费新一区视频| 一区精品在线播放| 日韩午夜激情视频| 99免费精品在线观看| 免费一级片91| 亚洲另类在线制服丝袜| 精品久久免费看| 欧洲精品中文字幕| 国产成a人亚洲| 日韩黄色免费电影| 亚洲人成网站影音先锋播放| 精品三级av在线| 欧美在线一区二区| 成年人国产精品| 青椒成人免费视频| 亚洲精品日日夜夜| 国产欧美日韩卡一| 日韩一区二区三区三四区视频在线观看| 高清在线观看日韩| 久久99久久精品| 亚洲国产欧美日韩另类综合 | 国产日产亚洲精品系列| 欧美疯狂性受xxxxx喷水图片| 成人avav影音| 国产精品99久| 免费观看成人av| 亚洲第一久久影院| 亚洲免费观看高清在线观看| 久久久久久麻豆| 日韩一区二区免费在线观看| 在线看日韩精品电影| av电影天堂一区二区在线| 国产精品1024久久| 国产一区高清在线| 久久精品国产精品亚洲红杏| 亚洲午夜免费电影| 亚洲免费在线看| |精品福利一区二区三区| 欧美国产丝袜视频| 久久精品亚洲乱码伦伦中文| 日韩女优制服丝袜电影| 8x福利精品第一导航| 欧美日韩中文国产| 欧美网站一区二区| 欧洲生活片亚洲生活在线观看| 91亚洲男人天堂| 99久久综合狠狠综合久久| av电影一区二区| 91伊人久久大香线蕉| 99久久久免费精品国产一区二区| 成人午夜电影小说|