dinfo.c

来自「M-System DOC(Disk on a Chip) Flash芯片的诊断工」· C语言 代码 · 共 272 行

C
272
字号
#include "unitinc.h"

const EXCHAR *exUtilCommands[] =
{
	"MORE",
    "WIN",
	"IPL",
    "OTP",
	"CFG",
	"BBT",
	"BDK",
	"BDTL",
	"IPL",
	"REG",
	"WIN",
	"WINL",
	"WINH",
	"EXB",
	"LOG",
	"IMG",
	"LEVEL",
    "EXTRA",
	"H",
    "yuri",
    "SHIFT",
    "WIDTH",
    "FAST",
	"?",
	LAST_COMMAND
};


Option_t          Option;
Media_t           Media, SpareMedia;
ExDevice          logFileDev;
dword             DOCAddress = 0xFFFFFFFF; /* default val that will show when DOCAddress wasn't set */
dword             DOCLowAddress = 0xFFFFFFFF;
dword             DOCHighAddress = 0xFFFFFFFF;
EXBYTE            bPrintLevel=0;

FLStatus SwitchModules()
{
  FLStatus    Status = flOK;
  EXBYTE			i      = 0;

  if( Option.LogFileName )
  {
    OpenSerialWriteFileDevice( &logFileDev, Option.LogFileName );
  }

  Status = DINFO_flInit();
  if( STATUS_ERROR )
    return Status;


  /* if no window specify - Run loop on all Sockets ! */
  for( i = 0 ; i < noOfSockets ; i++ )
  {
    Status = DINFO_INFO(i);
	if( STATUS_ERROR )
	  return Status;

	/* WE ALWAYS DISPLAY CONFIG INFORMATION */
	/* if( Option.CFGflag) */

	  Status = DINFO_CONFIG(i);
	  if( STATUS_ERROR )
	  {
		if( Status == flUnknownMedia )
		{
		  Status = flOK;

		  /* BBT is allowed to see if the media is unformatted */
		  if(Option.BBTflag)
		  {
			Status = DINFO_BBT(i);
			if( STATUS_ERROR )
			  return Status;
		  }

		  continue;
		}
		else
		  return Status;
	  }


	if(Option.BDTLflag)
    {
      Status = DINFO_BDTL(i);
      if( STATUS_ERROR )
        return Status;
    }

    if(Option.BDKflag)
    {
      Status = DINFO_BDK(i);
      if( STATUS_ERROR )
        return Status;
    }

    if(Option.BBTflag)
    {
      Status = DINFO_BBT(i);
      if( STATUS_ERROR )
        return Status;
    }

    if(Option.EXBflag)
    {
      Status = DINFO_EXB();
      if( STATUS_ERROR )
        return Status;
    }

    if(Option.OTPflag)
    {
      Status = DINFO_OTP(i);
      if( STATUS_ERROR )
        return Status;
    }

    if(Option.IPLflag)
    {
      Status = DINFO_IPL(i);
      if( STATUS_ERROR )
        return Status;
    }


    if(Option.REGflag)
    {
      Status = DINFO_REG(i);
      if( STATUS_ERROR )
			  return Status;
    }
	}

  return Status;
}



/*---------------------------------------------------------------------------------*/
ExStatus EXAPI ExMain()
{
  ExStatus        err = EX_OK;

  err = AnalyzeCmdLine();

  if( err == EX_LOW_LIMIT_BIGGER_THAN_HIGH_LIMIT_ERROR)
      DinfoPrint( EX_TEXT("\nLow Limit can't be higher that high limit\n") ) ;
  if( err != EX_OK )
  {
    PrintUsage();
    END_WITH_ERROR( err );
  }

  err = SwitchModules();

  if( Option.LogFileName )
  {
    CloseWriteSerialFileDevice( &logFileDev );
  }

  if( err != EX_OK )
  {
    END_WITH_ERROR( err );
  }

  ExPrint("\r\nOK\r\n");

  END_WITHOUT_ERROR();

}




FLStatus DINFO_INFO( EXBYTE handle )
{
  IOreq		ioreq;
  FLStatus	Status = flOK;

  ioreq.irHandle = handle ;
  ioreq.irFlags = 0 ;
  ioreq.irData = &Media.Info ;

  Status = DINFO_flGetPhysicalInfo( &ioreq ) ;
  if( STATUS_ERROR )
  {
    DinfoPrint( EX_TEXT("\nNo DiskOnChip found\n") ) ;
    return Status ;
  }

  if( noOfSockets > 1 )
  {
    DinfoPrint( EX_TEXT("\n DiskOnChip %d - GENERAL INFO.\n"), handle+1 );
    ExPrintLine( 30 );
  }
  else
  {
    DinfoPrint( EX_TEXT("\n GENERAL INFO.\n") );
    ExPrintLine( 15 );
  }

  DinfoPrint( EX_TEXT("   Physical Address      :  0x%lX\n"), /*GetPhysicalAddressFromPointer*/ ((EXBYTE *)ioreq.irLength) ) ;
  DinfoPrint( EX_TEXT("   DiskOnChip Type       :  %s"), TranslateTffsDocType( Media.Info.mediaType ) );
  DinfoPrint( EX_TEXT("\n") ) ;

  return Status;
}


EXDWORD GetDocWinLAddress(void)
{
  EXDWORD low_range,high_range;

  /* if /win was not defined */
  if( DOCAddress == 0xFFFFFFFF )
  {
    /* if /winl was defined, return its address. */
	  if( DOCLowAddress != 0xFFFFFFFF )
	  {
       return DOCLowAddress;
	  }
    /* No option was defined. Use pfn_Search_Range. */
	  else
	  {
       ExGet_Search_Range(&low_range,&high_range);
       return low_range;
    }
  }
  /* if /win was defined, return its address. */
  else
  {
      return DOCAddress;
  }
}

EXDWORD GetDocWinHAddress(void)
{
  EXDWORD low_range,high_range;

  /* if /win was not defined */
  if( DOCAddress == 0xFFFFFFFF )
  {
    /* if /winh was defined, return its address. */
	  if( DOCHighAddress != 0xFFFFFFFF )
	  {
       return DOCHighAddress;
	  }
    /* No option was defined. Use pfn_Search_Range. */
	  else
	  {
       ExGet_Search_Range(&low_range,&high_range);
	   return high_range;
	}
  }
  /* if /win was defined, return its address. */
  else
  {
      return DOCAddress;
  }
}


EXBYTE GetPrintLevel(void)
{
	return bPrintLevel;
}

⌨️ 快捷键说明

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