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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? jtagkey.c

?? Xilinx USB下載線 Linux驅(qū)動
?? C
字號:
#include <stdio.h>#include <ftdi.h>#include <unistd.h>#include <pthread.h>#include <inttypes.h>#include "usb-driver.h"#include "config.h"#include "jtagkey.h"#include "jtagmon.h"#define USBBUFSIZE 1048576#define JTAG_SPEED 100000#define BULK_LATENCY 2#define OTHER_LATENCY 1static struct ftdi_context ftdic;static int jtagkey_latency(int latency) {	static int current = 0;	int ret;	if (current != latency) {		DPRINTF("switching latency\n");		if ((ret = ftdi_set_latency_timer(&ftdic, latency))  != 0) {			fprintf(stderr, "unable to set latency timer: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));			return ret;		}				current = latency;	}	return ret;}static int jtagkey_init(unsigned short vid, unsigned short pid) {	int ret = 0;	unsigned char c;	if ((ret = ftdi_init(&ftdic)) != 0) {		fprintf(stderr, "unable to initialise libftdi: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));		return ret;	}		if ((ret = ftdi_usb_open(&ftdic, vid, pid)) != 0) {		fprintf(stderr, "unable to open ftdi device: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));		return ret;	}	if ((ret = ftdi_usb_reset(&ftdic)) != 0) {		fprintf(stderr, "unable reset device: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));		return ret;	}	if ((ret = ftdi_set_interface(&ftdic, INTERFACE_A)) != 0) {		fprintf(stderr, "unable to set interface: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));		return ret;	}	if ((ret = ftdi_write_data_set_chunksize(&ftdic, USBBUFSIZE))  != 0) {		fprintf(stderr, "unable to set write chunksize: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));		return ret;	}	if ((ret = ftdi_read_data_set_chunksize(&ftdic, USBBUFSIZE))  != 0) {		fprintf(stderr, "unable to set read chunksize: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));		return ret;	}	if ((ret = jtagkey_latency(OTHER_LATENCY)) != 0)		return ret;	c = 0x00;	ftdi_write_data(&ftdic, &c, 1);	if ((ret = ftdi_set_bitmode(&ftdic, JTAGKEY_TCK|JTAGKEY_TDI|JTAGKEY_TMS|JTAGKEY_OEn, BITMODE_SYNCBB))  != 0) {		fprintf(stderr, "unable to enable bitbang mode: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));		return ret;	}	if ((ret = ftdi_set_baudrate(&ftdic, JTAG_SPEED))  != 0) {		fprintf(stderr, "unable to set baudrate: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));		return ret;	}	if ((ret = ftdi_usb_purge_buffers(&ftdic))  != 0) {		fprintf(stderr, "unable to purge buffers: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));		return ret;	}	return ret;}int jtagkey_open(int num) {	int ret;	ret = jtagkey_init(config_usb_vid(num), config_usb_pid(num));	if (ret >= 0)		ret = 0xff;	return ret;}void jtagkey_close(int handle) {	if (handle == 0xff) {		ftdi_disable_bitbang(&ftdic);		ftdi_usb_close(&ftdic);		ftdi_deinit(&ftdic);	}}#ifdef DEBUGstatic void jtagkey_state(unsigned char data) {	fprintf(stderr,"Pins high: ");	if (data & JTAGKEY_TCK)		fprintf(stderr,"TCK ");	if (data & JTAGKEY_TDI)		fprintf(stderr,"TDI ");	if (data & JTAGKEY_TDO)		fprintf(stderr,"TDO ");	if (data & JTAGKEY_TMS)		fprintf(stderr,"TMS ");	if (data & JTAGKEY_VREF)		fprintf(stderr,"VREF ");		fprintf(stderr,"\n");}#endifstruct jtagkey_reader_arg {	int		num;	unsigned char	*buf;};static void *jtagkey_reader(void *thread_arg) {	struct jtagkey_reader_arg *arg = (struct jtagkey_reader_arg*)thread_arg;	int i;	i = 0;	DPRINTF("reader for %d bytes\n", arg->num);	while (i < arg->num) {		i += ftdi_read_data(&ftdic, arg->buf + i, arg->num - i);	}		pthread_exit(NULL);}/* TODO: Interpret JTAG commands and transfer in MPSSE mode */int jtagkey_transfer(WD_TRANSFER *tr, int fd, unsigned int request, int ppbase, int ecpbase, int num) {	int ret = 0;	int i;	int nread = 0;	unsigned long port;	unsigned char val;	static unsigned char last_data = 0;	static unsigned char last_write = 0x00;	static unsigned char writebuf[USBBUFSIZE], *writepos = writebuf;	static unsigned char readbuf[USBBUFSIZE], *readpos;	unsigned char data, prev_data, last_cyc_write;	struct jtagkey_reader_arg targ;	pthread_t reader_thread;	/* Count reads */	for (i = 0; i < num; i++)		if (tr[i].cmdTrans == PP_READ)			nread++;	/* Write combining */	if ((writepos-writebuf > sizeof(writebuf)-num) || (nread && writepos-writebuf)) {		unsigned char *pos = writebuf;		int len;		DPRINTF("writing %d bytes due to %d following reads in %d chunks or full buffer\n", writepos-writebuf, nread, num);		jtagkey_latency(BULK_LATENCY);		targ.num = writepos-pos;		targ.buf = readbuf;		pthread_create(&reader_thread, NULL, &jtagkey_reader, &targ);		while (pos < writepos) {			len = writepos-pos;			if (len > USBBUFSIZE)				len = USBBUFSIZE;			DPRINTF("combined write of %d/%d\n",len,writepos-pos);			ftdi_write_data(&ftdic, pos, len);			pos += len;		}		pthread_join(reader_thread, NULL);		writepos = writebuf;	}	last_cyc_write = last_write;	for (i = 0; i < num; i++) {		DPRINTF("dwPort: 0x%lx, cmdTrans: %lu, dwbytes: %ld, fautoinc: %ld, dwoptions: %ld\n",				(unsigned long)tr[i].dwPort, tr[i].cmdTrans, tr[i].dwBytes,				tr[i].fAutoinc, tr[i].dwOptions);		port = (unsigned long)tr[i].dwPort;		val = tr[i].Data.Byte;#ifdef DEBUG		if (tr[i].cmdTrans == 13)			DPRINTF("write byte: %d\n", val);		if (tr[i].cmdTrans == 13)			jtagmon(val & PP_TCK, val & PP_TMS, val & PP_TDI);#endif		/* Pad writebuf for read-commands in stream */		*writepos = last_data;		prev_data = last_data;		if (port == ppbase + PP_DATA) {			DPRINTF("data port\n");			data = 0x00;			switch(tr[i].cmdTrans) {				case PP_READ:					ret = 0; /* We don't support reading of the data port */					break;				case PP_WRITE:					if (val & PP_TDI) {						data |= JTAGKEY_TDI;						DPRINTF("TDI\n");					} else {						DPRINTF("!TDI\n");					}					if (val & PP_TCK) {						data |= JTAGKEY_TCK;						DPRINTF("TCK\n");					} else {						DPRINTF("!TCK\n");					}					if (val & PP_TMS) {						data |= JTAGKEY_TMS;						DPRINTF("TMS\n");					} else {						DPRINTF("!TMS\n");					}					if (val & PP_CTRL) {						data = JTAGKEY_OEn;						DPRINTF("CTRL\n");					} else {						DPRINTF("!CTRL\n");					}					if (val & PP_PROG) {						DPRINTF("PROG\n");					} else {						DPRINTF("!PROG\n");					}					*writepos = data;					last_data = data;					last_write = val;					break;				default:					fprintf(stderr,"!!!Unsupported TRANSFER command: %lu!!!\n", tr[i].cmdTrans);					ret = -1;					break;			}		}		if ((tr[i].cmdTrans == PP_READ) || (*writepos != prev_data) || (i == num-1))			writepos++;	}	if (nread)	{		DPRINTF("writing %d bytes\n", writepos-writebuf);		*writepos = last_data;		writepos++;		jtagkey_latency(OTHER_LATENCY);		targ.num = writepos-writebuf;		targ.buf = readbuf;		pthread_create(&reader_thread, NULL, &jtagkey_reader, &targ);		ftdi_write_data(&ftdic, writebuf, writepos-writebuf);		pthread_join(reader_thread, NULL);#ifdef DEBUG		hexdump(writebuf, writepos-writebuf, "->");		hexdump(readbuf, i, "<-");#endif		writepos = writebuf;	} else {		return ret;	}	readpos = readbuf;	last_write = last_cyc_write;	for (i = 0; i < num; i++) {		DPRINTF("dwPort: 0x%lx, cmdTrans: %lu, dwbytes: %ld, fautoinc: %ld, dwoptions: %ld\n",				(unsigned long)tr[i].dwPort, tr[i].cmdTrans, tr[i].dwBytes,				tr[i].fAutoinc, tr[i].dwOptions);		port = (unsigned long)tr[i].dwPort;		val = tr[i].Data.Byte;		if ((tr[i].cmdTrans != PP_READ) && (val == last_write) && (i != num-1))			continue;		readpos++;		if (port == ppbase + PP_DATA) {			if (tr[i].cmdTrans == PP_WRITE) {				last_write = val;			}		} else if (port == ppbase + PP_STATUS) {			DPRINTF("status port (last write: 0x%x)\n", last_write);			switch(tr[i].cmdTrans) {				case PP_READ:					data = *readpos;#ifdef DEBUG					DPRINTF("READ: 0x%x\n", data);					jtagkey_state(data);#endif					val = 0x00;					if ((data & JTAGKEY_TDO) && (last_write & PP_PROG))						val |= PP_TDO;					if (~last_write & PP_PROG)						val |= 0x08;					if (last_write & 0x40)						val |= 0x20;					else						val |= 0x80;					break;				case PP_WRITE:					ret = 0; /* Status Port is readonly */					break;				default:					fprintf(stderr,"!!!Unsupported TRANSFER command: %lu!!!\n", tr[i].cmdTrans);					ret = -1;					break;			}		} else {			ret = 0;		}		tr[i].Data.Byte = val;		DPRINTF("dwPortReturn: 0x%lx, cmdTrans: %lu, dwbytes: %ld, fautoinc: %ld, dwoptions: %ld\n",				(unsigned long)tr[i].dwPort, tr[i].cmdTrans, tr[i].dwBytes,				tr[i].fAutoinc, tr[i].dwOptions);#ifdef DEBUG		if (tr[i].cmdTrans == 10)			DPRINTF("read byte: %d\n", tr[i].Data.Byte);#endif	}	return ret;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品美女一区二区| 3d动漫精品啪啪一区二区竹菊| 亚洲午夜免费视频| 久久夜色精品一区| 欧美伦理电影网| 成人av第一页| 国产精品自在欧美一区| 日韩影院免费视频| 亚洲视频1区2区| 国产人久久人人人人爽| 51精品久久久久久久蜜臀| 日本福利一区二区| 成人性生交大片免费看在线播放| 老司机精品视频在线| 亚洲午夜在线电影| 亚洲天堂2016| 中文字幕在线不卡| 国产精品午夜春色av| 久久久久久亚洲综合| 日韩欧美另类在线| 欧美精品v日韩精品v韩国精品v| 91亚洲资源网| jvid福利写真一区二区三区| 激情六月婷婷综合| 秋霞av亚洲一区二区三| 亚洲福中文字幕伊人影院| 椎名由奈av一区二区三区| 中文字幕日本乱码精品影院| 国产午夜亚洲精品羞羞网站| 精品国产一区二区三区忘忧草| 欧美片在线播放| 欧美三级日本三级少妇99| 日本韩国一区二区三区视频| 91香蕉国产在线观看软件| 成人免费高清在线| 波多野洁衣一区| 99视频在线精品| caoporn国产一区二区| av高清久久久| 日本高清不卡在线观看| 在线观看日韩一区| 欧美美女视频在线观看| 欧美二区在线观看| 日韩一级二级三级| 精品成人一区二区三区| 久久婷婷国产综合精品青草| 久久精品日产第一区二区三区高清版 | 日韩亚洲欧美一区| 日韩欧美中文字幕一区| 精品少妇一区二区三区日产乱码 | 亚洲视频香蕉人妖| 最新国产精品久久精品| 亚洲激情网站免费观看| 午夜精品久久久久久久99樱桃| 亚洲第一综合色| 日本亚洲三级在线| 国产一区二区三区香蕉| 成人高清av在线| 91久久一区二区| 91麻豆精品国产无毒不卡在线观看| 91精品国产手机| 国产午夜一区二区三区| 亚洲人成网站精品片在线观看| 亚洲综合丝袜美腿| 久久精品噜噜噜成人88aⅴ| 国产精品一线二线三线精华| 99re成人精品视频| 欧美日韩一卡二卡三卡 | 亚洲综合免费观看高清完整版| 亚洲成人av电影在线| 麻豆精品视频在线观看免费 | 一本久道中文字幕精品亚洲嫩| 欧美亚一区二区| 久久综合色一综合色88| 中文字幕在线不卡一区| 午夜精品福利一区二区三区av | 韩国v欧美v亚洲v日本v| 91视频xxxx| 精品国产一区二区三区av性色| 国产精品天干天干在观线| 亚洲国产视频网站| 国产精品影视天天线| 欧美午夜电影网| 久久久久国产精品麻豆| 亚洲一区二区三区视频在线 | 亚洲一区二区三区中文字幕在线| 免费成人在线观看| 99re这里只有精品视频首页| 91精品国产色综合久久ai换脸| 国产精品三级av| 日韩国产精品久久久| 成人av先锋影音| 91精品国产aⅴ一区二区| 中文文精品字幕一区二区| 天堂蜜桃91精品| 91美女在线视频| 久久久亚洲国产美女国产盗摄| 亚洲成人一二三| 成人av影视在线观看| 精品国产一区二区国模嫣然| 亚洲一二三四区| 成人听书哪个软件好| 欧美一区二区三区小说| 亚洲视频免费在线观看| 国产成人午夜99999| 91精品国产aⅴ一区二区| 亚洲激情图片小说视频| 成人午夜短视频| 精品久久久久久久久久久久久久久 | 国产黄色91视频| 日韩精品中文字幕一区二区三区 | 日韩国产在线观看| 在线看国产日韩| 1000精品久久久久久久久| 国产专区综合网| 日韩一区二区高清| 午夜精品福利一区二区三区av | 椎名由奈av一区二区三区| 国产高清精品久久久久| 日韩一区二区三区视频在线观看| 亚洲一区av在线| 色久综合一二码| 亚洲免费观看高清完整版在线观看 | 免费观看91视频大全| 欧美日韩免费在线视频| 亚洲综合在线免费观看| 99久久精品99国产精品| 亚洲国产精品二十页| 国产精品正在播放| 久久蜜臀中文字幕| 国产一区 二区 三区一级| 日韩欧美专区在线| 久久www免费人成看片高清| 日韩欧美成人一区| 老司机午夜精品| 日韩精品在线网站| 黄页网站大全一区二区| 欧美成人官网二区| 激情欧美一区二区三区在线观看| 精品免费日韩av| 国产成人欧美日韩在线电影| 亚洲黄色小说网站| 色久综合一二码| 亚洲成人av福利| 日韩一级黄色大片| 国产一区二区女| 国产精品人人做人人爽人人添| 成人午夜在线免费| 亚洲美女屁股眼交3| 欧美中文字幕一二三区视频| 午夜精品成人在线视频| 91精品国产免费久久综合| 美女一区二区久久| 国产女同互慰高潮91漫画| 成人动漫av在线| 一区二区三区四区乱视频| 欧美日韩中文一区| 免费成人小视频| 久久精品水蜜桃av综合天堂| 成人国产亚洲欧美成人综合网| 国产精品区一区二区三| 色香蕉成人二区免费| 婷婷综合久久一区二区三区| 日韩三级视频在线看| 国产成人综合亚洲网站| 亚洲免费高清视频在线| 7799精品视频| 丰满亚洲少妇av| 亚洲永久免费视频| 日韩欧美亚洲国产另类| 成人v精品蜜桃久久一区| 亚洲一区二区黄色| 久久亚洲精品小早川怜子| av中文字幕一区| 毛片av一区二区三区| 国产精品人成在线观看免费 | 精品国产乱码久久久久久夜甘婷婷| 国产精品一区一区三区| 一区二区久久久久久| 精品国精品国产尤物美女| bt欧美亚洲午夜电影天堂| 天天操天天综合网| 亚洲婷婷国产精品电影人久久| 蜜臀久久99精品久久久画质超高清 | 成人毛片老司机大片| 国产精品国产三级国产aⅴ原创| 在线观看国产一区二区| 国产一区二区在线观看视频| 亚洲男女一区二区三区| 欧美变态凌虐bdsm| 色综合久久综合网97色综合 | 国产日韩高清在线| 国产一区二区三区香蕉| 精品成人a区在线观看| 久久66热偷产精品| 日韩精品中文字幕在线不卡尤物| 美女视频黄 久久| 欧美一区二区视频观看视频| 丝袜亚洲另类丝袜在线| 欧美日本一道本在线视频|