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

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

?? jblaster.c

?? software for report builder
?? C
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************/
/*                                                                */
/* Module:       jblaster.c                                       */
/*                                                                */
/* Descriptions: Main source file that manages the configuration  */
/*               processes.                                       */
/*                                                                */
/* Revisions:    1.0 02/22/02                                     */
/*                                                                */
/******************************************************************/

/* $Id: jblaster.c,v 1.1.1.1 2002/12/03 23:49:16 x42 Exp $ */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "jb_io.h"
#include "jb_jtag.h"
#include "jb_const.h"
#include "jb_device.h"

//#if PORT==WINDOWS_NT
void SetPortMode      (int mode);
//#endif /* PORT==WINDOWS_NT */

/* JBlaster Controller Functions */
int  VerifyChain      ();
void DriveSignal      (int signal,int data,int clk,int test);
void Configure        (int file_id,int dev_seq,int action);
void ProcessFileInput (int finputid);
int  CheckStatus      (int dev_seq);
void Startup          (int dev_seq);
void Help             ();

/* CDF Parser Functions */
int  ReadCDF          (int file_id);
int  GetData          (char* charset,char* buffer,char* data);
void SearchKeyword    (char* buffer,char* data);
int  CheckActionCode  (char* data);
void CheckAltDev      (int dev_seq);

/* JTAG instruction lengths of all devices */
int  ji_info[MAX_DEVICE_ALLOW] = {0};

/* extern configuration */
#ifndef LINUX_PARPORT
extern unsigned short	 lpt_addr;
#else
extern char 	devicepath[256];
#endif


