📄 ril.cs
字号:
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 + -