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

📄 rilsimtk_magneto.cpp

📁 windows mobile RIL软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    pSatText->dwMinResponse          = nResponseMin;
    pSatText->dwMaxResponse          = nResponseMax;
    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 (wcslen(wszText)) {
      pSatText->dwParams            |= SIM_PARAM_SIMTEXT_DEFAULTTEXTSIZE | SIM_PARAM_SIMTEXT_DEFAULTTEXTOFFSET;
      pSatText->dwDefaultTextSize    = (wcslen(wszDefaultText) + 1) * sizeof(WCHAR);
      pSatText->dwDefaultTextOffset  = ROUNDTODWORD2(sizeof(SIMTEXT), pSatText->dwTextSize);
      wcscpy((WCHAR*)((BYTE*)pSatText + pSatText->dwDefaultTextOffset), wszDefaultText);
    }
    if (nIconId) {
      pSatText->dwParams            |= SIM_PARAM_SIMTEXT_ICONID | SIM_PARAM_SIMTEXT_ICONQUALIFIER;
      pSatText->dwIconIdentifier     = nIconId;
      pSatText->dwIconQualifier      = nIconQualifier;
    }
    pSatText->cbSize = ROUNDTODWORD3(sizeof(SIMTEXT), pSatText->dwTextSize, pSatText->dwDefaultTextSize);

    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::ParseSelectItem(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) 
{
UINT               i, nCmd, nNumItems, nDetails, nItem, nDefaultItem;
UINT              /* nItemIconsPresent, */nItemIconsQualifier, nTitleIconQualifier, nTitleIconId;
UINT               nNextActionId, nIconId;
DWORD              dwLen;
RILSIMTOOLKITCMD*  pSatCmd;
SIMMENU*           pSatMenu;
SIMMENUITEM*       pSatItem;
WCHAR              wszText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_SELECTITEM);

