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

📄 em.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    case EM_IN_NC_FN_OFFSET_2:
    case EM_IN_NC_TA_OFFSET_2:
    case EM_IN_NC_LAC_2:
    case EM_IN_NC_BA_2:
    case EM_IN_NC_BQ_2:
    case EM_IN_NC_TIL_STATE_2:
      cell_id = 1;
    break;

    case EM_IN_NC_BCCH_3:
    case EM_IN_NC_RX_3:
    case EM_IN_NC_C1_3:
    case EM_IN_NC_C2_3:
    case EM_IN_NC_BSIC_3:
    case EM_IN_NC_CID_3:
    case EM_IN_NC_FN_OFFSET_3:
    case EM_IN_NC_TA_OFFSET_3:
    case EM_IN_NC_LAC_3:
    case EM_IN_NC_BA_3:
    case EM_IN_NC_BQ_3:
    case EM_IN_NC_TIL_STATE_3:
      cell_id = 2;
    break;

    case EM_IN_NC_BCCH_4:
    case EM_IN_NC_RX_4:
    case EM_IN_NC_C1_4:
    case EM_IN_NC_C2_4:
    case EM_IN_NC_BSIC_4:
    case EM_IN_NC_CID_4:
    case EM_IN_NC_FN_OFFSET_4:
    case EM_IN_NC_TA_OFFSET_4:
    case EM_IN_NC_LAC_4:
    case EM_IN_NC_BA_4:
    case EM_IN_NC_BQ_4:
    case EM_IN_NC_TIL_STATE_4:
      cell_id = 3;
    break;

    case EM_IN_NC_BCCH_5:
    case EM_IN_NC_RX_5:
    case EM_IN_NC_C1_5:
    case EM_IN_NC_C2_5:
    case EM_IN_NC_BSIC_5:
    case EM_IN_NC_CID_5:
    case EM_IN_NC_FN_OFFSET_5:
    case EM_IN_NC_TA_OFFSET_5:
    case EM_IN_NC_LAC_5:
    case EM_IN_NC_BA_5:
    case EM_IN_NC_BQ_5:
    case EM_IN_NC_TIL_STATE_5:
      cell_id = 4;
    break;

    case EM_IN_NC_BCCH_6:
    case EM_IN_NC_RX_6:
    case EM_IN_NC_C1_6:
    case EM_IN_NC_C2_6:
    case EM_IN_NC_BSIC_6:
    case EM_IN_NC_CID_6:
    case EM_IN_NC_FN_OFFSET_6:
    case EM_IN_NC_TA_OFFSET_6:
    case EM_IN_NC_LAC_6:
    case EM_IN_NC_BA_6:
    case EM_IN_NC_BQ_6:
    case EM_IN_NC_TIL_STATE_6:
      cell_id = 5;
    break;

    case EM_IN_NC_TIL_SYNC_CNT:
    case EM_IN_NC_TIL_BCCH_CNT:
       cell_id = 6; // Serving cell
    break;

    default:
      return EM_DATA_NOT_AVAIL;
  }


  ret = em_get_nc_data (&em_nc_data, cell_id);  // ncell data

  switch (em_type)
  {
    case EM_IN_NC_BCCH_1:
    case EM_IN_NC_BCCH_2:
    case EM_IN_NC_BCCH_3:
    case EM_IN_NC_BCCH_4:
    case EM_IN_NC_BCCH_5:
    case EM_IN_NC_BCCH_6:
      if (ret NEQ 0)
      {
        sprintf ((char *)out_em_data->em_parameter,"%3x",em_nc_data.arfcn);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_RX_1:
    case EM_IN_NC_RX_2:
    case EM_IN_NC_RX_3:
    case EM_IN_NC_RX_4:
    case EM_IN_NC_RX_5:
    case EM_IN_NC_RX_6:
      if (ret NEQ 0)
      {
        sprintf ((char *)out_em_data->em_parameter,"%3d",em_nc_data.rxlev);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_BSIC_1:
    case EM_IN_NC_BSIC_2:
    case EM_IN_NC_BSIC_3:
    case EM_IN_NC_BSIC_4:
    case EM_IN_NC_BSIC_5:
    case EM_IN_NC_BSIC_6:
      if (ret NEQ 0)
      {
        sprintf ((char *)out_em_data->em_parameter,"%3x",em_nc_data.bsic);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_C1_1:
    case EM_IN_NC_C1_2:
    case EM_IN_NC_C1_3:
    case EM_IN_NC_C1_4:
    case EM_IN_NC_C1_5:
    case EM_IN_NC_C1_6:
      if (ret EQ 1)
      {
        sprintf ((char *)out_em_data->em_parameter,"%3d",em_nc_data.c1);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_C2_1:
    case EM_IN_NC_C2_2:
    case EM_IN_NC_C2_3:
    case EM_IN_NC_C2_4:
    case EM_IN_NC_C2_5:
    case EM_IN_NC_C2_6:
      if (ret EQ 1)
      {
        sprintf ((char *)out_em_data->em_parameter,"%3d",em_nc_data.c2);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_LAC_1:
    case EM_IN_NC_LAC_2:
    case EM_IN_NC_LAC_3:
    case EM_IN_NC_LAC_4:
    case EM_IN_NC_LAC_5:
    case EM_IN_NC_LAC_6:
      if (ret EQ 1)
      {
        sprintf ((char *)out_em_data->em_parameter,"%3x",em_nc_data.lac);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_BA_1:
    case EM_IN_NC_BA_2:
    case EM_IN_NC_BA_3:
    case EM_IN_NC_BA_4:
    case EM_IN_NC_BA_5:
    case EM_IN_NC_BA_6:
      if (ret EQ 1)
      {
        sprintf ((char *)out_em_data->em_parameter,"%3x",em_nc_data.cba);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_BQ_1:
    case EM_IN_NC_BQ_2:
    case EM_IN_NC_BQ_3:
    case EM_IN_NC_BQ_4:
    case EM_IN_NC_BQ_5:
    case EM_IN_NC_BQ_6:
      if (ret EQ 1)
      {
        sprintf ((char *)out_em_data->em_parameter,"%3x",em_nc_data.cbq);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_TIL_STATE_1:
    case EM_IN_NC_TIL_STATE_2:
    case EM_IN_NC_TIL_STATE_3:
    case EM_IN_NC_TIL_STATE_4:
    case EM_IN_NC_TIL_STATE_5:
    case EM_IN_NC_TIL_STATE_6:
#if !defined(FF_GTI)
      if (ret NEQ 0)
      {
        sprintf ((char *)out_em_data->em_parameter,"%3d",em_nc_data.til_state);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
#endif  /* !FF_GTI */
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_TIL_SYNC_CNT:
#if !defined(FF_GTI)
      if ( (ret EQ 1) && (em_nc_data.sync_cnt NEQ 0xFF) )
      {
        sprintf ((char *)out_em_data->em_parameter,"%3d",em_nc_data.sync_cnt);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
#endif  /* !FF_GTI */
        return EM_DATA_NOT_AVAIL;
      break;

    case EM_IN_NC_TIL_BCCH_CNT:
#if !defined(FF_GTI)
      if ( (ret EQ 1) && (em_nc_data.bcch_cnt NEQ 0xFF) )
      {
        sprintf ((char *)out_em_data->em_parameter,"%3d",em_nc_data.bcch_cnt);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
      else
#endif  /* !FF_GTI */
        return EM_DATA_NOT_AVAIL;
      break;

    default:
          return EM_INVALID_TYPE;
      break;

  }
}

LOCAL UBYTE em_check_em_subclass_lup_and_pag (UBYTE          em_type,
                                              em_data_type * out_em_data)
{
  UBYTE * sys_info_3 = NULL;

  out_em_data->em_class    = EM_CLASS_INFRA_DATA;
  out_em_data->em_subclass = EM_SUBCLASS_LUP_AND_PAG;
  out_em_data->em_type     = em_type;

#if defined(FF_GTI)
  sys_info_3 = em_get_sysinfo_type3 ();  // sys info 3
#else
  sys_info_3 = em_get_sys_info (0x1B);  // sys info 3
#endif  /* FF_GTI */

  switch (em_type)
  {
    case EM_IN_LP_BS_PA_MFRMS:
      if (sys_info_3 EQ NULL)
        return EM_DATA_NOT_AVAIL;
      else
      {
        sprintf ((char *)out_em_data->em_parameter,"%d",(sys_info_3[10]&7)+2);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
    case EM_IN_LP_T3212:
      if (sys_info_3 EQ NULL)
        return EM_DATA_NOT_AVAIL;
      else
      {
        sprintf ((char *)out_em_data->em_parameter,"%d",sys_info_3[11]);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
    case EM_IN_LP_MCC:
      if (sys_info_3 EQ NULL)
        return EM_DATA_NOT_AVAIL;
      else
      {
        USHORT mcc;

        mcc = (sys_info_3[4] & 0x0F)*100 + 
              ((sys_info_3[4] & 0xF0)>>4)*10 +
               (sys_info_3[5] & 0x0F);
        sprintf ((char *)out_em_data->em_parameter,"%d",mcc);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
    case EM_IN_LP_MNC:
      if (sys_info_3 EQ NULL)
        return EM_DATA_NOT_AVAIL;
      else
      {
        USHORT mnc;

        mnc = (sys_info_3[6] & 0x0F)*10 + 
              ((sys_info_3[6] & 0xF0)>>4);
        sprintf ((char *)out_em_data->em_parameter,"%d",mnc);
        out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        return DRV_OK;
      }
    case EM_IN_LP_LAC:
    case EM_IN_LP_LAC_RAW:
      if (sys_info_3 EQ NULL)
        return EM_DATA_NOT_AVAIL;
      else
      {
        USHORT lac;

        lac = (sys_info_3[7] << 8) + 
               sys_info_3[8];
        if (em_type EQ EM_IN_LP_LAC)
        {
          sprintf ((char *)out_em_data->em_parameter,"%d",lac);
          out_em_data->em_length = strlen ((char *)out_em_data->em_parameter);
        }
        else
        {
          out_em_data->em_parameter[0] = sys_info_3[7];
          out_em_data->em_parameter[1] = sys_info_3[8];
          out_em_data->em_length       = 2;
        }
        return DRV_OK;
      }
    case EM_IN_LP_CI_RAW:
      if (sys_info_3 EQ NULL)
        return EM_DATA_NOT_AVAIL;
      else
      {
        out_em_data->em_parameter[0] = sys_info_3[2];
        out_em_data->em_parameter[1] = sys_info_3[3];
        out_em_data->em_length       = 2;
      }
      return DRV_OK;

   default:
      return EM_INVALID_TYPE;
  }
}

#endif

⌨️ 快捷键说明

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