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

📄 rilsimtk_magneto.cpp

📁 windows mobile RIL软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    }
    if (wcslen(wszConfirmation)) {
      pSatCall->dwParams                  |= SIM_PARAM_SIMCALL_TEXTSIZE | SIM_PARAM_SIMCALL_TEXTOFFSET;
      pSatCall->dwTextSize                 = (wcslen(wszConfirmation) + 1) * sizeof(WCHAR);
      pSatCall->dwTextOffset               = ROUNDTODWORD(sizeof(SIMCALL));
      wcscpy((WCHAR*)((BYTE*)pSatCall + pSatCall->dwTextOffset), wszConfirmation);
    }
	/*
	wszNumber[0]='+';
	wszNumber[1]='8';
	wszNumber[2]='6';
	wszNumber[3]='2';
	wszNumber[4]='9';
	wszNumber[5]='6';
	wszNumber[6]='6';
	wszNumber[7]='1';
	wszNumber[8]='6';
	wszNumber[9]='3';
	wszNumber[10]='0';
	wszNumber[11]=0;
	*/
    if (wcslen(wszNumber)) {
      pSatCall->dwParams                  |= SIM_PARAM_SIMCALL_ADDRESSSIZE | SIM_PARAM_SIMCALL_ADDRESSOFFSET |
                                             SIM_PARAM_SIMCALL_ADDRESSTYPE | SIM_PARAM_SIMCALL_NUMPLAN;
      pSatCall->dwAddressSize              = (wcslen(wszNumber) + 1) * sizeof(WCHAR);
      pSatCall->dwAddressOffset            = ROUNDTODWORD2(sizeof(SIMCALL), pSatCall->dwTextSize);
      pSatCall->dwAddressType              = (wszNumber[0] == L'+') ? SIM_ADDRTYPE_INTERNATIONAL : SIM_ADDRTYPE_UNKNOWN;
      pSatCall->dwNumPlan                  = SIM_NUMPLAN_TELEPHONE;
      wcscpy((WCHAR*)((BYTE*)pSatCall + pSatCall->dwAddressOffset), wszNumber);
    }
    if (wcslen(wszSetup)) {
      pSatCall->dwParams                  |= SIM_PARAM_SIMCALL_CALLSETUPTEXTSIZE | SIM_PARAM_SIMCALL_CALLSETUPTEXTOFFSET;
      pSatCall->dwCallSetupTextSize        = (wcslen(wszSetup) + 1) * sizeof(WCHAR);
      pSatCall->dwCallSetupTextOffset      = ROUNDTODWORD3(sizeof(SIMCALL), pSatCall->dwTextSize, pSatCall->dwAddressSize);
      wcscpy((WCHAR*)((BYTE*)pSatCall + pSatCall->dwCallSetupTextOffset), wszSetup);
    }
    if (nConfIconId) {
      pSatCall->dwParams                  |= SIM_PARAM_SIMCALL_ICONID | SIM_PARAM_SIMCALL_ICONQUALIFIER;
      pSatCall->dwIconIdentifier           = nConfIconId;
      pSatCall->dwIconQualifier            = nConfIconQualifier;
    }
    if (nSetupIconId) {
      pSatCall->dwParams                  |= SIM_PARAM_SIMCALL_CALLSETUPICONID | SIM_PARAM_SIMCALL_CALLSETUPICONQUALIFIER;
      pSatCall->dwCallSetupIconIdentifier  = nSetupIconId;
      pSatCall->dwCallSetupIconQualifier   = nSetupIconQualifier;
    }
    pSatCall->cbSize = ROUNDTODWORD4(sizeof(SIMCALL), pSatCall->dwTextSize, pSatCall->dwAddressSize, pSatCall->dwCallSetupTextSize);

    pSatCmd->cbSize += pSatCall->cbSize;
    pSatCmd->dwDetailsSize = pSatCall->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::ParseSendSS(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) {
UINT               nDetails, nIconQualifier, nIconId;
RILSIMTOOLKITCMD*  pSatCmd;
SIMUSSD*           pSatSs;
WCHAR              wszText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_SENDSS);

  // 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 {
    pSatSs = (SIMUSSD*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    if (wcslen(wszText)) {
      pSatSs->dwParams         |= SIM_PARAM_SIMUSSD_TEXTSIZE | SIM_PARAM_SIMUSSD_TEXTOFFSET;
      pSatSs->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
      pSatSs->dwTextOffset      = ROUNDTODWORD(sizeof(SIMUSSD));
      wcscpy((WCHAR*)((BYTE*)pSatSs + pSatSs->dwTextOffset), wszText);
    }
    if (nIconId) {
      pSatSs->dwParams         |= SIM_PARAM_SIMUSSD_ICONID | SIM_PARAM_SIMUSSD_ICONQUALIFIER;
      pSatSs->dwIconIdentifier  = nIconId;
      pSatSs->dwIconQualifier   = nIconQualifier;
    }
    pSatSs->cbSize = ROUNDTODWORD2(sizeof(SIMUSSD), pSatSs->dwTextSize);

    pSatCmd->cbSize += pSatSs->cbSize;
    pSatCmd->dwDetailsSize = pSatSs->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::ParseSendUSSD(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) {
UINT               nDetails, nIconQualifier, nIconId;
RILSIMTOOLKITCMD*  pSatCmd;
SIMUSSD*           pSatUssd;
WCHAR              wszText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_SENDUSSD);

  // 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 {
    pSatUssd = (SIMUSSD*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    if (wcslen(wszText)) {
      pSatUssd->dwParams         |= SIM_PARAM_SIMUSSD_TEXTSIZE | SIM_PARAM_SIMUSSD_TEXTOFFSET;
      pSatUssd->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
      pSatUssd->dwTextOffset      = ROUNDTODWORD(sizeof(SIMUSSD));
      wcscpy((WCHAR*)((BYTE*)pSatUssd + pSatUssd->dwTextOffset), wszText);
    }
    if (nIconId) {
      pSatUssd->dwParams         |= SIM_PARAM_SIMUSSD_ICONID | SIM_PARAM_SIMUSSD_ICONQUALIFIER;
      pSatUssd->dwIconIdentifier  = nIconId;
      pSatUssd->dwIconQualifier   = nIconQualifier;
    }
    pSatUssd->cbSize = ROUNDTODWORD2(sizeof(SIMUSSD), pSatUssd->dwTextSize);

    pSatCmd->cbSize += pSatUssd->cbSize;
    pSatCmd->dwDetailsSize = pSatUssd->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::ParseSendSMS(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) {
UINT               nDetails, nIconQualifier, nIconId;
RILSIMTOOLKITCMD*  pSatCmd;
SIMSMS*            pSatSms;
WCHAR              wszText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_SENDSMS);

  // 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 {
    pSatSms = (SIMSMS*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    if (wcslen(wszText)) {
      pSatSms->dwParams         |= SIM_PARAM_SIMSMS_TEXTSIZE | SIM_PARAM_SIMSMS_TEXTOFFSET;
      pSatSms->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
      pSatSms->dwTextOffset      = ROUNDTODWORD(sizeof(SIMSMS));
      wcscpy((WCHAR*)((BYTE*)pSatSms + pSatSms->dwTextOffset), wszText);
    }
    if (nIconId) {
      pSatSms->dwParams         |= SIM_PARAM_SIMSMS_ICONID | SIM_PARAM_SIMSMS_ICONQUALIFIER;
      pSatSms->dwIconIdentifier  = nIconId;
      pSatSms->dwIconQualifier   = nIconQualifier;
    }
    pSatSms->cbSize = ROUNDTODWORD2(sizeof(SIMSMS), pSatSms->dwTextSize);

    pSatCmd->cbSize += pSatSms->cbSize;
    pSatCmd->dwDetailsSize = pSatSms->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::ParseSendDTMF(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) {
UINT               nDetails, nIconQualifier, nIconId;
RILSIMTOOLKITCMD*  pSatCmd;
SIMSENDDTMF*       pSatDtmf;
WCHAR              wszText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_SENDDTMF);

  // 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 {
    pSatDtmf = (SIMSENDDTMF*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    if (wcslen(wszText)) {
      pSatDtmf->dwParams         |= SIM_PARAM_SIMSENDDTMF_TEXTSIZE | SIM_PARAM_SIMSENDDTMF_TEXTOFFSET;
      pSatDtmf->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
      pSatDtmf->dwTextOffset      = ROUNDTODWORD(sizeof(SIMSENDDTMF));
      wcscpy((WCHAR*)((BYTE*)pSatDtmf + pSatDtmf->dwTextOffset), wszText);
    }
    if (nIconId) {
      pSatDtmf->dwParams         |= SIM_PARAM_SIMSENDDTMF_ICONID | SIM_PARAM_SIMSENDDTMF_ICONQUALIFIER;
      pSatDtmf->dwIconIdentifier  = nIconId;
      pSatDtmf->dwIconQualifier   = nIconQualifier;
    }
    pSatDtmf->cbSize = ROUNDTODWORD2(sizeof(SIMSENDDTMF), pSatDtmf->dwTextSize);

    pSatCmd->cbSize += pSatDtmf->cbSize;
    pSatCmd->dwDetailsSize = pSatDtmf->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::ParseLaunchBrowser(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) {
UINT                 nDetails, nIconQualifier, nIconId, nBrowserId;
RILSIMTOOLKITCMD*    pSatCmd;
SIMLAUNCHBROWSER*    pSatLB;
WCHAR                wszText[UCS2_LEN + 1], wszURL[UCS2_LEN + 1], wszGateway[UCS2_LEN + 1];
WCHAR                wszBearerLst[UCS2_LEN + 1], wszFileRefLst[UCS2_LEN + 1]; //Not supported by module
BOOL                 fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_LAUNCHBROWSER);

  // Parse: "<details>,<"text">,<iconqualifier>,<iconid>,<browserid>,<url>,<bearerlist>,<filereflist>,<gatewayid>"
  if (!ParseUInt(szRsp, FALSE, nDetails, szRsp)                ||
      !ParseRspParamSeparator(szRsp, szRsp)                    ||
      !ParseUCS2String(szRsp, wszText, UCS2_LEN, szRsp)        ||
      !ParseRspParamSeparator(szRsp, szRsp)                    ||
      !ParseUInt(szRsp, FALSE, nIconQualifier, szRsp)          ||
      !ParseRspParamSeparator(szRsp, szRsp)                    ||
      !ParseUInt(szRsp, FALSE, nIconId, szRsp)                 ||
      !ParseRspParamSeparator(szRsp, szRsp)                    ||
      !ParseUInt(szRsp, FALSE, nBrowserId, szRsp)              ||

⌨️ 快捷键说明

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