//<cr><lf>+PPSTGI:36,0,8,0,"4E1A52A17CBE9009",0,0<cr><lf>+PPSTGI:36,8,1,"83DC53557BA17406",0,0,0<cr><lf>+PPSTGI:36,8,2,"5F6994C38BBE7F6E",0,0,0<cr><lf>+PPSTGI:36,8,3,"97F34E5070ED7EBF",0,0,0<cr><lf>+PPSTGI:36,8,4,"79FB52A884DD9875",0,0,0<cr><lf>+PPSTGI:36,8,5,"7B2C4E0065F695F465B095FB",0,0,0<cr><lf>+PPSTGI:36,8,6,"59296C14988462A5",0,0,
  // Parse Title: "<details>,<numitems>,<"titletext">,<>defaultitem,<itemiconspresent>,<itemiconqualifier>,<titleiconqualifier>,<titleiconid>"
  // Parse Title: <CmdQualifier>,<ItemNum>,<DefaultItem>,<TitleText>,<TitleIconID>,<TitleIconQualifier>
  if (!ParseUInt(szRsp, FALSE, nDetails, szRsp)             ||
      !ParseRspParamSeparator(szRsp, szRsp)                 ||
      !ParseUInt(szRsp, FALSE, nNumItems, szRsp)            ||
      !ParseRspParamSeparator(szRsp, szRsp)                 ||
      !ParseUInt(szRsp, FALSE, nDefaultItem, szRsp)         ||
      !ParseRspParamSeparator(szRsp, szRsp)                 ||
      !ParseUCS2String(szRsp, wszText, UCS2_LEN, szRsp)     ||
      !ParseRspParamSeparator(szRsp, szRsp)					||
	  !ParseUInt(szRsp, FALSE, nTitleIconId, szRsp)         ||
	  !ParseRspParamSeparator(szRsp, szRsp)					||
      !ParseUInt(szRsp, FALSE, nTitleIconQualifier, szRsp)  ||
      //!ParseRspParamSeparator(szRsp, szRsp)                 ||
  /*
      !ParseUInt(szRsp, FALSE, nItemIconsPresent, szRsp)    ||
      !ParseRspParamSeparator(szRsp, szRsp)                 ||
      !ParseUInt(szRsp, FALSE, nItemIconsQualifier, szRsp)  ||
      !ParseRspParamSeparator(szRsp, szRsp)                 ||
         */
      !ParseRspPostfix(szRsp, szRsp)) {
      RILRetailTrace((TEXT("RilDrv: SimToolkit:CSimToolkitHandling::ParseSelectItem error 1\r\n")));
    PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_VALUESMISSING);
    fRet = FALSE;
  } else {
    // An item list without items is invalid
    if (!nNumItems) {
	RILRetailTrace((TEXT("RilDrv: SimToolkit:CSimToolkitHandling::ParseSelectItem error 2\r\n")));
      PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_COMMANDDATA);
      fRet = FALSE;
    } else {
      pSatMenu = (SIMMENU*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

      pSatMenu->dwParams            = SIM_PARAM_SIMMENU_FLAGS | SIM_PARAM_SIMMENU_MENUITEMCOUNT |
                                      SIM_PARAM_SIMMENU_MENUITEMOFFSET | SIM_PARAM_SIMMENU_MENUITEMSIZE;
      if (nDetails & 0x80)          { pSatMenu->dwFlags = SIMMENU_HELPINFO; }
      if (wcslen(wszText)) {
        pSatMenu->dwParams         |= SIM_PARAM_SIMMENU_TEXTSIZE | SIM_PARAM_SIMMENU_TEXTOFFSET;
        pSatMenu->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
        pSatMenu->dwTextOffset      = ROUNDTODWORD(sizeof(SIMMENU));
        wcscpy((WCHAR*)((BYTE*)pSatMenu + pSatMenu->dwTextOffset), wszText);
      }
      if (nDefaultItem) {
        pSatMenu->dwParams         |= SIM_PARAM_SIMMENU_DEFAULTITEM;
        pSatMenu->dwDefaultItem     = nDefaultItem;
      }
      if (nTitleIconId) {
        pSatMenu->dwParams         |= SIM_PARAM_SIMMENU_ICONID | SIM_PARAM_SIMMENU_ICONQUALIFIER;
        pSatMenu->dwIconIdentifier  = nTitleIconId;
        pSatMenu->dwIconQualifier   = nTitleIconQualifier;
      }
      pSatMenu->dwMenuItemCount     = nNumItems;
      pSatMenu->dwMenuItemOffset    = ROUNDTODWORD2(sizeof(SIMMENU), pSatMenu->dwTextSize);

      pSatMenu->cbSize = ROUNDTODWORD2(sizeof(SIMMENU), pSatMenu->dwTextSize);

      pSatItem = (SIMMENUITEM*)((BYTE*)pSatMenu + pSatMenu->dwMenuItemOffset);

      for (i = 0; i < nNumItems; i++) {
	  	//<cr><lf>+PPSTGI:36,0,8,0,"4E1A52A17CBE9009",0,0<cr><lf>+PPSTGI:36,8,1,"83DC53557BA17406",0,0,0<cr><lf>+PPSTGI:36,8,2,"5F6994C38BBE7F6E",0,0,0<cr><lf>+PPSTGI:36,8,3,"97F34E5070ED7EBF",0,0,0<cr><lf>+PPSTGI:36,8,4,"79FB52A884DD9875",0,0,0<cr><lf>+PPSTGI:36,8,5,"7B2C4E0065F695F465B095FB",0,0,0<cr><lf>+PPSTGI:36,8,6,"59296C14988462A5",0,0,
        // Parse Item: "^SSTGI: <cmdtype>,<itemid>,"itemtext",<nextactionid>,<iconid>"
        //			 +PPSTGI:<CmdType>,<ItemNum>,<ItemID>,<ItemText>,<ItemIconID>,<ItemIconQualifier>,<NextActionID>
        if (!MatchStringBeginning(szRsp, "+PPSTGI:", szRsp)    ||
            !ParseUInt(szRsp, FALSE, nCmd, szRsp)              ||
            !ParseRspParamSeparator(szRsp, szRsp)              ||
            !ParseUInt(szRsp, FALSE, nItem, szRsp)             ||		//itemNum
            !ParseRspParamSeparator(szRsp, szRsp)              ||
  			!ParseUInt(szRsp, FALSE, nItem, szRsp)             ||		//itemID
            !ParseRspParamSeparator(szRsp, szRsp)              ||	
            !ParseUCS2String(szRsp, wszText, UCS2_LEN, szRsp)  ||
            !ParseRspParamSeparator(szRsp, szRsp)              ||
            !ParseUInt(szRsp, FALSE, nIconId, szRsp)           ||
            !ParseRspParamSeparator(szRsp, szRsp)              ||
			!ParseUInt(szRsp, FALSE, nItemIconsQualifier,szRsp)||
            !ParseRspParamSeparator(szRsp, szRsp)              ||
            !ParseUInt(szRsp, FALSE, nNextActionId, szRsp)     ||
            //!ParseRspParamSeparator(szRsp, szRsp)              ||
            !ParseRspPostfix(szRsp, szRsp)) {
            RILRetailTrace((TEXT("RilDrv: SimToolkit:CSimToolkitHandling::ParseSelectItem error 3\r\n")));
          PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_VALUESMISSING);
          fRet = FALSE;
          break;
        }

        dwLen = wcslen(wszText);
        if (dwLen) {
          dwLen = (dwLen + 1) * sizeof(WCHAR);
        }
        if (((BYTE*)pSatItem + ROUNDTODWORD2(sizeof(SIMMENUITEM), dwLen)) >= &(m_bCmdBuffer[SIMTK_MAX_LENGTH])) {
          // Our temporary buffer on the stack is too small
          PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_COMMANDDATA);
          fRet = FALSE;
          break;
        }

        pSatItem->dwParams            = SIM_PARAM_SIMMENUITEM_FLAGS | SIM_PARAM_SIMMENUITEM_IDENTIFIER;
        if (nDetails & 0x80)          { pSatItem->dwFlags = SIMMENU_HELPINFO; }
        pSatItem->dwIdentifier        = nItem;
        if (dwLen) {
          pSatItem->dwParams         |= SIM_PARAM_SIMMENUITEM_TEXTSIZE | SIM_PARAM_SIMMENUITEM_TEXTOFFSET;
          pSatItem->dwTextSize        = dwLen;
          pSatItem->dwTextOffset      = ROUNDTODWORD(sizeof(SIMMENUITEM));
          wcscpy((WCHAR*)((BYTE*)pSatItem + pSatItem->dwTextOffset), wszText);
        }
        if (nNextActionId) {
          pSatItem->dwParams         |= SIM_PARAM_SIMMENUITEM_NEXTACTION;
          pSatItem->dwNextAction      = nNextActionId;
        }
        if (nIconId /*&& nItemIconsPresent*/) {
          pSatItem->dwParams         |= SIM_PARAM_SIMMENUITEM_ICONID | SIM_PARAM_SIMMENUITEM_ICONQUALIFIER;
          pSatItem->dwIconIdentifier  = nIconId;
          pSatItem->dwIconQualifier   = nItemIconsQualifier;
        }
        pSatItem->cbSize = ROUNDTODWORD2(sizeof(SIMMENUITEM), pSatItem->dwTextSize);

        pSatMenu->dwMenuItemSize += pSatItem->cbSize;

        pSatItem = (SIMMENUITEM*)((BYTE*)pSatItem + pSatItem->cbSize);
      }
      if (fRet) {
        pSatMenu->cbSize += pSatMenu->dwMenuItemSize;
        pSatCmd->cbSize += pSatMenu->cbSize;
        pSatCmd->dwDetailsSize = pSatMenu->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::ParseSetupMenu(LPCSTR szRsp, void*& pBlob, UINT& cbBlob) 
{
UINT               i, nCmd, nNumItems,/* nDetails,*/ nItem, nCmdQualifier, nDispMode;
UINT               nItemIconsPresent, nItemIconsQualifier/*, nTitleIconQualifier, nTitleIconId*/;
UINT               nNextActionId, nIconId;
DWORD              dwLen;
RILSIMTOOLKITCMD*  pSatCmd;
SIMMENU*           pSatMenu;
SIMMENUITEM*       pSatItem;
WCHAR              wszText[UCS2_LEN + 1];
BOOL               fRet = TRUE;

  PrepareRilCmdStruct(m_bCmdBuffer, &pSatCmd, SIM_NOTIFY_SETUPMENU);

  // Parse Title: "<CmdQualifier>,<NumItems>,<"titletext">,<dwIconID>,<itemiconqualifier>"
  if (!ParseUInt(szRsp, FALSE, nCmdQualifier, szRsp)        ||
      !ParseRspParamSeparator(szRsp, szRsp)                 ||
      !ParseUInt(szRsp, FALSE, nNumItems, szRsp)            ||
      !ParseRspParamSeparator(szRsp, szRsp)                 ||
      !ParseUCS2String(szRsp, wszText, UCS2_LEN, szRsp)     ||
      !ParseRspParamSeparator(szRsp, szRsp)                 ||
      !ParseUInt(szRsp, FALSE, nItemIconsPresent, szRsp)    ||
      !ParseRspParamSeparator(szRsp, szRsp)                 ||
      !ParseUInt(szRsp, FALSE, nItemIconsQualifier, szRsp)  ||
      !ParseRspPostfix(szRsp, szRsp)) 
  {
  	RILRetailTrace((TEXT("RilDrv: SimToolkitHandling::ParseSetupMenu(Analyse Failed!!!)\r\n")));
    PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_VALUESMISSING);
    fRet = FALSE;
  } else {
  	RILRetailTrace((TEXT("RilDrv: SimToolkitHandling::ParseSetupMenu(CmdQua:%u,NumItem:%u,dwIconId:%u\r\n"), nCmdQualifier,nNumItems,nItemIconsPresent));
	
    pSatMenu = (SIMMENU*)((BYTE*)pSatCmd + pSatCmd->dwDetailsOffset);

    pSatMenu->dwParams            = SIM_PARAM_SIMMENU_FLAGS | SIM_PARAM_SIMMENU_MENUITEMCOUNT |
                                    SIM_PARAM_SIMMENU_MENUITEMOFFSET | SIM_PARAM_SIMMENU_MENUITEMSIZE;
    if (nCmdQualifier & 0x80)          { pSatMenu->dwFlags = SIMMENU_HELPINFO; }
    if (wcslen(wszText)) {
      pSatMenu->dwParams         |= SIM_PARAM_SIMMENU_TEXTSIZE | SIM_PARAM_SIMMENU_TEXTOFFSET;
      pSatMenu->dwTextSize        = (wcslen(wszText) + 1) * sizeof(WCHAR);
      pSatMenu->dwTextOffset      = ROUNDTODWORD(sizeof(SIMMENU));
      wcscpy((WCHAR*)((BYTE*)pSatMenu + pSatMenu->dwTextOffset), wszText);
    }
    if (1/*nTitleIconId*/) {
      pSatMenu->dwParams         |= SIM_PARAM_SIMMENU_ICONID | SIM_PARAM_SIMMENU_ICONQUALIFIER;
      pSatMenu->dwIconIdentifier  = nItemIconsPresent;
      pSatMenu->dwIconQualifier   = nItemIconsQualifier;
    }
    pSatMenu->dwMenuItemCount     = nNumItems;
    pSatMenu->dwMenuItemOffset    = ROUNDTODWORD2(sizeof(SIMMENU), pSatMenu->dwTextSize);

    pSatMenu->cbSize = ROUNDTODWORD2(sizeof(SIMMENU), pSatMenu->dwTextSize);

    pSatItem = (SIMMENUITEM*)((BYTE*)pSatMenu + pSatMenu->dwMenuItemOffset);

    for (i = 0; i < nNumItems; i++) {
      // Parse Item: "+PPSTGI: <cmdtype>,<itemnum>,<itemid>,"itemtext",<iconId>,<dispMode>,<nai>"
      if (!MatchStringBeginning(szRsp, "+PPSTGI:", szRsp)    ||
          !ParseUInt(szRsp, FALSE, nCmd, szRsp)              ||
          !ParseRspParamSeparator(szRsp, szRsp)              ||
		  !ParseUInt(szRsp, FALSE, nItem, szRsp)             ||  //this is number of menu items.
          !ParseRspParamSeparator(szRsp, szRsp)              ||
          !ParseUInt(szRsp, FALSE, nItem, szRsp)             ||
          !ParseRspParamSeparator(szRsp, szRsp)              ||
          !ParseUCS2String(szRsp, wszText, UCS2_LEN, szRsp)  ||
          !ParseRspParamSeparator(szRsp, szRsp) 			 ||
          !ParseUInt(szRsp, FALSE, nIconId, szRsp) 			 ||
		  !ParseRspParamSeparator(szRsp, szRsp) 			 ||	
          !ParseUInt(szRsp, FALSE, nDispMode, szRsp) 		 ||
          !ParseRspParamSeparator(szRsp, szRsp) 			 ||
          !ParseUInt(szRsp, FALSE, nNextActionId, szRsp)     ||
          !ParseRspPostfix(szRsp, szRsp)) {
        PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_VALUESMISSING);
        fRet = FALSE;
        break;
      }

      dwLen = wcslen(wszText);
      if (dwLen) {
        dwLen = (dwLen + 1) * sizeof(WCHAR);
      }
      if (((BYTE*)pSatItem + ROUNDTODWORD2(sizeof(SIMMENUITEM), dwLen)) >= &(m_bCmdBuffer[SIMTK_MAX_LENGTH])) {
        // Our temporary buffer on the stack is too small

		RILRetailTrace((TEXT("RilDrv: SimToolkitHandling::Our temporary buffer on the stack is too small\r\n")));
        PrepareRilCmdError(pSatCmd, SIM_RESPONSE_ERR_COMMANDDATA);
        fRet = FALSE;
        break;
      }

	  RILRetailTrace((TEXT("RilDrv: SimToolkitHandling::ParseSetupMenu(MenuItemId:%u\r\n"), nItem));
	  
      pSatItem->dwParams            = SIM_PARAM_SIMMENUITEM_FLAGS | SIM_PARAM_SIMMENUITEM_IDENTIFIER;
      if (nCmdQualifier & 0x80)          { pSatItem->dwFlags = SIMMENU_HELPINFO; }
      pSatItem->dwIdentifier        = nItem;
      if (dwLen) {
        pSatItem->dwParams         |= SIM_PARAM_SIMMENUITEM_TEXTSIZE | SIM_PARAM_SIMMENUITEM_TEXTOFFSET;
        pSatItem->dwTextSize        = dwLen;
        pSatItem->dwTextOffset      = ROUNDTODWORD(sizeof(SIMMENUITEM));
        wcscpy((WCHAR*)((BYTE*)pSatItem + pSatItem->dwTextOffset), wszText);
      }
      if (nNextActionId) {
        pSatItem->dwParams         |= SIM_PARAM_SIMMENUITEM_NEXTACTION;
        pSatItem->dwNextAction      = nNextActionId;
      }
      if (nIconId && nItemIconsPresent) {
        pSatItem->dwParams         |= SIM_PARAM_SIMMENUITEM_ICONID | SIM_PARAM_SIMMENUITEM_ICONQUALIFIER;
        pSatItem->dwIconIdentifier  = nIconId;
        pSatItem->dwIconQualifier   = nDispMode/*nItemIconsQualifier*/;
      }
      pSatItem->cbSize = ROUNDTODWORD2(sizeof(SIMMENUITEM), pSatItem->dwTextSize);

      pSatMenu->dwMenuItemSize += pSatItem->cbSize;

⌨️ 快捷键说明

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