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

📄 filesystemcomtrol.c

📁 FIC8120方案的 StartCell_Driver
💻 C
📖 第 1 页 / 共 2 页
字号:
	
	printk("Del %s directory or file error!!!\n", CmdTable->Argu[0].Str);
	u8Drive = CurrentDrive;
	return ERROR_COMMAND;

}
//***************************************************************************************
// Function Name: 
// Description:
// Input:
// Output:
// Status:
//***************************************************************************************
UINT32 USB_RenameCmd(CommandTableStruct_T *CmdTable)
{
	// Change u8Drive to Drive whitch we want to operate, and do SCSI command check,
	// This check is important.
	vScsi_Device_Check(CmdTable->Argu[0].Str);
	
	if(rename(CmdTable->Argu[0].Str, CmdTable->Argu[1].Str) != 0)
	{	
		printk("Can not rename %s file!!!\n", CmdTable->Argu[0].Str);
		u8Drive = CurrentDrive;
		return ERROR_COMMAND;
	}
	printk("%s file has been rename to %s!\n", CmdTable->Argu[0].Str, CmdTable->Argu[1].Str);
	u8Drive = CurrentDrive;
	return OK_COMMAND;
}
//***************************************************************************************
// Function Name: 
// Description:
// Input:
// Output:
// Status:
//***************************************************************************************
UINT32 USB_CopyCmd(CommandTableStruct_T *CmdTable)
{
	FILE *src, *dst;
	INT8 *buf;
	INT32 nRead;
	
	
	// Change u8Drive to Drive whitch we want to operate, and do SCSI command check,
	// This check is important.
	vScsi_Device_Check(CmdTable->Argu[0].Str);	
	if((src = fopen(CmdTable->Argu[0].Str, "r")) == NULL)
	{
		printk("Can not open %s file for reading\n", CmdTable->Argu[0].Str);
		u8Drive = CurrentDrive;
		return ERROR_COMMAND;
	}
//	fseek(src,1025,SEEK_SET);
	
	vScsi_Device_Check(CmdTable->Argu[1].Str);	
	if((dst = fopen(CmdTable->Argu[1].Str, "w")) == NULL)
	{
		printk("Can not open %s file for writting\n", CmdTable->Argu[1].Str);
		u8Drive = CurrentDrive;
		fclose(src);
		return ERROR_COMMAND;
	}

	buf = malloc(65536);	

	while(!feof(src))
	{
		nRead = fread(buf, 1, 65536, src);
		//printk("nread=%d\n", nRead);
		fwrite(buf, 1, nRead, dst);
	}
	

	

	fclose(dst);
	fclose(src);
	
	free(buf);
	u8Drive = CurrentDrive;
	return OK_COMMAND;
}

//***************************************************************************************
// Function Name: 
// Description:
// Input:
// Output:
// Status:
//***************************************************************************************
// Compare file
UINT32 USB_CmpCmd(CommandTableStruct_T *CmdTable)
{
	FILE *src, *dst;
	INT8 *f1buf,*f2buf;
	INT32 nRead1,nRead2,nTotalRead;

  BOOL bResult=TRUE;
  int i;
	
	// Change u8Drive to Drive whitch we want to operate, and do SCSI command check,
	// This check is important.
	vScsi_Device_Check(CmdTable->Argu[0].Str);	
	if((src = fopen(CmdTable->Argu[0].Str, "r")) == NULL)
	{
		printk("Can not open %s file for reading\n", CmdTable->Argu[0].Str);
		u8Drive = CurrentDrive;
		return ERROR_COMMAND;
	}
//	fseek(src,1025,SEEK_SET);
	
	vScsi_Device_Check(CmdTable->Argu[1].Str);	
	if((dst = fopen(CmdTable->Argu[1].Str, "r")) == NULL)
	{
		printk("Can not open %s file for writting\n", CmdTable->Argu[1].Str);
		u8Drive = CurrentDrive;
		fclose(src);
		return ERROR_COMMAND;
	}

	f1buf = malloc(65536);
  f2buf = malloc(65536);

  nTotalRead = 0;
  bResult=TRUE;
	while( (!feof(src)) && (!feof(dst)) )
	{
		nRead1 = fread(f1buf, 1, 65536, src);
    nRead2 = fread(f2buf, 1, 65536, dst);
    if ( nRead1 != nRead2 )
    {
      printk("Compare data error Read bytes does not equal nRead1=%d,nRead2=%d\n",nRead1,nRead2);
      bResult=FALSE;
      break;
    }
    for(i=0;i<nRead1;i++)
    {
      if ( f1buf[i] != f2buf[i] )
      {
        printk("Compare data error [%dth byte]\n",nTotalRead+i);
        bResult=FALSE;
        break;
      }
    }
    nTotalRead+=nRead1;
    if ( bResult == FALSE )
      break;
	}
	

	

	fclose(dst);
	fclose(src);
	free(f1buf);
	free(f2buf);
	u8Drive = CurrentDrive;
  if ( bResult == TRUE )
  {
    printk("Compare Ok..Files are the same!!\n");
    return OK_COMMAND;
  }
	return ERROR_COMMAND;;
}
//***************************************************************************************
// Function Name: 
// Description:
// Input:
// Output:
// Status:
//***************************************************************************************
UINT32 USB_OpCmd(CommandTableStruct_T *CmdTable)
{
	switch ( CmdTable->Argu[0].Value)
  {
    case 0:
      bQuit = 1;
      break;
    case 1:
      bQuit = 1;
      break;
  }
	return OK_COMMAND;
}
//***************************************************************************************
// Function Name: 
// Description:
// Input:
// Output:
// Status:
//***************************************************************************************
void vScsi_Device_Check(INT8U* u8Str)
{
  INT8U u8Tmp;
  u8Tmp = u8Drive;
	if(u8Str[1] == ':')
	{
		if(isupper(u8Str[0]))
			u8Drive = u8Str[0] - 'A'; 
		else if(islower(u8Str[0]))
			u8Drive = u8Str[0] - 'a'; 
	}
  
  //Check if access SD disk but mass storage at remote side
  if ( u8Drive == 18 )
  {
    u8Drive = u8Tmp;
    printk("Access SD card...\n");
    return;
  }
	
	if((Mass_stor_us->Mass_stor_device[u8Drive].bDeviceReady == FALSE))
		bUSBDisk_FileSystem_Initial();
	
	if(GetFileSystem((INT32U)u8Drive) == NULL)
		return;
	// Before execut any command, must do these SCSI check.			
	bSCSI_TEST_UNIT_READY();
    //john mark for STALL	bSCSI_MODE_SENSE();		
}
//***************************************************************************************
// Function Name: 
// Description:
// Input:
// Output:
// Status:
//***************************************************************************************
void vGetCurrentPath(INT8U* u8Path)
{
	INT8U u8CurrentDrive[2];
	u8CurrentDrive[0] = 'A'+(INT8U)CurrentDrive;
	u8CurrentDrive[1] = NULL;
	
	sprintf(u8Path,"%s:%s",u8CurrentDrive,(Mass_stor_us->Mass_stor_device[CurrentDrive].FileSys.CurrDir.DirName));	
}



