⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cf_test.c

📁 GM8120 linux driver.
💻 C
字号:
/**************************************************************************** Copyright  Faraday Technology Corp 2002-2003.  All rights reserved.      **--------------------------------------------------------------------------** Name: cf_test.c                                                          ** Description: CF test program                                             ** Author: Ted Hsu                                                          *****************************************************************************/#include <stdlib.h>#include <stdio.h>#include <time.h>#include "fLib.h"#include "filectrl.h"#include "cf.h"#include "sd.h"#include "command.h"#include "DMA.h"extern CFCardStruct fLib_CFCard;UINT32 count,count1, TimeCount,TimeCount1; UINT32 CFDevCmd(CommandTableStruct_T *CmdTable);UINT32 SectorReadCmd(CommandTableStruct_T *CmdTable);UINT32 SectorWriteCmd(CommandTableStruct_T *CmdTable);UINT32 DirCmd(CommandTableStruct_T *CmdTable);UINT32 ChangeDirCmd(CommandTableStruct_T *CmdTable);UINT32 MakeCmd(CommandTableStruct_T *CmdTable);UINT32 DeleteCmd(CommandTableStruct_T *CmdTable);UINT32 RenameCmd(CommandTableStruct_T *CmdTable);UINT32 CopyCmd(CommandTableStruct_T *CmdTable);UINT32 ReadFileCmd(CommandTableStruct_T *CmdTable);void CF_quit(void);CommandTableStruct_T CF_CmdTable[] ={	{{"cfdev", NULL,}, "cfdev [-r pio/dma]\n",		0, 0, 0, 0, 2, 2, CFDevCmd, 0, 0, 		{NULL,},		{			{"-r", IS_STR_WITH_OPTION, {"pio", "dma", NULL,}, NULL, 0, FALSE, "[-r] - re-initialize SD and set to PIO or DMA mode\n"}, 			{"-m", IS_STR_WITH_OPTION, {"memmap", "io16", "iopri", "iosec", "memwin", NULL,}, NULL, 0, FALSE, "[-r] - re-initialize SD and set to PIO or DMA mode\n"}, 		},	},	{{"sr", NULL,}, "sr sector_num sector_count\n",		0, 0, 2, 2, 0, 0, SectorReadCmd, 0, 0, 		{			{IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "sector_num - which sector to read\n"}, 			{IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "sector_count - number of sectors to read\n"}, 		},	},	{{"sw", NULL,}, "sw pattern sector_num sector_count\n",		0, 0, 3, 3, 0, 0, SectorWriteCmd, 0, 0, 		{			{IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "pattern - data to write\n"}, 			{IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "sector_num - which sector to write\n"}, 			{IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "sector_count - number of sectors to write\n"}, 		},	},	{{"dir", NULL,}, "dir [directory/file]\n",		0, 0, 1, 0, 0, 0, DirCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "[directory/file] - directory or file\n"}, 		},	},	{{"cd", NULL,}, "cd [directory]\n",		0, 0, 1, 1, 0, 0, ChangeDirCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "[directory] - directory\n"}, 		},	},	{{"mk", NULL,}, "mk [name] [-d]\n",		0, 0, 1, 1, 1, 0, MakeCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "[name] - file or directory name\n"}, 		},		{			{"-d", IS_NULL, {NULL,}, NULL, 0, FALSE, "[-d] - [name] is directory\n"}, 		},	},	{{"remove", "del", NULL,}, "remove/del [name] [-d]\n",		0, 0, 1, 1, 1, 0, DeleteCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "[name] - file or directory name\n"}, 		},		{			{"-d", IS_NULL, {NULL,}, NULL, 0, FALSE, "[-d] - [name] is directory\n"}, 		},	},	{{"rename", "ren", NULL,}, "rename/ren old_name new_name\n",		0, 0, 2, 2, 0, 0, RenameCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "old_name -\n"}, {IS_STR, NULL, 0, FALSE, "new_name -\n"},		},	},	{{"readfile", "rf", NULL,}, "readfile/rf file_name base length [-b/-h]\n", 		0, 0, 3, 3, 2, 0, ReadFileCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "file_name -\n"}, 		 	{IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "base -\n"}, 		 	{IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "length - N bytes for reading\n"},		},		{			{"-b", IS_NULL, {NULL,}, NULL, 0, FALSE, "[-b/-h] - " }, 			{"-h", IS_NULL, {NULL,}, NULL, 0, FALSE, NULL},		},	},		{{"copy", "cp", NULL,}, "copy/cp src_file dst_file\n",		0, 0, 2, 2, 0, 0, CopyCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "src_file -\n"}, 			{IS_STR, NULL, 0, FALSE, "dst_file -\n"},		},	},	{{"quit", NULL,}, "quit\n",		0, 0, 1, 0, 0, 0, CF_quit, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "quit\n"}, 		},	},		{NULL,	},};#define CF_DMA_CHANNEL		0//ivanint my_cf_quit=0;void CF_quit(){    my_cf_quit=1;}extern int ChipID;int CF_main(int argc, int *argv[]){    char Buf[0x80];	UINT32 Status;	UINT32 i,mode,result;  	   	printf("Select the mode: 1.PIO   2.DMA\r\n");   	scanf("%d",&mode);   	printf("\r");//ivan for FPGA testing modeif( ChipID == FPLAT_CPE120_ID2){//ivan for new IPif( ChipID == FPLAT_CPE120_ID2)     //disale command interrupt    *(unsigned int *)(CPE_CF_BASE+4) |= 0x400;	fLib_CloseInt(1);   	if (!fLib_ConnectInt(1, fLib_CFCntrInterruptHandler))		return FALSE;  //fLib_SetIntTrig(IRQ_CFC_CD,LEVEL,L_ACTIVE); 	fLib_SetIntTrig(1,LEVEL,H_ACTIVE); //ivan		fLib_EnableInt(1);  }	else  	{	fLib_CloseInt(IRQ_CFC_CD);   	if (!fLib_ConnectInt(IRQ_CFC_CD, fLib_CFCntrInterruptHandler))		return FALSE;  	fLib_SetIntTrig(IRQ_CFC_CD,LEVEL,L_ACTIVE);		fLib_EnableInt(IRQ_CFC_CD);    }          	fLib_InitDMA(FALSE, FALSE, 1 << CF_DMA_CHANNEL);    	// no-DMA, ATA-MEM	if(mode==1)        result=fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, FALSE, CF_DMA_CHANNEL, CF_MEM_MAP_MODE, 'C', SYS_CLK/2);	// DMA, ATA-MEM	else if(mode==2)	    result=fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, TRUE, CF_DMA_CHANNEL, CF_MEM_MAP_MODE, 'C', SYS_CLK/2);	// DMA, ATA-IO	//if(!fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, TRUE , CF_DMA_CHANNEL, CF_IO_SECCH_MODE , 'C', SYS_CLK/2))	if(!result)	{		printf("Can not found CF card, Please insert!!!\n");	    Status = ReadCFControllerReg(HOST_STATUS_REG);		while (1) {	       if ( (Status & CARD_DETECT_BIT))		      break; 	       Status = ReadCFControllerReg(HOST_STATUS_REG);		}		//return FALSE;	}			fLib_InsertCommand(CF_CmdTable);	fLib_InitUserSymbol(NULL);#if 1	while(my_cf_quit==0)	{		printf("CF>>>\n");		gets(Buf);		fLib_ExecuteCommand(Buf);	}	fLib_CloseInt(1);	fLib_CloseInt(IRQ_CFC_CD);    my_cf_quit=0;#else	    while (1) {		for (i=2;i<123;i++) {		  sprintf(Buf,"cp p1.jpg f%d.jpg",i); 		  //sprintf(Buf,"sr %d 4",i*8);	      fLib_ExecuteCommand(Buf);		}	}#endif    return TRUE;}UINT32 CFDevCmd(CommandTableStruct_T *CmdTable){	if (CmdTable->Opt[0].IsSet) {		fLib_CFCardRemove(&fLib_CFCard);		if (CmdTable->Opt[0].Value == 0) {			if (!fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, FALSE, 				                      CF_DMA_CHANNEL, CmdTable->Opt[1].Value, 'C', SYS_CLK/2))			{				printf("Can not found CF card!!!\n");				return FALSE;			}		}		else {			if (!fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, ENABLE, 				                       CF_DMA_CHANNEL, CmdTable->Opt[1].Value, 'C', SYS_CLK/2))			{				printf("Can not found CF card!!!\n");				return FALSE;			}		}	}	return TRUE;}UINT32 SectorReadCmd(CommandTableStruct_T *CmdTable){	INT8 Buf[0x800];	int	i;	/*	ReadDriveIdentifyInfo(&fLib_CFCard);	ReadCFCardCISInformation(&fLib_CFCard);		printf("ok\n");*/		if(!fLib_ReadCFCardSector(&fLib_CFCard, CmdTable->Argu[0].Value, 		                      CmdTable->Argu[1].Value, 512, Buf))	{		printf("read error!!!\n");	}	else		printf("\nread OK!!!\n");#if 0		for(i = 0; i < 512 * CmdTable->Argu[1].Value; i++)	{		if((i % 16) == 0)			printf("\n%0.4X ", i);		printf("%0.2X ", Buf[i]);	}	return OK_COMMAND;#endif		return OK_COMMAND;}UINT32 SectorWriteCmd(CommandTableStruct_T *CmdTable){	INT8 Buf[0x800];	int	i;		for(i = 0; i < 512;i++)		Buf[i] = CmdTable->Argu[0].Value + i;			if(!fLib_WriteCFCardSector(&fLib_CFCard, CmdTable->Argu[1].Value, 		                       CmdTable->Argu[2].Value, 512, Buf)) 	{		printf("Write error!!!\n");		return ERROR_COMMAND;	}	else		printf("Write OK!!!\n");	return OK_COMMAND;}UINT32 DirCmd(CommandTableStruct_T *CmdTable){	INT8 MsgStr[0x800];		if(!fLib_DirDirectory((CmdTable->Argu[0].IsSet ? CmdTable->Argu[0].Str : NULL), MsgStr))		return ERROR_COMMAND;	printf(MsgStr);		return OK_COMMAND;}UINT32 ChangeDirCmd(CommandTableStruct_T *CmdTable){	if(fLib_ChangeDirectory(CmdTable->Argu[0].Str)) {		printf("Change to %s directory OK!!!\n", CmdTable->Argu[0].Str);		return OK_COMMAND;	}	else {		printf("Change to %s directory error!!!\n", CmdTable->Argu[0].Str);	}	return ERROR_COMMAND;}UINT32 MakeCmd(CommandTableStruct_T *CmdTable){	if(CmdTable->Opt[0].IsSet) {  // make directory		if(fLib_MakeDirectory(CmdTable->Argu[0].Str))		{			printf("Make %s directory OK!!!\n", CmdTable->Argu[0].Str);			return OK_COMMAND;		}	}	else	{		if(fLib_MakeEmptyFile(CmdTable->Argu[0].Str))		{			printf("Make %s file OK!!!\n", CmdTable->Argu[0].Str);			return OK_COMMAND;		}	}	printf("Make %s file or directory error!!!\n", CmdTable->Argu[0].Str);	return ERROR_COMMAND;}UINT32 DeleteCmd(CommandTableStruct_T *CmdTable){	if (CmdTable->Opt[0].IsSet) {   // delete directory		if (fLib_DeleteDirectory(CmdTable->Argu[0].Str)) {			printf("Del %s directory OK!!!\n", CmdTable->Argu[0].Str);			return OK_COMMAND;		}	}	else {  // delete file		if (remove(CmdTable->Argu[0].Str) != -1) {			printf("Del %s file OK!!!\n", CmdTable->Argu[0].Str);			return OK_COMMAND;		}	}		printf("Del %s directory or file error!!!\n", CmdTable->Argu[0].Str);	return ERROR_COMMAND;}UINT32 RenameCmd(CommandTableStruct_T *CmdTable){	if(rename(CmdTable->Argu[0].Str, CmdTable->Argu[1].Str) != 0)	{			printf("Can not rename %s file!!!\n", CmdTable->Argu[0].Str);		return ERROR_COMMAND;	}	printf("%s file has been rename to %s!\n", CmdTable->Argu[0].Str, CmdTable->Argu[1].Str);	return OK_COMMAND;}UINT32 CopyCmd(CommandTableStruct_T *CmdTable){	FILE *src, *dst;	INT8 *buf;	INT32 nRead;	UINT32 StartTime, EndTime;		if((src = fopen(CmdTable->Argu[0].Str, "r")) == NULL)	{		printf("Can not open %s file for reading\n", CmdTable->Argu[0].Str);		return ERROR_COMMAND;	}	if((dst = fopen(CmdTable->Argu[1].Str, "w")) == NULL)	{		printf("Can not open %s file for writting\n", CmdTable->Argu[1].Str);		fclose(src);		return ERROR_COMMAND;	}	buf = malloc(5000);		StartTime = clock();	while(!feof(src))	{		nRead = fread(buf, 1, 4096, src);		//printf("nread=%d\n", nRead);		fwrite(buf, 1, nRead, dst);	}		EndTime = clock();		printf("Executes %d ticks\n", EndTime-StartTime);	fclose(dst);	fclose(src);		free(buf);	return OK_COMMAND;}UINT32 ReadFileCmd(CommandTableStruct_T *CmdTable){   return TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -