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

📄 rilsimtk_ozone.cpp

📁 windows mobile RIL软件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    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 + -