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

📄 rilsimtk_magneto.cpp

📁 windows mobile RIL软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      !ParseRspParamSeparator(szRsp, szRsp)                    ||
      !ParseUCS2String(szRsp, wszURL, UCS2_LEN, szRsp)         ||
      !ParseRspParamSeparator(szRsp, szRsp)                    ||
      !ParseUCS2String(szRsp, wszBearerLst, UCS2_LEN, szRsp)   ||
      !ParseRspParamSeparator(szRsp, szRsp)                    ||
      !ParseUCS2String(szRsp, wszFileRefLst, UCS2_LEN, szRsp)  ||
      !ParseRspParamSeparator(szRsp, szRsp)                    ||
      !ParseUCS2String(szRsp, wszGateway, UCS2_LEN, szRsp)     ||
      !ParseRspPostfix(szRsp, szRsp)) {
    PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_VALUESMISSING);
    fRet = FALSE;
  } else {
    pSatLB = (SIMLAUNCHBROWSER*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    pSatLB->dwParams            = SIM_PARAM_SIMLAUNCHBROWSER_FLAGS | SIM_PARAM_SIMLAUNCHBROWSER_BROWSERID;
    pSatLB->dwFlags             = nDetails;
    pSatLB->dwBrowserId         = nBrowserId;
    if (wcslen(wszURL)) {
      pSatLB->dwParams         |= SIM_PARAM_SIMLAUNCHBROWSER_URLSIZE | SIM_PARAM_SIMLAUNCHBROWSER_URLOFFSET;
      pSatLB->dwURLSize         = (wcslen(wszURL) + 1) * sizeof(WCHAR);
      pSatLB->dwURLOffset       = ROUNDTODWORD(sizeof(SIMLAUNCHBROWSER));
      wcscpy((WCHAR*)((BYTE*)pSatLB + pSatLB->dwURLOffset), wszURL);
    }
    if (wcslen(wszText)) {
      pSatLB->dwParams         |= SIM_PARAM_SIMLAUNCHBROWSER_TEXTSIZE | SIM_PARAM_SIMLAUNCHBROWSER_TEXTOFFSET;
      pSatLB->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
      pSatLB->dwTextOffset      = ROUNDTODWORD2(sizeof(SIMLAUNCHBROWSER), pSatLB->dwURLSize);
      wcscpy((WCHAR*)((BYTE*)pSatLB + pSatLB->dwTextOffset), wszText);
    }
    if (nIconId) {
      pSatLB->dwParams         |= SIM_PARAM_SIMLAUNCHBROWSER_ICONID | SIM_PARAM_SIMLAUNCHBROWSER_ICONQUALIFIER;
      pSatLB->dwIconIdentifier  = nIconId;
      pSatLB->dwIconQualifier   = nIconQualifier;
    }
    pSatLB->cbSize = ROUNDTODWORD3(sizeof(SIMLAUNCHBROWSER), pSatLB->dwURLSize, pSatLB->dwTextSize);

    pSatCmd->cbSize += pSatLB->cbSize;
    pSatCmd->dwDetailsSize = pSatLB->cbSize;
  }

  // Notify the SIM manager of the SAT command
  if (!HandleBlob(RIL_NOTIFY_SIMTOOLKITCMD, pBlob, cbBlob , m_bCmdBuffer, pSatCmd->cbSize)) {
    fRet = FALSE;
  }

  return fRet;
}

//////////////////////////////////////////////////////////////////////////////
//
// Internal parsing function.
//
// Return:
//  TRUE or FALSE depending on the success of the operation.
//
//////////////////////////////////////////////////////////////////////////////
BOOL CSimToolkitHandling::ParsePlayTone(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) {
UINT               nDetails, nTone, nDurationUnit, nDuration, nIconQualifier, nIconId;
RILSIMTOOLKITCMD*  pSatCmd;
SIMTONE*           pSatTone;
WCHAR              wszText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_PLAYTONE);

  // Parse: "<details>,<"text">,<tone>,<durationunit>,<duration>,<iconqualifier>,<iconid>"