//===============================================================================================
//===============================================================================================
//===============================================================================================
//============================= Group-3: Main Function Implement ================================
//===============================================================================================
//===============================================================================================
//===============================================================================================

//***************************************************************************************
// Function Name: Host20_MSCD_MassStorage_Main
// Description:
// Input:
// Output:
// Status:S
//***************************************************************************************
void Host20_MSCD_MassStorage_Main(void)
{
   char Buf[80],u8Tmp,DirPath[128];
   UINT32 i;
   UINT32 status; 
  
   fLib_InsertCommand(UsbDisk_CmdTable);
   fLib_InitUserSymbol(NULL);	
  
   //<1>.Init Bulk Transfer
   OTGH_PT_Bulk_Init(); 

   //<2>.Init Control Transfer
   //  Host20_MSCD_Init_Control_Transfer();
 
   //<2>.To get the max Lun
   // Host20_MSCD_GetMaxLUN();


   //<3>.Init the File System
   //Get Max LUN
   Mass_stor_us=&us_data_Signal;
   Mass_stor_us->Mass_stor_device=&Mass_stor_device_1;
 
   Mass_stor_us->max_lun=1;//Only support 1 LUN
   bUSBDisk_FileSystem_Initial();	
   Mass_stor_us->bFileSystemInit = TRUE;    
     
   //<4>.Enter the Command-Line mode
   printf("==================================================\n");
   printf(">>> Enter the USB MassStorage Command-Line Mode...\n");
   printf("==================================================\n");

   bQuit = 0;

   while(bQuit==0)
   {
      printk("\nUSB Disk>>");
	  vGetCurrentPath(DirPath);
	  printk("%s\\\n",DirPath);

	  memset(Buf, 0x00, 80);

	  for(i = 0; i<80; i++)
	  {
	     do
		 {
		    status=inw(DebugSerialPort+SERIAL_LSR);
		 }while (!((status & SERIAL_LSR_DR)==SERIAL_LSR_DR));	// wait until Rx ready
			
		 u8Tmp = inw(DebugSerialPort + SERIAL_RBR); 
		 fLib_DebugPrintChar(u8Tmp);
		 if(u8Tmp == 0x8)
		 {
		    if(i > 0)
			{
			   fLib_DebugPrintChar(0x20);
			   fLib_DebugPrintChar(u8Tmp);
			   Buf[i-1]=0;
			   i = i-2;
			}
			else if(i == 0)
			   i--;
		}			
		else if(u8Tmp == 0xD)
		   break;
	    else
	       Buf[i] = u8Tmp;
	  }//for(i = 0; i<80; i++)

	  if( (Mass_stor_us != NULL) || ( (Buf[0] == 'o') && (Buf[1] == 'p') ) )
	  {
	     fLib_ExecuteCommand(Buf);
	  }
	  else
	  {
	     printk("no device attach now!!\n");
	  }
   }//while(bQuit == FALSE)
   OTGH_PT_Bulk_Close();
}



⌨️ 快捷键说明

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