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

📄 ril.cs

📁 C# RIL FOR WINDOWS MOBILE5
💻 CS
📖 第 1 页 / 共 3 页
字号:
                string f = _cellTowerInfo.dwMobileCountryCode.ToString();
                string g = _cellTowerInfo.dwMobileNetworkCode.ToString();
                string h = _cellTowerInfo.dwNumBCCH.ToString();

                return new CELLINFO(((_cellTowerInfo.dwParams & RIL_PARAM_CTI_MOBILECOUNTRYCODE) == 0) ? RIL_PARAM_NOT_AVAILABLE : _cellTowerInfo.dwMobileCountryCode.ToString(),
                                    ((_cellTowerInfo.dwParams & RIL_PARAM_CTI_MOBILENETWORKCODE) == 0) ? RIL_PARAM_NOT_AVAILABLE : _cellTowerInfo.dwMobileNetworkCode.ToString(),
                                    ((_cellTowerInfo.dwParams & RIL_PARAM_CTI_LOCATIONAREACODE) == 0) ? RIL_PARAM_NOT_AVAILABLE : _cellTowerInfo.dwLocationAreaCode.ToString(),
                                    ((_cellTowerInfo.dwParams & RIL_PARAM_CTI_CELLID) == 0) ? RIL_PARAM_NOT_AVAILABLE : _cellTowerInfo.dwCellID.ToString(),
                                    ((_cellTowerInfo.dwParams & RIL_PARAM_CTI_RXLEVEL) == 0) ? RIL_PARAM_NOT_AVAILABLE : _cellTowerInfo.dwRxLevel.ToString(),
                                    ((_cellTowerInfo.dwParams & RIL_PARAM_CTI_RXQUALITY) == 0) ? RIL_PARAM_NOT_AVAILABLE : _cellTowerInfo.dwRxQuality.ToString());
              }
        }
        return null;
    }
    #endregion

    #region GetCurrentOperator
    public static OPERATORNAMES GetCurrentOperator(RIL_OPFORMAT format)
    {                           
        IntPtr res = IntPtr.Zero;
        res = RIL_GetCurrentOperator(hRil, new System.IntPtr((int)format));
        if ((System.Int32)res > 0)
        {
            rilCmd.CmdId = (System.Int32) res;
            rilCmd.CmdType = RIL_CMD_TYPE.OPERATOR;

            int mult = 0;
            while((mult<(_vTimeOut*1000))&&(rilCmd.CmdType != RIL_CMD_TYPE.NONE))
            {
                System.Threading.Thread.Sleep(100);
                mult+=100;
            }
            if (rilCmd.CmdType != RIL_CMD_TYPE.NONE)
                return new OPERATORNAMES(RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT);

            if (ril_result != RIL_RESULT.OK)
                return new OPERATORNAMES(ril_result.ToString(), ril_result.ToString(), ril_result.ToString(), ril_result.ToString());
            else                                                                
            return new OPERATORNAMES(((_vOperatore.dwParams & RIL_PARAM_ON_LONGNAME) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_vOperatore.szLongName, 0, _vOperatore.szLongName.Length).Replace("\0",""),
                                     ((_vOperatore.dwParams & RIL_PARAM_ON_SHORTNAME) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_vOperatore.szShortName, 0, _vOperatore.szShortName.Length).Replace("\0", ""),
                                     ((_vOperatore.dwParams & RIL_PARAM_ON_NUMNAME) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_vOperatore.szNumName, 0, _vOperatore.szNumName.Length).Replace("\0", ""),
                                     ((_vOperatore.dwParams & RIL_PARAM_ON_COUNTRY_CODE) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_vOperatore.szCountryCode, 0, _vOperatore.szCountryCode.Length).Replace("\0", ""));                                                 
        }
        return null;
    }
    #endregion

    #region GetEquipmentInfo
    public static EQUIPMENTINFO GetEquipmentInfo()
    {
      IntPtr res = IntPtr.Zero;
      res = RIL_GetEquipmentInfo(hRil);
      if ((System.Int32)res > 0)
      {
        rilCmd.CmdId = (System.Int32)res;
        rilCmd.CmdType = RIL_CMD_TYPE.EQUIPMENTINFO;

        int mult = 0;
        while ((mult < (_vTimeOut * 1000)) && (rilCmd.CmdType != RIL_CMD_TYPE.NONE))
        {
          System.Threading.Thread.Sleep(100);
          mult += 100;
        }
        if (rilCmd.CmdType != RIL_CMD_TYPE.NONE)
          return new EQUIPMENTINFO(RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT);

        if (ril_result != RIL_RESULT.OK)
          return new EQUIPMENTINFO(ril_result.ToString(), ril_result.ToString(), ril_result.ToString(), ril_result.ToString());
        else
          return new EQUIPMENTINFO(((_equipmentInfo.dwParams & RIL_PARAM_EI_MANUFACTURER) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_equipmentInfo.szManufacturer, 0, _equipmentInfo.szManufacturer.Length).Replace("\0", ""),
                                   ((_equipmentInfo.dwParams & RIL_PARAM_EI_MODEL) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_equipmentInfo.szModel, 0, _equipmentInfo.szModel.Length).Replace("\0", ""),
                                   ((_equipmentInfo.dwParams & RIL_PARAM_EI_REVISION) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_equipmentInfo.szRevision, 0, _equipmentInfo.szRevision.Length).Replace("\0", ""),
                                   ((_equipmentInfo.dwParams & RIL_PARAM_EI_SERIALNUMBER) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_equipmentInfo.szSerialNumber, 0, _equipmentInfo.szSerialNumber.Length).Replace("\0", ""));
      }
      return null;
    }
    #endregion

    #region GetSubscriberInfo
    public static SUBSCRIBERINFO GetSubscriberInfo()
    {
      IntPtr res = IntPtr.Zero;
      res = RIL_GetSubscriberNumbers(hRil);
      if ((System.Int32)res > 0)
      {
        rilCmd.CmdId = (System.Int32)res;
        rilCmd.CmdType = RIL_CMD_TYPE.SUBSCRIBERINFO;

        int mult = 0;
        while ((mult < (_vTimeOut * 1000)) && (rilCmd.CmdType != RIL_CMD_TYPE.NONE))
        {
          System.Threading.Thread.Sleep(100);
          mult += 100;
        }
        if (rilCmd.CmdType != RIL_CMD_TYPE.NONE)
          return new SUBSCRIBERINFO(RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT, RIL_CMD_TIMEOUT);

        if (ril_result != RIL_RESULT.OK)
          return new SUBSCRIBERINFO(ril_result.ToString(), ril_result.ToString(), ril_result.ToString(), ril_result.ToString(), ril_result.ToString(), ril_result.ToString());
        else
          return new SUBSCRIBERINFO(((_subscriberInfo.dwParams & RIL_PARAM_SI_ADDRESS) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_subscriberInfo.wszAddress, 0, _subscriberInfo.wszAddress.Length).Replace("\0", ""),
                                    ((_subscriberInfo.dwParams & RIL_PARAM_SI_DESCRIPTION) == 0) ? RIL_PARAM_NOT_AVAILABLE : System.Text.Encoding.ASCII.GetString(_subscriberInfo.wszDescription, 0, _subscriberInfo.wszDescription.Length).Replace("\0", ""),
                                    ((_subscriberInfo.dwParams & RIL_PARAM_SI_SPEED) == 0) ? RIL_PARAM_NOT_AVAILABLE : _subscriberInfo.dwSpeed.ToString(),
                                    ((_subscriberInfo.dwParams & RIL_PARAM_SI_SERVICE) == 0) ? RIL_PARAM_NOT_AVAILABLE : _subscriberInfo.dwService.ToString(),
                                    ((_subscriberInfo.dwParams & RIL_PARAM_SI_ITC) == 0) ? RIL_PARAM_NOT_AVAILABLE : _subscriberInfo.dwITC.ToString(),
                                    ((_subscriberInfo.dwParams & RIL_PARAM_SI_ADDRESSID) == 0) ? RIL_PARAM_NOT_AVAILABLE : _subscriberInfo.dwAddressId.ToString());
      }
      return null;
    }
    #endregion

    private static void _NotifyCallback(IntPtr dwCode, System.IntPtr lpData, IntPtr cbData, IntPtr dwParam)
    {
        switch((Int32)dwCode)
        {
            case RIL_NOTIFY_SIGNALQUALITY:
                RILSIGNALQUALITY _signalQuality = (RILSIGNALQUALITY)Marshal.PtrToStructure(lpData, typeof(RILSIGNALQUALITY));
                EVENTS.RiseSignalQualityChanged(new SIGNALQUALITY(((_signalQuality.dwParams & RIL_PARAM_SQ_SIGNALSTRENGTH) == 0) ? RIL_PARAM_NOT_AVAILABLE : _signalQuality.nSignalStrength.ToString(),
                                            ((_signalQuality.dwParams & RIL_PARAM_SQ_MINSIGNALSTRENGTH) == 0) ? RIL_PARAM_NOT_AVAILABLE : _signalQuality.nMinSignalStrength.ToString(),
                                            ((_signalQuality.dwParams & RIL_PARAM_SQ_MAXSIGNALSTRENGTH) == 0) ? RIL_PARAM_NOT_AVAILABLE : _signalQuality.nMaxSignalStrength.ToString(),
                                            ((_signalQuality.dwParams & RIL_PARAM_SQ_BITERRORRATE) == 0) ? RIL_PARAM_NOT_AVAILABLE : _signalQuality.dwBitErrorRate.ToString(),
                                            ((_signalQuality.dwParams & RIL_PARAM_SQ_LOWSIGNALSTRENGTH) == 0) ? RIL_PARAM_NOT_AVAILABLE : _signalQuality.nLowSignalStrength.ToString(),
                                            ((_signalQuality.dwParams & RIL_PARAM_SQ_HIGHSIGNALSTRENGTH) == 0) ? RIL_PARAM_NOT_AVAILABLE : _signalQuality.nHighSignalStrength.ToString()));                   
                break;

        }           
    }

    private static void _ResultCallback(IntPtr dwCode, IntPtr hrCmdID, System.IntPtr lpData, IntPtr cbData, IntPtr dwParam)
    {            
        if ((rilCmd.CmdType != RIL_CMD_TYPE.NONE)&&(rilCmd.CmdId==(Int32)hrCmdID))
        {
            if ((Int32)dwCode == (Int32)RIL_RESULT.OK)
            {
                switch (rilCmd.CmdType)
                {
                    case RIL_CMD_TYPE.OPERATOR:
                        _vOperatore = (RILOPERATORNAMES)Marshal.PtrToStructure(lpData, typeof(RILOPERATORNAMES));
                        break;
                    case RIL_CMD_TYPE.CELLTOWERINFO:
                        _cellTowerInfo = (RILCELLTOWERINFO)Marshal.PtrToStructure(lpData, typeof(RILCELLTOWERINFO));                            
                        break;
                    case RIL_CMD_TYPE.SIGNALQUALITY:
                        _signalQuality = (RILSIGNALQUALITY)Marshal.PtrToStructure(lpData, typeof(RILSIGNALQUALITY));
                        break;
                    case RIL_CMD_TYPE.EQUIPMENTINFO:
                        _equipmentInfo = (RILEQUIPMENTINFO)Marshal.PtrToStructure(lpData, typeof(RILEQUIPMENTINFO));
                        break;
                    case RIL_CMD_TYPE.SUBSCRIBERINFO:
                        _subscriberInfo = (RILSUBSCRIBERINFO)Marshal.PtrToStructure(lpData, typeof(RILSUBSCRIBERINFO));
                        break;
                }
            }
            ril_result = (RIL_RESULT)((Int32)dwCode);
            rilCmd.CmdType = RIL_CMD_TYPE.NONE;
        }
    }      

    #region Invoke/RIL        
    [DllImport("ril.dll")]
    private static extern IntPtr RIL_Initialize(IntPtr dwIndex, System.IntPtr pfnResult, System.IntPtr pfnNotify, IntPtr dwNotificationClasses, IntPtr dwParam, out IntPtr lphRil);

    [DllImport("ril.dll")]
    private static extern IntPtr RIL_Deinitialize(IntPtr lphRil);

    [DllImport("ril.dll")]
    private static extern IntPtr RIL_GetCurrentOperator(IntPtr hRil, IntPtr dwFormat);

    [DllImport("ril.dll")]
    private static extern IntPtr RIL_GetCellTowerInfo(IntPtr hRil);

    [DllImport("ril.dll")]
    private static extern IntPtr RIL_GetSignalQuality(IntPtr hRil);                

    [DllImport("ril.dll")]
    private static extern IntPtr RIL_GetEquipmentInfo(IntPtr hRil);                

    [DllImport("ril.dll")]
    private static extern IntPtr RIL_GetSubscriberNumbers(IntPtr hRil);                
    #endregion     

    private struct RIL_CMD
    {
        Int32 _cmdId;
        RIL_CMD_TYPE _cmdType;
        public Int32 CmdId
        {
            get { return _cmdId; }
            set { _cmdId = value; }
        }            
        public RIL_CMD_TYPE CmdType
        {
            get { return _cmdType; }
            set { _cmdType = value; }
        }
        public RIL_CMD(Int32 cmdId, RIL_CMD_TYPE cmdType)
        {
            _cmdId = cmdId;
            _cmdType = cmdType;
        }
    }

    private enum RIL_CMD_TYPE
    {
      NONE = 0,
      OPERATOR = 1,
      CELLTOWERINFO=2,
      SIGNALQUALITY=3,
      EQUIPMENTINFO=4,
      SUBSCRIBERINFO=5
    }

    private enum RIL_RESULT
    {
        OK = 1,
        NOCARRIER = 2,
        ERROR = 3,
        NODIALTONE = 4,
        BUSY = 5,
        NOANSWER = 6,
        CALLABORTED = 7
    }

    #region OPERATORNAMES struct
    public enum RIL_OPFORMAT
    {
        LONG = 0x00000001,
        SHORT = 0x00000002,

⌨️ 快捷键说明

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