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

📄 ril.cs

📁 C# RIL FOR WINDOWS MOBILE5
💻 CS
📖 第 1 页 / 共 2 页
字号:
                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;
                    }
                }
                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);                
        #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
        }

        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,
            NUM = 0x00000003
        }


        [StructLayout(LayoutKind.Sequential)]
        private struct RILOPERATORNAMES
        {
            public Int32 cbSize;
            public Int32 dwParams;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = RIL.MAXLENGTH_OPERATOR_LONG)]
            public byte[] szLongName;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = RIL.MAXLENGTH_OPERATOR_SHORT)]
            public byte[] szShortName;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = RIL.MAXLENGTH_OPERATOR_NUMERIC)]
            public byte[] szNumName;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = RIL.MAXLENGTH_OPERATOR_COUNTRY_CODE)]
            public byte[] szCountryCode;
        }

        public class OPERATORNAMES
        {
            public string LongName;
            public string ShortName;
            public string NumName;
            public string CountryCode;
            public OPERATORNAMES(string LongName, string ShortName, string NumName, string CountryCode)
            {
                this.LongName = LongName;
                this.ShortName = ShortName;
                this.NumName = NumName;
                this.CountryCode = CountryCode;
            }
        }
        #endregion

        #region CELLINFO struct
        public class CELLINFO
        {
            public string MobileCountryCode;
            public string MobileNetworkCode;
            public string LocationAreaCode;
            public string CellID;
            public string RxLevel;
            public string RxQuality;
            public CELLINFO(string MobileCountryCode, string MobileNetworkCode, string LocationAreaCode, string CellID, string RxLevel, string RxQuality)
            {
                this.MobileCountryCode = MobileCountryCode;
                this.MobileNetworkCode = MobileNetworkCode;
                this.LocationAreaCode  = LocationAreaCode;
                this.CellID = CellID;
                this.RxLevel = RxLevel;
                this.RxQuality = RxQuality;
            }
        }

        [StructLayout(LayoutKind.Sequential)]
        private struct RILCELLTOWERINFO
        {
            public UInt32 cbSize;                       // @field structure size in bytes
            public UInt32 dwParams;                     // @field indicates valid parameters
            public UInt32 dwMobileCountryCode;          // @field TBD
            public UInt32 dwMobileNetworkCode;          // @field TBD
            public UInt32 dwLocationAreaCode;           // @field TBD
            public UInt32 dwCellID;                     // @field TBD
            public UInt32 dwBaseStationID;              // @field TBD
            public UInt32 dwBroadcastControlChannel;    // @field TBD
            public UInt32 dwRxLevel;                    // @field Value from 0-63 (see GSM 05.08, 8.1.4)
            public UInt32 dwRxLevelFull;                // @field Value from 0-63 (see GSM 05.08, 8.1.4)
            public UInt32 dwRxLevelSub;                 // @field Value from 0-63 (see GSM 05.08, 8.1.4)
            public UInt32 dwRxQuality;                  // @field Value from 0-7  (see GSM 05.08, 8.2.4)
            public UInt32 dwRxQualityFull;              // @field Value from 0-7  (see GSM 05.08, 8.2.4)
            public UInt32 dwRxQualitySub;               // @field Value from 0-7  (see GSM 05.08, 8.2.4)
            public UInt32 dwIdleTimeSlot;               // @field TBD
            public UInt32 dwTimingAdvance;              // @field TBD
            public UInt32 dwGPRSCellID;                 // @field TBD
            public UInt32 dwGPRSBaseStationID;          // @field TBD
            public UInt32 dwNumBCCH;                    // @field TBD
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = RIL.MAXLENGTH_BCCH)]
            public byte[] rgbBCCH;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = RIL.MAXLENGTH_NMR)]
            public byte[] rgbNMR;
        }
        #endregion

        #region SIGNALQUALITY struct
        [StructLayout(LayoutKind.Sequential)]
        private struct RILSIGNALQUALITY
        {
            public UInt32 cbSize;                       // @field structure size in bytes
            public UInt32 dwParams;                     // @field indicates valid parameters          
            public Int32  nSignalStrength;                // @field TBD
            public Int32  nMinSignalStrength;             // @field TBD
            public Int32  nMaxSignalStrength;             // @field TBD
            public UInt32 dwBitErrorRate;               // @field bit error rate in 1/100 of a percent
            public Int32  nLowSignalStrength;             // @field TBD
            public Int32  nHighSignalStrength;            // @field TBD
        }

        
        #endregion


        
    }
    public class SIGNALQUALITY
    {
        public string SignalStrength;                // @field TBD
        public string MinSignalStrength;             // @field TBD
        public string MaxSignalStrength;             // @field TBD
        public string BitErrorRate;               // @field bit error rate in 1/100 of a percent
        public string LowSignalStrength;             // @field TBD
        public string HighSignalStrength;            // @field TBD             

        public SIGNALQUALITY(string SignalStrength, string MinSignalStrength, string MaxSignalStrength, string BitErrorRate, string LowSignalStrength, string HighSignalStrength)
        {
            this.SignalStrength = SignalStrength;
            this.MinSignalStrength = MinSignalStrength;
            this.MaxSignalStrength = MaxSignalStrength;
            this.BitErrorRate = BitErrorRate;
            this.LowSignalStrength = LowSignalStrength;
            this.HighSignalStrength = HighSignalStrength;
        }
    }
    public class RIL_EVENTS
    {
        public RIL_EVENTS()
        {
        }
        #region Events
        public delegate void SignalQualityChangedSelectedHandler(SIGNALQUALITY signal);
        public event SignalQualityChangedSelectedHandler SignalQualityChanged;
        #endregion

        public void RiseSignalQualityChanged(SIGNALQUALITY signal)
        {
             if (SignalQualityChanged != null)
             {
                 SignalQualityChanged(signal);
             }
        }
    }
 }

⌨️ 快捷键说明

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