예제 #1
0
void far GameStrategy()
{
   PRPH     pRP;  // Pointer to Request Packet (Header)
   UCHAR    Cmd;  // strategy Command

   _asm
   {  // Strategy routine is called with ES:BX pointing to the Request Packet
      mov   word ptr pRP[0], bx
      mov   word ptr pRP[2], es
   }
   /*
      Request Packet Status field is defined only for Open and Close request packets
      on entry to the Strategy routine (is 0). For all other request packets,
      the Status field is undefined on entry.
   */
   pRP->Status = 0;
   Cmd = pRP->Cmd;

  #ifdef DEBUG
    dsPrint2 (DBG_HLVLFLOW, "GENGAME: Strategy Cmd=%x unit=%x\r\n", Cmd, pRP->Unit);
  #endif

   if (Cmd > CMDInitComplete)
     CmdError (pRP);
   else
     (*gStratList[Cmd])(pRP);

   pRP->Status |= STDON;

  #ifdef DEBUG
    dsPrint1 (DBG_HLVLFLOW, "GENGAME: Strategy S=%x\r\n", pRP->Status);
  #endif
}
예제 #2
0
void FAR USBDStrategy()
{
   RPH        far  *pRP;
   USHORT       Cmd;

   _asm
   {
      mov word ptr pRP[0], bx
      mov word ptr pRP[2], es
   }

   Cmd = pRP->Cmd;
#ifdef DEBUG
   dsPrint1( DBG_HLVLFLOW, "USBD: USBDStrategy: Cmd = %x\r\n", Cmd );
#endif

   if (Cmd > MAX_USB_CMD)
   {
      CmdError( pRP );
   }
   else
   {
      /*---------------------*/
      /* Call Worker Routine */
      /*---------------------*/
      (*gStratList[Cmd])(pRP);
   }
#ifdef DEBUG
   dsPrint1( DBG_HLVLFLOW, "USBD: USBDStrategy: Exit: Cmd = %x\r\n", Cmd );
#endif

}
예제 #3
0
int ParseArgs(int nArgc, char *ppArgv[], CommandArgs *pArgs)
{
    char c;
    ArgsStream stream;

    memset(pArgs, 0, sizeof(CommandArgs));
    stream.Initialize(nArgc, ppArgv);
//    GetCygpath();

    while ((c = stream.PeekChar()) != 0) {
        if (IsCommandSwitch(c)) {
            stream.GetChar(); // skip switch char: '-'

            switch (c = stream.GetChar()) {
                case 'o':
                    if (pArgs->dwAttribs & Command_o_GenLBO) {
                        CmdError(CommandError_DupSwitch, c);
                        return CommandError_DupSwitch;
                    }
                    pArgs->dwAttribs |= Command_o_GenLBO;

                    if (!IsCommandSwitch(stream.PeekChar())) {
                        GetFileName(&stream, ".lbo", pArgs, &pArgs->pszLBO);
                    }
                    break;

                case 'u':
                    pArgs->dwAttribs |= Command_u_ListUserFuncs;
                    break;

                case 'p':
                    pArgs->dwAttribs |= Command_p_Preview;
                    break;

                case 'I':
//                    if(HasCygpath()){
//                        pArgs->pszSourcePath = Turn2WinPath(stream.GetWord());
//                    } else {
                        pArgs->pszSourcePath = stream.GetWord();
//                    }
                    if (!pArgs->pszSourcePath) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    break;

                case '?':
                    fputs(c_pszCopyright, stdout);
                    fputs(c_pszUsage, stdout);
                    exit(0);

                default:
                    CmdError(CommandError_UnknownArg, c);
                    return CommandError_UnknownArg;
            }
        }
        else {
            if (pArgs->pszSource) {
                CmdError(CommandError_DupSource, c);
                return CommandError_DupSource;
            }
//            if(HasCygpath()){
//                pArgs->pszSource = Turn2WinPath(stream.GetWord());
//            } else {
                pArgs->pszSource = stream.GetWord();
//            }
        }
    }

    if (pArgs->dwAttribs & Command_u_ListUserFuncs) {
        ListAllUserFuncs();
        if (!pArgs->pszSource) exit(0);
    }

    if (!pArgs->pszSource) {
        CmdError(CommandError_NoSource, c);
        return CommandError_NoSource;
    }
    if ((pArgs->dwAttribs & Command_o_GenLBO) && NULL == pArgs->pszLBO) {
        pArgs->pszLBO = GenFileName(pArgs->pszSource, ".lbo");
        if (NULL == pArgs->pszLBO) {
            CmdError(CommandError_OutOfMemory, 0);
            return CommandError_OutOfMemory;
        }
    }

    return 0;
}
예제 #4
0
int ParseArgs(int nArgc, char *ppArgv[], CommandArgs *pArgs)
{
    char c;
    ArgsStream stream;
    char *pszStr;

    memset(pArgs, 0, sizeof(CommandArgs));
    stream.Initialize(nArgc, ppArgv);
#ifdef _win32
    GetCygpath();
#endif
    while ((c = stream.PeekChar()) != 0) {
        if (IsCommandSwitch(c)) {
            stream.GetChar(); // skip switch char: '-'

            switch (c = stream.GetChar()) {
                case 'B':
#ifdef _win32
                    if(HasCygpath()){
                        pArgs->pszInputLBO = Turn2WinPath(stream.GetWord());
                    } else {
#endif
                        pArgs->pszInputLBO = stream.GetWord();
#ifdef _win32
                    }
#endif

                    if (!pArgs->pszInputLBO) {
                        CmdError(CommandError_NoFile, c);
                        return CommandError_NoFile;
                    }
                    break;

                case 'C':
                    pszStr = stream.GetWord();
                    if (!pszStr) {
                        CmdError(CommandError_NoFile, c);
                        return CommandError_NoFile;
                    }
                    if (ContainsSemicolon(pszStr)) {
                        CmdError(CommandError_InvalidSemicolon, c);
                        return CommandError_InvalidSemicolon;
                    }
                    ConcatCommasStr(&(pArgs->pszInputCLS), pszStr);
                    break;

                case 'e':
                    pArgs->mAttribs |= Command_e_NoElastos;
                    break;
                case 'k':
                    pArgs->mAttribs |= Command_k_InKernel;
                    break;
                case 's':
                    pArgs->mAttribs |= Command_k_InSDK;
                    break;

                case 'T':
                    pszStr = stream.GetWord();
                    if (strcmp(pszStr, "foreground") == 0) {
                        pArgs->mAttribs |= Command_r_Foreground;
                    }
                    if (!pszStr) {
                        CmdError(CommandError_NoTemplate, c);
                        return CommandError_NoTemplate;
                    }
                    if (ContainsSemicolon(pszStr)) {
                        CmdError(CommandError_InvalidSemicolon, c);
                        return CommandError_InvalidSemicolon;
                    }
                    ConcatCommasStr(&(pArgs->pszTemplates), pszStr);
                    break;

                case 'I':
                    pszStr = stream.GetWord();
                    if (!pszStr) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    if (ContainsSemicolon(pszStr)) {
                        CmdError(CommandError_InvalidSemicolon, c);
                        return CommandError_InvalidSemicolon;
                    }
#ifdef _win32
                    if(HasCygpath()){
                        pszStr = Turn2WinPath(pszStr);
                    }
#endif
                    ConcatCommasStr(&(pArgs->pszInputPath), pszStr);
#ifdef _win32
                    if(HasCygpath()){
                        delete pszStr;
                    }
#endif
                    break;

                case 'p':
#ifdef _win32
                    if(HasCygpath()){
                        pArgs->pszOutputPath = Turn2WinPath(stream.GetWord());
                    } else {
#endif
                        pArgs->pszOutputPath = stream.GetWord();
#ifdef _win32
                    }
#endif
                    if (!pArgs->pszOutputPath) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    break;

                case 'o':
                    pArgs->pszOutputFile = stream.GetWord();
                    if (!pArgs->pszOutputFile) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    break;

                case 'l':
                    pArgs->mAttribs |= Command_l_ListTemplates;
                    break;

                case 'f':
                    pArgs->mAttribs |= Command_r_Overwrite;
                    break;

                case 'v':
                    pArgs->mAttribs |= Command_r_Redirect;
                    break;

                case 'z':
                    pArgs->mAttribs |= Command_z_UseCustomClassObject;
                    break;

                case 'w':
                    pArgs->mAttribs |= Command_w_HaveSandwichMethod;
                    break;

                case 'n':
                    pArgs->mAttribs |= Command_n_UseNakedMode;
                    break;

                case 'u':
                    pArgs->mAttribs |= Command_u_WeakRef;
                    break;

                case '?':
                    fputs(c_pszCopyright, stdout);
                    fputs(c_pszUsage, stdout);
                    exit(0);

                default:
                    CmdError(CommandError_UnknownArg, c);
                    return CommandError_UnknownArg;
            }
        }
        else {
            CmdError(CommandError_UnknownArg, c);
            return CommandError_UnknownArg;
        }
    }

    if (!(pArgs->mAttribs & Command_l_ListTemplates)
        && (!pArgs->pszTemplates || !pArgs->pszInputCLS)) {
        CmdError(CommandError_NoSource, c);
        return CommandError_NoSource;
    }
    return 0;
}
예제 #5
0
int ParseArgs(int nArgc, char *ppArgv[], CommandArgs *pArgs)
{
    char c;
    ArgsStream stream;
    BOOL bCharSkipped;

    memset(pArgs, 0, sizeof(CommandArgs));
    stream.Initialize(nArgc, ppArgv);

    if (stream.PeekChar() == 0) {
        fputs(c_pszCopyright, stdout);
        fputs(c_pszUsage, stdout);
        exit(0);
    }

    while ((c = stream.PeekChar()) != 0) {
        if (IsCommandSwitch(c)) {
            stream.GetChar(); // skip switch char: '-'

            bCharSkipped = FALSE;
            c = stream.PeekChar();
            if (IsCommandSwitch(c)) { // another '-'
                stream.GetChar(); // skip switch char: '-'
                c = stream.PeekChar();
            }
            switch (c) {
                case 'o': // output
                    stream.GetWord(); // skip char "c" or the rest of "output"
                    bCharSkipped = TRUE;
                    pArgs->pszOutputFile = stream.GetWord();
                    if (!pArgs->pszOutputFile) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    break;

                case 'i': // interface
                    pArgs->dwAttribs |= Command_r_Interface;
                    break;

                case 'c':
                    if (stream.PeekCharAt(2) == 'a') { // callback
                        pArgs->dwAttribs |= Command_r_Callback;
                    }
                    else if (stream.PeekCharAt(2) == 'o') { // const
                        pArgs->dwAttribs |= Command_r_Const;
                    }
                    else {
                        pArgs->dwAttribs |= Command_r_Class;
                    }
                    break;

                case 'b':
                    pArgs->dwAttribs |= Command_r_BaseClass;
                    break;

                case 'a':
                    if (stream.PeekCharAt(2) == 'l') { // all
                        pArgs->dwAttribs |= Command_r_All;
                    }
                    else { // aspect
                        pArgs->dwAttribs |= Command_r_Aspect;
                    }
                    break;

                case 'g': // generic
                    pArgs->dwAttribs |= Command_r_Generic;
                    break;

                case 'h':
                    if (stream.PeekCharAt(2) == 'e') { // help
                        fputs(c_pszCopyright, stdout);
                        fputs(c_pszUsage, stdout);
                        exit(0);
                    }
                    else { // callback handler
                        pArgs->dwAttribs |= Command_r_Callback;
                    }
                    break;

                case 'n':
                    pArgs->dwAttribs |= Command_r_Const;
                    break;

                case 'e': // enum
                    pArgs->dwAttribs |= Command_r_Enum;
                    break;

                case 'r': // regime
                    pArgs->dwAttribs |= Command_r_Regime;
                    break;

                case 's': // struct
                    pArgs->dwAttribs |= Command_r_Struct;
                    break;

                case 'm': // method
                    pArgs->dwAttribs |= Command_r_Method;
                    break;

                case 'f':
                    pArgs->dwAttribs |= Command_r_ForceOverride;
                    break;

                case '?':
                    fputs(c_pszCopyright, stdout);
                    fputs(c_pszUsage, stdout);
                    exit(0);

                default:
                    CmdError(CommandError_UnknownArg, c);
                    return CommandError_UnknownArg;
            }
            if (!bCharSkipped) {
                stream.GetWord(); //skip the char and the rest
            }
        }
        else {
            pArgs->pszInputFile = stream.GetWord();
        }
    }

    if (!pArgs->pszInputFile) {
        CmdError(CommandError_NoSource, c);
        return CommandError_NoSource;
    }
    return 0;
}
예제 #6
0
//卡上电
//查询所有SDIO接口上的卡设备,并查询其电压和配置时钟
//返回值:错误代码;(0,无错误)
SD_Error SD_PowerON(void)
{
 	u8 i=0;
	SD_Error errorstatus=SD_OK;
	u32 response=0,count=0,validvoltage=0;
	u32 SDType=SD_STD_CAPACITY;
	//配置CLKCR寄存器 
	SDIO->CLKCR=0;				//清空CLKCR之前的设置
	SDIO->CLKCR|=0<<9;			//非省电模式
	SDIO->CLKCR|=0<<10;			//关闭旁路,CK根据分频设置输出
	SDIO->CLKCR|=0<<11;			//1位数据宽度
	SDIO->CLKCR|=0<<13;			//SDIOCLK上升沿产生SDIOCK
	SDIO->CLKCR|=0<<14;			//关闭硬件流控制    
	SDIO_Clock_Set(SDIO_INIT_CLK_DIV);//设置时钟频率(初始化的时候,不能超过400Khz)			 
 	SDIO->POWER=0X03;			//上电状态,开启卡时钟    
  	SDIO->CLKCR|=1<<8;			//SDIOCK使能   
   	for(i=0;i<74;i++)
	{
		SDIO_Send_Cmd(SD_CMD_GO_IDLE_STATE,0,0);//发送CMD0进入IDLE STAGE模式命令.												  
		errorstatus=CmdError();
		if(errorstatus==SD_OK)break;
 	}
 	if(errorstatus)return errorstatus;//返回错误状态
	SDIO_Send_Cmd(SDIO_SEND_IF_COND,1,SD_CHECK_PATTERN);//发送CMD8,短响应,检查SD卡接口特性.
 														//arg[11:8]:01,支持电压范围,2.7~3.6V
														//arg[7:0]:默认0XAA
														//返回响应7
  	errorstatus=CmdResp7Error();						//等待R7响应
 	if(errorstatus==SD_OK) 								//R7响应正常
	{
		CardType=SDIO_STD_CAPACITY_SD_CARD_V2_0;		//SD 2.0卡
		SDType=SD_HIGH_CAPACITY;			   			//高容量卡
	}
	SDIO_Send_Cmd(SD_CMD_APP_CMD,1,0);					//发送CMD55,短响应	 
	errorstatus=CmdResp1Error(SD_CMD_APP_CMD); 		 	//等待R1响应   
	if(errorstatus==SD_OK)//SD2.0/SD 1.1,否则为MMC卡
	{																  
		//SD卡,发送ACMD41 SD_APP_OP_COND,参数为:0x80100000 
		while((!validvoltage)&&(count<SD_MAX_VOLT_TRIAL))
		{	   										   
			SDIO_Send_Cmd(SD_CMD_APP_CMD,1,0);				//发送CMD55,短响应	 
			errorstatus=CmdResp1Error(SD_CMD_APP_CMD); 	 	//等待R1响应   
 			if(errorstatus!=SD_OK)return errorstatus;   	//响应错误
			SDIO_Send_Cmd(SD_CMD_SD_APP_OP_COND,1,SD_VOLTAGE_WINDOW_SD|SDType);//发送ACMD41,短响应	 
			errorstatus=CmdResp3Error(); 					//等待R3响应   
 			if(errorstatus!=SD_OK)return errorstatus;   	//响应错误  
			response=SDIO->RESP1;;			   				//得到响应
			validvoltage=(((response>>31)==1)?1:0);			//判断SD卡上电是否完成
			count++;
		}
		if(count>=SD_MAX_VOLT_TRIAL)
		{
			errorstatus=SD_INVALID_VOLTRANGE;
			return errorstatus;
		}	 
		if(response&=SD_HIGH_CAPACITY)
		{
			CardType=SDIO_HIGH_CAPACITY_SD_CARD;
		}
 	}else//MMC卡
	{
		//MMC卡,发送CMD1 SDIO_SEND_OP_COND,参数为:0x80FF8000 
		while((!validvoltage)&&(count<SD_MAX_VOLT_TRIAL))