int main(int argc, char* argv[])
{
	int i=0;
	int file_id=0;
	int config_count=0;
		
	/**********Initialization**********/

	/* Introduction */
	fprintf(stdout,"\n======================================================\n");
	fprintf(stdout," JTAGBlaster (JBlaster) Version %s",VERSION);
	fprintf(stdout,"\n Altera Corporation ");
	fprintf(stdout,"\n Linux patch 11/02 by Robin Gareus <robin@gareus.org>");
	fprintf(stdout,"\n======================================================\n");

	/* set default values */
#ifdef LINUX_PARPORT
	snprintf(devicepath,255,"/dev/parport0");
#else
	lpt_addr = 0x378;
#endif

        if(argc > 1)
        {
          /* Parse Command Line Arguments */
          argc--;
          argv++;
          for (; argc-- > 0; argv++)
            {
              if (strcmp (*argv, "--help") == 0 || strcmp (*argv, "-h") == 0)
                {
			Help();
			exit(1);
                }
              else if ((strcmp (*argv, "-d") == 0 || strcmp (*argv, "--device") == 0) && argc > 0)
		{
                  argc--;
                  argv++;
#ifndef LINUX_PARPORT
		  { int x; sscanf(*argv,"%x",&x); lpt_addr= (unsigned short) x;}
		  printf("Info: using parport address 0x%x.\n",lpt_addr);
#else
		  snprintf(devicepath,255,"%s",*argv);
		  printf("Info: using parport device: '%s'.\n",devicepath);
#endif
                }
		else break;
            }
        }

	if (argc!=0) {
		Help();
		exit(1);
	}

	/* Open CDF file */
	file_id = jb_fopen(*argv,"rb");

	if(file_id)
		fprintf(stdout,"Info: Chain Description File: \"%s\" opened..\n", *argv);
	else
	{
		fprintf(stderr,"Error: Could not open Chain Description File (CDF): \"%s\"!\n",*argv);
		return(2);
	}

	/**********Hardware Setup**********/

#if PORT==WINDOWS_NT
	InitNtDriver();
	/* Check if hardware is properly installed */
	if(VerifyHardware())
	{
		jb_fclose(file_id);
		return(2);
	}
#elif PORT == LINUX
        InitLinuxDriver();
	/* Check if hardware is properly installed */
	if(VerifyHardware())
	{
		jb_fclose(file_id);
		return(2);
	}
#endif 

	/**********CDF Parsing**********/

	fprintf( stdout, "\nInfo: Parsing CDF...\n" );

	if(!ReadCDF(file_id))
	{
		jb_fclose(file_id);
		return(2);
	}

	jb_fclose(file_id);
	fprintf( stdout, "Debug: Parsing done.\n" );

	if(!device_count)
		return(2);

	for(i=0;i<device_count;i++)
	{
		if(!ji_info[i])
		{
			fprintf(stderr,"Error: JTAG instruction length of device #%d NOT specified!\n",i);
			return(2);
		}
	}

	/**********Device Chain Verification**********/

	fprintf( stdout, "\nInfo: Verifying device chain...\n" );

/*#if PORT==WINDOWS_NT */ /* why only in Windows? disabled  */
	SetPortMode(PM_RESET);
/* #endif */ /* PORT==WINDOWS_NT */
	/* Verify the JTAG-compatible devices chain */
	if(VerifyChain())
		return(2);

	/**********Show Info***********/
	fprintf(stdout,"Debug: (1)jseq_max (2)jseq_conf_done (3)action (4)partname (5)path (6)file (7)inst_len\n");
	for(i=0;i<device_count;i++)
	{
		fprintf(stdout,"Debug: (1)%d (2)%d (3)%c (4)%s (5)%s (6)%s (7)%d\n",
			device_list[i].jseq_max,device_list[i].jseq_conf_done,device_list[i].action,device_list[i].partname,
			device_list[i].path,device_list[i].file,device_list[i].inst_len);
	}

	/**********Configuration**********/
	file_id=0;

	for(i=1;i<device_count+1;i++)
	{
		char fullpath[CDF_PATH_LEN+CDF_FILE_LEN];

		config_count=0;

		if(device_list[i-1].action != 'P')
			continue;

		while(config_count<MAX_CONFIG_COUNT)
		{
			if(!config_count)
				fprintf( stdout, "\nInfo: Configuration setup device #%d\n",i);
			else
				fprintf( stdout, "\nInfo: Configuration setup device #%d (Retry)\n",i);

			config_count++;
			
			/* Open programming file as READ and in BINARY */
			jb_strcpy(fullpath,device_list[i-1].path);
			jb_strcat(fullpath,device_list[i-1].file);

			file_id = jb_fopen( fullpath, "rb" );
		
			if ( file_id )
				fprintf( stdout, "Info: Programming file #%d: \"%s\" opened...\n", i,fullpath );
			else
			{
				fprintf( stderr, "Error: Could not open programming file #%d: \"%s\"\n", i,fullpath );
				return(2);
			}

			/* Start configuration */
			Configure(file_id,i,(device_list[i-1].idcode? JI_PROGRAM:JI_BYPASS));

// #if PORT==WINDOWS_NT
			flush_ports();
// #endif /* PORT==WINDOWS_NT */
			jb_fclose(file_id);
		
			if(CheckStatus(i))
			{
				fprintf( stdout, "\nWarning: Configuration of device #%d NOT successful!\n",i );
			}
			else
			{
				Startup(i);
				config_count=MAX_CONFIG_COUNT;
				fprintf( stdout, "\nInfo: Configuration of device #%d successful...\n",i );
			}
		}
	}

// #if PORT==WINDOWS_NT
	SetPortMode(PM_USER);
// #endif /* PORT==WINDOWS_NT */

	return(0);
}