//+PPSTGI:<CmdType>,<CmdQualifier>,<InfoText>,<InfoIconID>,<InfoIconQualifier>,<ToneType>,<TimeoutUnit>,<TimeoutUnitNum>  
  if (!ParseUInt(szRsp, FALSE, nDetails, szRsp)          ||
      !ParseRspParamSeparator(szRsp, szRsp)              ||
      !ParseUCS2String(szRsp, wszText, UCS2_LEN, szRsp)  ||
      !ParseRspParamSeparator(szRsp, szRsp)              ||
	  !ParseUInt(szRsp, FALSE, nIconId, szRsp)           ||
	  !ParseRspParamSeparator(szRsp, szRsp)              ||
	  !ParseUInt(szRsp, FALSE, nIconQualifier, szRsp)    ||
	  !ParseRspParamSeparator(szRsp, szRsp)              ||
      !ParseUInt(szRsp, FALSE, nTone, szRsp)             ||
      !ParseRspParamSeparator(szRsp, szRsp)              ||
      !ParseUInt(szRsp, FALSE, nDurationUnit, szRsp)     ||
      !ParseRspParamSeparator(szRsp, szRsp)              ||
      !ParseUInt(szRsp, FALSE, nDuration, szRsp)         ||
      !ParseRspPostfix(szRsp, szRsp)) {
    PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_VALUESMISSING);
    fRet = FALSE;
  } else {
    pSatTone = (SIMTONE*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    pSatTone->dwParams    = SIM_PARAM_SIMTONE_TONE | SIM_PARAM_SIMTONE_DURATION;
    pSatTone->dwTone      = nTone;
    pSatTone->dwDuration  = 0;
    switch (nDurationUnit) {
      case 0:
        pSatTone->dwDuration = nDuration * (60 * 1000);
        break;
      case 1:
        pSatTone->dwDuration = nDuration * 1000;
        break;
      case 2:
        pSatTone->dwDuration = nDuration * 100;
        break;
      default:
        PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_COMMANDDATA);
        fRet = FALSE;
        break;
    }
    if (wcslen(wszText)) {
      pSatTone->dwParams         |= SIM_PARAM_SIMTONE_TEXTSIZE | SIM_PARAM_SIMTONE_TEXTOFFSET;
      pSatTone->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
      pSatTone->dwTextOffset      = ROUNDTODWORD(sizeof(SIMTONE));
      wcscpy((WCHAR*)((BYTE*)pSatTone + pSatTone->dwTextOffset), wszText);
    }
    if (nIconId) {
      pSatTone->dwParams         |= SIM_PARAM_SIMTONE_ICONID | SIM_PARAM_SIMTONE_ICONQUALIFIER;
      pSatTone->dwIconIdentifier  = nIconId;
      pSatTone->dwIconQualifier   = nIconQualifier;
    }
    pSatTone->cbSize = ROUNDTODWORD2(sizeof(SIMTONE), pSatTone->dwTextSize);

    pSatCmd->cbSize += pSatTone->cbSize;
    pSatCmd->dwDetailsSize = pSatTone->cbSize;
  }

  // Notify the SIM manager of the SAT command
  if (!HandleBlob(RIL_NOTIFY_SIMTOOLKITCMD, pBlob, cbBlob , m_bCmdBuffer, pSatCmd->cbSize)) {
    fRet = FALSE;
  }

  return fRet;
}

//////////////////////////////////////////////////////////////////////////////
//
// Internal parsing function.
//
// Return:
//  TRUE or FALSE depending on the success of the operation.
//
//////////////////////////////////////////////////////////////////////////////
BOOL CSimToolkitHandling::ParseDisplayText(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) {
UINT               nImmediateResp, nDetails, nIconQualifier, nIconId;
RILSIMTOOLKITCMD*  pSatCmd;
SIMTEXT*           pSatText;
WCHAR              wszText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_DISPLAYTEXT);

  // Parse: "<details>,<"text">,<immediateresponse>,<iconqualifier>,<iconid>"
