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