/******************************************************************/
/* Name:         ReadCDF                                          */
/*                                                                */
/* Parameters:   file_id                                          */
/*               -file handler                                    */
/*                                                                */
/* Return Value: The number of devices in chain found in CDF      */
/*                                                                */
/* Descriptions: ReadCDF parses through the CDF and keeps the     */
/*               device records. It looks for 'P' or 'N' when     */
/*               mark=0. Once found, it searches for "ActionCode" */
/*               when mark=1 and once mark=2, it starts to        */
/*               retrieve the data in device record declarations. */
/*                                                                */
/******************************************************************/
int ReadCDF(int file_id)
{
	char  buffer[160];    /* line buffer */
	char  data[50];       /* device record data between '(' and ')' */
	int   mark= 0;
	
	while(jb_fgets(buffer,file_id))
	{
		if (mark==1)
		{
			mark =2;

			if(GetData("ACTIONCODE",buffer,data))
			{
				if(!CheckActionCode(data))
					return 0;
			}

			device_count++;

			SearchKeyword(buffer,data);

			/* End of device record and reset flag */
			if(jb_str_cmp(";",buffer))
				mark=0;
		}
		else if (mark==2)
		{
			SearchKeyword(buffer,data);

			/* End of device record and reset flag */
			if(jb_str_cmp(";",buffer))
				mark=0;
		}
		else if(jb_str_cmp("P ",buffer) || jb_str_cmp("N ",buffer))
		{
			mark++;
			
			if(GetData("ACTIONCODE",buffer,data))
			{
				if(!CheckActionCode(data))
					return 0;

				/* End of device record and reset flag */
				if(jb_str_cmp(";",buffer))
				{
					device_count++;

					SearchKeyword(buffer,data);
				
					mark=0;
				}
			}
		}
		else
		{
			continue;
		}
	}

	fprintf( stdout, "Debug: Parsed %i Entrys.\n",device_count);
	return device_count;
}

/******************************************************************/
/* Name:         GetData                                          */
/*                                                                */
/* Parameters:   charset, buffer, data                            */
/*               -charset is the character string or keyword to   */
/*                look for.                                       */
/*               -buffer is the line buffer stored when reading   */
/*                the CDF.                                        */
/*               -data is the string between brackets, '(' and ')'*/
/*                                                                */
/* Return Value: The position of the first character of charset   */
/*               found in buffer.                                 */
/*             		                                          */
/* Descriptions: The function copies the string between brackets  */
/*               right after charset into data. If charset is not */
/*               found in buffer, '0' is returned.                */
/*                                                                */
/******************************************************************/
int GetData(char* charset,char* buffer,char* data)
{
	int   char_count=0,i;
	char* buff_pointer;
	char* data_pointer;
	int   mark=0;
	char * tmpbuf = malloc(sizeof(char)*jb_strlen(buffer));
	strncpy (tmpbuf,buffer,jb_strlen(buffer));

	jb_toupper(charset);
	jb_toupper(tmpbuf);
	
	/* looking for charset in buffer */
	char_count= jb_str_cmp(charset,tmpbuf);

	/* charset not found in buffer */
	if(!char_count)
		return 0;

	data_pointer= data;
	buff_pointer= buffer;
	buff_pointer+= char_count-1+jb_strlen(charset);

	for(i=0;i<jb_strlen(buffer)-1;i++)
	{
		if(*buff_pointer=='(')
		{
			mark++;
		}
		else if(*buff_pointer==')')
		{
			if(mark==1)
			{
				fprintf(stderr,"Error: Invalid Action Code!\n");
				return 0;
			}

			/* put a null-zero to indicate the end of string to data */
			*data_pointer= '\0';
			break;
		}
		else if(mark)
		{
			mark=2;
			/* ignore '"' character */
			if(*buff_pointer!='"')
			{
				*data_pointer = *buff_pointer;
				data_pointer++;
			}
		}
		else
			return 0;

		buff_pointer++;
	}

//	jb_toupper(data);

	return char_count;
}