//+PPSTGI:<CmdType>,<CmdQualifier>,<InfoText>,<InfoIconID>,<InfoIconQualifier>,<ImmediateResponse>
  if (!ParseUInt(szRsp, FALSE, nDetails, szRsp)          ||
      !ParseRspParamSeparator(szRsp, szRsp)              ||
      !ParseUCS2String(szRsp, wszText, UCS2_LEN, szRsp)  ||
      !ParseRspParamSeparator(szRsp, szRsp)              ||
	  !ParseUInt(szRsp, FALSE, nIconId, szRsp)           ||
	  !ParseRspParamSeparator(szRsp, szRsp)              ||
	  !ParseUInt(szRsp, FALSE, nIconQualifier, szRsp)    ||
	  !ParseRspParamSeparator(szRsp, szRsp)				 ||
  	  !ParseUInt(szRsp, FALSE, nImmediateResp, szRsp)    ||       
      !ParseRspPostfix(szRsp, szRsp)) {
    PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_VALUESMISSING);
    fRet = FALSE;
  } else {
    pSatText = (SIMTEXT*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    pSatText->dwParams            = SIM_PARAM_SIMTEXT_FLAGS;
    if (nImmediateResp)           { pSatText->dwFlags |= SIMTEXT_IMMEDIATERESPONSE; }
    if (nDetails & 0x01)          { pSatText->dwFlags |= SIMTEXT_HIGHPRIORITY; }
    if (!(nDetails & 0x80))       { pSatText->dwFlags |= SIMTEXT_DELAYCLEAR; }
    if (wcslen(wszText)) {
      pSatText->dwParams         |= SIM_PARAM_SIMTEXT_TEXTSIZE | SIM_PARAM_SIMTEXT_TEXTOFFSET;
      pSatText->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
      pSatText->dwTextOffset      = ROUNDTODWORD(sizeof(SIMTEXT));
      wcscpy((WCHAR*)((BYTE*)pSatText + pSatText->dwTextOffset), wszText);
    }
    if (nIconId) {
      pSatText->dwParams         |= SIM_PARAM_SIMTEXT_ICONID | SIM_PARAM_SIMTEXT_ICONQUALIFIER;
      pSatText->dwIconIdentifier  = nIconId;
      pSatText->dwIconQualifier   = nIconQualifier;
    }
    pSatText->cbSize = ROUNDTODWORD2(sizeof(SIMTEXT), pSatText->dwTextSize);

    pSatCmd->cbSize += pSatText->cbSize;
    pSatCmd->dwDetailsSize = pSatText->cbSize;
  }

  // Notify the SIM manager of the SAT command
  //RIL_NOTIFY_SIMTOOLKITCMD
  
  if (!HandleBlob(RIL_NOTIFY_SIMTOOLKITEVENT, pBlob, cbBlob , m_bCmdBuffer, pSatCmd->cbSize)) {
    fRet = FALSE;
  }

  return fRet;
}

//////////////////////////////////////////////////////////////////////////////
//
// Internal parsing function.
//
// Return:
//  TRUE or FALSE depending on the success of the operation.
//
//////////////////////////////////////////////////////////////////////////////
BOOL CSimToolkitHandling::ParseGetInkey(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) {
UINT               nDetails, nIconQualifier, nIconId;
RILSIMTOOLKITCMD*  pSatCmd;
SIMTEXT*           pSatText;
WCHAR              wszText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_GETINKEY);

  // Parse: "<details>,<"text">,<iconqualifier>,<iconid>"
//  +PPSTGI:<CmdType>,<CmdQualifier>,<InfoText>,<InfoIconID>,<InfoIconQualifier>
  if (!ParseUInt(szRsp, FALSE, nDetails, szRsp)          ||
      !ParseRspParamSeparator(szRsp, szRsp)              ||
      !ParseUCS2String(szRsp, wszText, UCS2_LEN, szRsp)  ||
      !ParseRspParamSeparator(szRsp, szRsp)              ||
	  !ParseUInt(szRsp, FALSE, nIconId, szRsp)           ||
  	  !ParseRspParamSeparator(szRsp, szRsp)              ||
      !ParseUInt(szRsp, FALSE, nIconQualifier, szRsp)    ||
      !ParseRspPostfix(szRsp, szRsp)) {
    PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_VALUESMISSING);
    fRet = FALSE;
  } else {
    pSatText = (SIMTEXT*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    pSatText->dwParams = SIM_PARAM_SIMTEXT_FLAGS;
    if (nDetails & 0x04) {
      pSatText->dwFlags |= SIMTEXT_YESNO;
    } else {
      if (!(nDetails & 0x01)) {
        pSatText->dwFlags |= SIMTEXT_KEYPADDIGITS;
      }
      if (!(nDetails & 0x02)) {
        pSatText->dwFlags |= SIMTEXT_GSMDEFAULTALPHABET;
      }
    }
    if (nDetails & 0x80) {
      pSatText->dwFlags |= SIMTEXT_HELPINFO;
    }
    if (wcslen(wszText)) {
      pSatText->dwParams         |= SIM_PARAM_SIMTEXT_TEXTSIZE | SIM_PARAM_SIMTEXT_TEXTOFFSET;
      pSatText->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
      pSatText->dwTextOffset      = ROUNDTODWORD(sizeof(SIMTEXT));
      wcscpy((WCHAR*)((BYTE*)pSatText + pSatText->dwTextOffset), wszText);
    }
    if (nIconId) {
      pSatText->dwParams         |= SIM_PARAM_SIMTEXT_ICONID | SIM_PARAM_SIMTEXT_ICONQUALIFIER;
      pSatText->dwIconIdentifier  = nIconId;
      pSatText->dwIconQualifier   = nIconQualifier;
    }
    pSatText->cbSize = ROUNDTODWORD2(sizeof(SIMTEXT), pSatText->dwTextSize);

    pSatCmd->cbSize += pSatText->cbSize;
    pSatCmd->dwDetailsSize = pSatText->cbSize;
  }

  // Notify the SIM manager of the SAT command
  if (!HandleBlob(RIL_NOTIFY_SIMTOOLKITCMD, pBlob, cbBlob , m_bCmdBuffer, pSatCmd->cbSize)) {
    fRet = FALSE;
  }

  return fRet;
}

