📄 rilsimtk_magneto.cpp
字号:
}
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 + -