/******************************************************************/
/* Name:         CheckActionCode                                  */
/*                                                                */
/* Parameters:   data                                             */
/*               -The 3 character string indicating the action    */
/*                                                                */
/* Return Value: '0' if valid action code is detected, '1' if not */
/*                                                                */
/* Descriptions: Update the action to take in device list.        */
/*               A 'B' or a 'P' is stored for BYPASS and PORGRAM/ */
/*               CONFIGURE respectively.                          */
/*                                                                */
/******************************************************************/
int CheckActionCode(char* data)
{
	if(!jb_strcmp(data,"IGN"))
		device_list[device_count].action= 'B';
	else if(!jb_strcmp(data,"CFG"))
		device_list[device_count].action= 'P';
	else
	{
		fprintf(stderr,"\nError: Invalid ActionCode: %s\n",data);
		return 0;
	}

	return 1;
}

/******************************************************************/
/* Name:         SearchKeyword                                    */
/*                                                                */
/* Parameters:   buffer, data                                     */
/*               -buffer is the line buffer stored when reading   */
/*                the CDF.                                        */
/*               -data is the string between brackets, '(' and ')'*/
/*                found in buffer.                                */
/*                                                                */
/* Return Value: None.                                            */
/*               		                                          */
/* Descriptions: The function search for device records corres-   */
/*               pond to part name, path, file name and           */
/*               instruction length.                              */
/*                                                                */
/******************************************************************/
void SearchKeyword(char* buffer,char* data)
{
	char  Info_name[4][20] = { "PARTNAME","PATH","FILE","INSTRUCTIONREG" };
	int   i;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品福利在线| 国产成人精品影视| 久久理论电影网| 91女人视频在线观看| 蜜桃久久av一区| 亚洲精选视频免费看| 精品奇米国产一区二区三区| 色欧美乱欧美15图片| 国产一区二区不卡老阿姨| 最新中文字幕一区二区三区 | 国产一区二区三区观看| 中文字幕在线视频一区| 日韩一区二区免费视频| 91久久精品日日躁夜夜躁欧美| 国产伦精一区二区三区| 亚洲国产美女搞黄色| 国产精品久久久久aaaa| 久久久综合视频| 欧美一级久久久久久久大片| 波多野结衣在线一区| 久久99国产精品久久| 日韩精品电影一区亚洲| 亚洲综合男人的天堂| 国产精品久久久久久久久免费相片| www亚洲一区| 日韩女同互慰一区二区| 欧美日韩夫妻久久| 欧美日韩视频在线第一区| 99vv1com这只有精品| 国产99精品视频| 国产麻豆视频一区二区| 麻豆精品在线视频| 亚洲第一成人在线| 一区二区三区不卡视频| 洋洋成人永久网站入口| 亚洲日本一区二区| 国产精品国产a级| 最新日韩在线视频| 自拍偷拍亚洲欧美日韩| 中文天堂在线一区| 中文字幕第一区综合| 久久亚洲精华国产精华液| 日韩久久久精品| 日韩欧美另类在线| 91精品国产黑色紧身裤美女| 欧美卡1卡2卡| 日韩一级片网站| 2023国产精品视频| 国产日韩欧美亚洲| 国产精品免费看片| 中文字幕一区二区三区不卡在线| 国产精品福利一区| 亚洲激情图片一区| 日韩电影免费在线观看网站| 免费高清成人在线| 国精产品一区一区三区mba视频| 国产在线视频精品一区| 国产精品伊人色| av成人免费在线| 在线影院国内精品| 欧美日韩成人激情| 精品国产伦理网| 中文字幕va一区二区三区| 日韩毛片视频在线看| 一区二区三区四区激情| 免费欧美日韩国产三级电影| 国产一区二区福利视频| 9i看片成人免费高清| 欧美日韩在线播| 日韩视频免费观看高清完整版在线观看| 日韩一区二区三区电影在线观看| 久久久精品综合| 一区二区三区成人在线视频| 亚洲va欧美va人人爽午夜| 六月丁香婷婷久久| 波多野结衣欧美| 欧美丝袜自拍制服另类| 精品福利在线导航| 中文字幕日韩一区二区| 天天色综合天天| 国产精品18久久久久久久久久久久| 91日韩在线专区| 日韩一区二区三区av| 中文字幕日本乱码精品影院| 日韩在线播放一区二区| 国产aⅴ精品一区二区三区色成熟| 色呦呦网站一区| 精品福利av导航| 亚洲一区中文在线| 国产精品亚洲第一区在线暖暖韩国| 在线视频亚洲一区| 精品国产一区久久| 亚洲一卡二卡三卡四卡五卡| 国产一区二区女| 欧美人与性动xxxx| 成人欧美一区二区三区小说| 麻豆成人在线观看| 欧美丝袜丝交足nylons| 中文字幕乱码日本亚洲一区二区 | 国产色产综合色产在线视频| 一区二区三区免费看视频| 激情成人综合网| 欧美三级韩国三级日本一级| 国产欧美精品一区二区色综合| 日韩中文字幕1| 色天使久久综合网天天| 欧美国产1区2区| 国模冰冰炮一区二区| 欧美精品久久久久久久多人混战 | 亚洲综合激情另类小说区| 国产91高潮流白浆在线麻豆 | 日韩限制级电影在线观看| 国产精品福利一区二区三区| 国产高清无密码一区二区三区| 欧美一区二区高清| 天天综合色天天| 91黄色免费网站| 亚洲色图欧美激情| 不卡av在线网| 久久久高清一区二区三区| 激情成人午夜视频| 日韩欧美的一区| 免费亚洲电影在线| 在线综合亚洲欧美在线视频| 亚洲国产一二三| 欧美在线观看视频在线| 亚洲三级免费观看| av电影天堂一区二区在线观看| 久久久久久日产精品| 久久se这里有精品| 欧美videofree性高清杂交| 亚洲mv大片欧洲mv大片精品| 欧美性视频一区二区三区| 亚洲欧美日韩国产综合在线| 成人美女在线观看| 亚洲欧洲一区二区三区| youjizz国产精品| 国产精品久久久久久久浪潮网站| 成人深夜在线观看| 亚洲国产精品传媒在线观看| 成人综合在线观看| 国产精品国产自产拍在线| 成人国产亚洲欧美成人综合网 | 欧美精品1区2区3区| 性做久久久久久久免费看| 欧美日韩国产乱码电影| 日本欧美一区二区在线观看| 日韩精品一区二区三区中文精品| 精品一区二区在线播放| 久久青草欧美一区二区三区| 国产成人精品免费网站| 国产精品美女一区二区在线观看| www.色综合.com| 亚洲国产中文字幕| 91精品蜜臀在线一区尤物| 麻豆精品一二三| 亚洲欧美另类图片小说| 欧美高清视频www夜色资源网| 免费精品99久久国产综合精品| 欧美成人乱码一区二区三区| 国产精品一区二区三区网站| 亚洲欧洲另类国产综合| 色婷婷av一区| 另类小说图片综合网| 久久精品人人做| 91一区二区在线| 日韩精品视频网| 久久久久久久久岛国免费| 色综合久久久久网| 日韩精品1区2区3区| 国产区在线观看成人精品| 日本电影欧美片| 另类欧美日韩国产在线| 成人免费一区二区三区在线观看| 欧美色网站导航| 国产剧情一区二区| 亚洲午夜激情av| 久久久久国产成人精品亚洲午夜| 91福利资源站| 国产精品一区免费视频| 亚洲综合色成人| 久久久国产精华| 51精品视频一区二区三区| 国产91精品在线观看| 香蕉影视欧美成人| 国产精品美女久久久久久久久久久 | 亚洲成va人在线观看| 久久免费视频色| 欧洲生活片亚洲生活在线观看| 日韩高清不卡在线| 国产精品国产三级国产aⅴ原创| 欧美午夜不卡在线观看免费| 国产成人亚洲综合a∨婷婷| 亚洲成av人片一区二区梦乃| 国产欧美日韩视频一区二区| 欧美日韩在线三区| av一二三不卡影片| 青青草一区二区三区| 一区二区三区色| 久久久久99精品一区|