//////////////////////////////////////////////////////////////////////////////
//
// Internal parsing function.
//
// Return:
//  TRUE or FALSE depending on the success of the operation.
//
//////////////////////////////////////////////////////////////////////////////
BOOL CSimToolkitHandling::ParseGetInput(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) {
UINT               nDetails, nIconQualifier, nIconId;
UINT               nResponseMin, nResponseMax;
RILSIMTOOLKITCMD*  pSatCmd;
SIMTEXT*           pSatText;
WCHAR              wszText[UCS2_LEN + 1], wszDefaultText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_GETINPUT);

  //    Parse: "<details>,<"text">,<responsemin>,<responsemax>,<"defaulttext">,<iconqualifier>,<iconid>"
  //+PPSTGI:<CmdType>,<CmdQualifier>,<InfoText>,<InfoIconID>,<InfoIconQualifier>,<DefaultText>,<MinLength>,<MaxLength>
  if (!ParseUInt(szRsp, FALSE, nDetails, szRsp)                 ||	//cmdqualifier
      !ParseRspParamSeparator(szRsp, szRsp)                     ||
      !ParseUCS2String(szRsp, wszText, UCS2_LEN, szRsp)         ||	//InfoText
      !ParseRspParamSeparator(szRsp, szRsp)                     ||	
	  !ParseUInt(szRsp, FALSE, nIconId, szRsp)                  ||	//InfoIconId
      !ParseRspParamSeparator(szRsp, szRsp)                     ||
	  !ParseUInt(szRsp, FALSE, nIconQualifier, szRsp)           ||	//InfoIconQualifier
      !ParseRspParamSeparator(szRsp, szRsp)                     ||
	  !ParseUCS2String(szRsp, wszDefaultText, UCS2_LEN, szRsp)  ||	//DefaultText
      !ParseRspParamSeparator(szRsp, szRsp)                     ||
  	  !ParseUInt(szRsp, FALSE, nResponseMin, szRsp)             ||	//MinLength
      !ParseRspParamSeparator(szRsp, szRsp)                     ||
      !ParseUInt(szRsp, FALSE, nResponseMax, szRsp)             ||	//MaxLength
      !ParseRspPostfix(szRsp, szRsp)) {
    PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_VALUESMISSING);
    fRet = FALSE;
  } else {
    pSatText = (SIMTEXT*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    pSatText->dwParams               = SIM_PARAM_SIMTEXT_FLAGS;
    if (!(nDetails & 0x01))          { pSatText->dwFlags |= SIMTEXT_KEYPADDIGITS; }
    if (!(nDetails & 0x02))          
	{ 
		pSatText->dwFlags |= SIMTEXT_GSMDEFAULTALPHABET; 
		gfSimGetInputUcs2 = FALSE;
	}
	else
	{
		gfSimGetInputUcs2 = TRUE;
	}
    if (nDetails & 0x04)             { pSatText->dwFlags |= SIMTEXT_NOECHO; }
    if (nDetails & 0x08)             { pSatText->dwFlags |= SIMTEXT_PACKEDRESPONSE; }
    if (nDetails & 0x80)             { pSatText->dwFlags |= SIMTEXT_HELPINFO; }

⌨️ 快捷键说明

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