📄 rilsimtk_ozone.cpp
字号:
return FALSE;
}
UpdateTextField(szText, fUseGSM);
// Fill out the SAT command details and device ids
sprintf(m_szCmdBuffer, "D00081030121%0.2X82028102%s1E02%0.2X%0.2X", nDetails, szText, nIconQualifier, nIconId);
if(nImmediateResp) {
// Add out the immediate response
strcat(m_szCmdBuffer, "2B00");
}
if (!AddSATCmdLength(m_szCmdBuffer)) {
if (fUseGSM) { return FALSE; }
return ParseDisplayText(szRspIn, pBlob, cbBlob, TRUE);
}
// Notify the SIM manager of the SAT command
return HandleBlob(RIL_NOTIFY_SIMTOOLKITCMD, pBlob, cbBlob, m_szCmdBuffer);
}
//////////////////////////////////////////////////////////////////////////////
//
// Internal parsing function.
//
// Return:
// TRUE or FALSE depending on the success of the operation.
//
//////////////////////////////////////////////////////////////////////////////
BOOL CSimToolkitHandling::ParseGetInkey(LPCSTR szRspIn, void*& pBlob, UINT& cbBlob, BOOL fUseGSM) {
UINT nDetails;
UINT nIconQualifier, nIconId;
char* pText;
char szText[MAX_ATCMD_LEN];
LPCSTR szRsp = szRspIn;
// Prepare text field
SIMTK_PREPARE_TEXT(szText, pText, SIMTK_TXT_STANDARD);
// Parse "<details>"
if (!ParseUInt(szRsp, FALSE, nDetails, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseString(szRsp, pText, MAX_ATCMD_LEN, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nIconQualifier, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nIconId, szRsp) ||
!ParseRspPostfix(szRsp, szRsp)) {
return FALSE;
}
UpdateTextField(szText, fUseGSM);
// Fill out the SAT command details and device ids
sprintf(m_szCmdBuffer, "D00081030122%0.2X82028182%s1E02%0.2X%0.2X", nDetails, szText, nIconQualifier, nIconId);
if (!AddSATCmdLength(m_szCmdBuffer)) {
if (fUseGSM) { return FALSE; }
return ParseGetInkey(szRspIn, pBlob, cbBlob, TRUE);
}
// Notify the SIM manager of the SAT command
return HandleBlob(RIL_NOTIFY_SIMTOOLKITCMD, pBlob, cbBlob, m_szCmdBuffer);
}
//////////////////////////////////////////////////////////////////////////////
//
// Internal parsing function.
//
// Return:
// TRUE or FALSE depending on the success of the operation.
//
//////////////////////////////////////////////////////////////////////////////
BOOL CSimToolkitHandling::ParseGetInput(LPCSTR szRspIn, void*& pBlob, UINT& cbBlob, BOOL fUseGSM) {
UINT nDetails;
UINT nResponseMin, nResponseMax, nIconQualifier, nIconId;
char* pText;
char* pDefaultText;
char szText[MAX_ATCMD_LEN], szDefaultText[MAX_ATCMD_LEN];
LPCSTR szRsp = szRspIn;
// Prepare text fields
SIMTK_PREPARE_TEXT(szText, pText, SIMTK_TXT_STANDARD);
SIMTK_PREPARE_TEXT(szDefaultText, pDefaultText, SIMTK_TXT_DEFAULT);
// Parse "<details>"
if (!ParseUInt(szRsp, FALSE, nDetails, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseString(szRsp, pText, MAX_ATCMD_LEN, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nResponseMin, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nResponseMax, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseString(szRsp, pDefaultText, MAX_ATCMD_LEN, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nIconQualifier, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nIconId, szRsp) ||
!ParseRspPostfix(szRsp, szRsp)) {
return FALSE;
}
UpdateTextField(szText, fUseGSM);
UpdateTextField(szDefaultText, fUseGSM);
// Fill out the SAT command details
sprintf(m_szCmdBuffer, "D00081030123%0.2X82028182%s1102%0.2X%0.2X%s1E02%0.2X%0.2X", nDetails, szText, nResponseMin, nResponseMax, szDefaultText, nIconQualifier, nIconId);
if (!AddSATCmdLength(m_szCmdBuffer)) {
if (fUseGSM) { return FALSE; }
return ParseGetInput(szRspIn, pBlob, cbBlob, TRUE);
}
// Notify the SIM manager of the SAT command
return HandleBlob(RIL_NOTIFY_SIMTOOLKITCMD, pBlob, cbBlob, m_szCmdBuffer);
}
//////////////////////////////////////////////////////////////////////////////
//
// Internal parsing function.
//
// Return:
// TRUE or FALSE depending on the success of the operation.
//
//////////////////////////////////////////////////////////////////////////////
BOOL CSimToolkitHandling::ParseSelectItem(LPCSTR szRspIn, void*& pBlob, UINT& cbBlob, BOOL fUseGSM) {
UINT i, nCmd, nNumItems, nDetails, nItem, nDefaultItemId;
UINT nItemIconsPresent, nItemIconsQualifier, nTitleIconQualifier, nTitleIconId;
UINT nNextActionId[64], nIconId[64];
char* pText;
char szText[MAX_ATCMD_LEN];
LPCSTR szRsp = szRspIn;
// Prepare text field
SIMTK_PREPARE_TEXT(szText, pText, SIMTK_TXT_ALPHA);
// Parse "<commandDetails>,<numOfItems>,<titleText>,<defaultItemId>,<itemIconsPresent>,<itemIconsQualifier>,<titleIconQualifier>,<titleIconId><details>,<numitems>,"titletext",<itemiconspresent>,<itemiconqualifier>,<titleiconqualifier>,<titleiconid>"
if (!ParseUInt(szRsp, FALSE, nDetails, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nNumItems, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseString(szRsp, pText, MAX_ATCMD_LEN, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nDefaultItemId, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nItemIconsPresent, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nItemIconsQualifier, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nTitleIconQualifier, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nTitleIconId, szRsp) ||
!ParseRspPostfix(szRsp, szRsp)) {
return FALSE;
}
// An item list without items is invalid
if (!nNumItems) {
return FALSE;
}
UpdateAlphaField(szText, fUseGSM);
// Fill out the start of the SAT command and the menu title
sprintf(m_szCmdBuffer, "D00081030124%0.2X82028182%s", nDetails, szText);
// Parse the menu items
// Parse "^SSTGI: <cmdtype>,<itemid>,"itemtext",<nextactionid>,<iconid>"
nNumItems = min(nNumItems, 64);
for (i = 0; i < nNumItems; i++) {
// Prepare text field
SIMTK_PREPARE_TEXT(szText, pText, SIMTK_TXT_ITEM);
if (!MatchStringBeginning(szRsp, "^SSTGI: ", szRsp) ||
!ParseUInt(szRsp, FALSE, nCmd, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nItem, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseString(szRsp, pText, MAX_ATCMD_LEN, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nNextActionId[i], szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nIconId[i], szRsp) ||
!ParseRspPostfix(szRsp, szRsp)) {
return FALSE;
}
// Add the menu item
UpdateItemField(szText, nItem, fUseGSM);
strcat(m_szCmdBuffer, szText);
}
// Add the next action items
sprintf(szText, "18%0.2X", nNumItems);
strcat(m_szCmdBuffer, szText);
for (i = 0; i < nNumItems; i++) {
sprintf(szText, "%0.2X", nNextActionId[i]);
strcat(m_szCmdBuffer, szText);
}
// Add the default item identifier
sprintf(szText, "1001%0.2X", nDefaultItemId);
strcat(m_szCmdBuffer, szText);
// Add the title icon information
sprintf(szText, "1E02%0.2X%0.2X", nTitleIconQualifier, nTitleIconId);
strcat(m_szCmdBuffer, szText);
// Add the items icon information
if (nItemIconsPresent) {
sprintf(szText, "1F%0.2X%0.2X", nNumItems+1, nItemIconsQualifier);
strcat(m_szCmdBuffer, szText);
for (i = 0; i < nNumItems; i++) {
sprintf(szText, "%0.2X", nIconId[i]);
strcat(m_szCmdBuffer, szText);
}
}
if (!AddSATCmdLength(m_szCmdBuffer)) {
if (fUseGSM) { return FALSE; }
return ParseSelectItem(szRspIn, pBlob, cbBlob, TRUE);
}
// Notify the SIM manager of the SAT command
return HandleBlob(RIL_NOTIFY_SIMTOOLKITCMD, pBlob, cbBlob, m_szCmdBuffer);
}
//////////////////////////////////////////////////////////////////////////////
//
// Internal parsing function.
//
// Return:
// TRUE or FALSE depending on the success of the operation.
//
//////////////////////////////////////////////////////////////////////////////
BOOL CSimToolkitHandling::ParseSetupMenu(LPCSTR szRspIn, void*& pBlob, UINT& cbBlob, BOOL fUseGSM) {
UINT i, nCmd, nNumItems, nDetails, nItem;
UINT nItemIconsPresent, nItemIconsQualifier, nTitleIconQualifier, nTitleIconId;
UINT nNextActionId[64], nIconId[64];
char* pText;
char szText[MAX_ATCMD_LEN];
LPCSTR szRsp = szRspIn;
// Prepare text field
SIMTK_PREPARE_TEXT(szText, pText, SIMTK_TXT_ALPHA);
// Parse "<details>,<numitems>,"titletext",<itemiconspresent>,<itemiconqualifier>,<titleiconqualifier>,<titleiconid>"
if (!ParseUInt(szRsp, FALSE, nDetails, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nNumItems, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseString(szRsp, pText, MAX_ATCMD_LEN, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nItemIconsPresent, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nItemIconsQualifier, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nTitleIconQualifier, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nTitleIconId, szRsp) ||
!ParseRspPostfix(szRsp, szRsp)) {
return FALSE;
}
// An item list without items is invalid
if (!nNumItems) {
return FALSE;
}
UpdateAlphaField(szText, fUseGSM);
// Fill out the start of the SAT command and the menu title
sprintf(m_szCmdBuffer, "D00081030125%0.2X82028182%s", nDetails, szText);
// Parse the menu items
// Parse "^SSTGI: <cmdtype>,<itemid>,"itemtext",<nextactionid>,<iconid>"
nNumItems = min(nNumItems, 64);
for (i = 0; i < nNumItems; i++) {
// Prepare text field
SIMTK_PREPARE_TEXT(szText, pText, SIMTK_TXT_ITEM);
if (!MatchStringBeginning(szRsp, "^SSTGI: ", szRsp) ||
!ParseUInt(szRsp, FALSE, nCmd, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nItem, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseString(szRsp, pText, MAX_ATCMD_LEN, szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nNextActionId[i], szRsp) ||
!ParseRspParamSeparator(szRsp, szRsp) ||
!ParseUInt(szRsp, FALSE, nIconId[i], szRsp) ||
!ParseRspPostfix(szRsp, szRsp)) {
return FALSE;
}
// Add the menu item
UpdateItemField(szText, nItem, fUseGSM);
strcat(m_szCmdBuffer, szText);
}
// Add the next action items
sprintf(szText, "18%0.2X", nNumItems);
strcat(m_szCmdBuffer, szText);
for (i = 0; i < nNumItems; i++) {
sprintf(szText, "%0.2X", nNextActionId[i]);
strcat(m_szCmdBuffer, szText);
}
// Add the title icon information
sprintf(szText, "1E02%0.2X%0.2X", nTitleIconQualifier, nTitleIconId);
strcat(m_szCmdBuffer, szText);
// Add the items icon information
if (nItemIconsPresent) {
sprintf(szText, "1F%0.2X%0.2X", nNumItems+1, nItemIconsQualifier);
strcat(m_szCmdBuffer, szText);
for (i = 0; i < nNumItems; i++) {
sprintf(szText, "%0.2X", nIconId[i]);
strcat(m_szCmdBuffer, szText);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -