rssi参数获取_如何获取WlanGetNetworkBssList函数返回值的Rssi值
这些结构定义和构造函数在我的代码中工作,来自WlanGetAvailableNetworkList,它是不完整的,并不完全解析结构,但它确实得到了RSSI。
[StructLayout(LayoutKind.Sequential)]
public struct WLAN_AVAILABLE_NETWORKS_LIST
{
public UInt32 NumberOfNetworks;
//Current Not used by Native System, can be used to indicate desired network
public UInt32 CurrentNetwork;
//one per network found
public WLAN_AVAILABLE_NETWORK[] Available_Network;
//input for constructor
private IntPtr p;
public WLAN_AVAILABLE_NETWORKS_LIST(IntPtr _p)
{
IntPtr pn = new IntPtr();
// TODO: Complete member initialization
this.p = _p;
this.NumberOfNetworks = (UInt32)Marshal.ReadInt32(p);
this.CurrentNetwork = (UInt32)Marshal.ReadInt32(p, 4);
this.Available_Network = new WLAN_AVAILABLE_NETWORK[NumberOfNetworks];
for (int i = 0; i < NumberOfNetworks; i++)
{
pn = (IntPtr)(p.ToInt32() + 8 + (628 * i));
//Available_Network[i] = (WLAN_AVAILABLE_NETWORK)Marshal.PtrToStructure(pn, typeof(WLAN_AVAILABLE_NETWORK));
Available_Network[i].strProfileName = Marshal.PtrToStringUni(pn);
Available_Network[i].SSID = new dot11_SSID(new IntPtr(pn.ToInt32() + 512));
Available_Network[i].dot11BssType = (DOT11_BSS_TYPE)Marshal.ReadInt32(pn, 512 + 36);
Available_Network[i].uNumberOfBssids = (UInt32)Marshal.ReadInt32(pn, 512+36+4);
Available_Network[i].wlanSignalQuality = (UInt32)Marshal.ReadInt32(pn, 512 + 36 + 5*4+32+4);
}
}
}WLAN_AVAILABLE_NETWORK的结构
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WLAN_AVAILABLE_NETWORK //size = 628
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string strProfileName;//size 512
public dot11_SSID SSID;//size 36
public DOT11_BSS_TYPE dot11BssType; // size 4
public UInt32 uNumberOfBssids; // 4
//public bool bNetworkConnectable; // 4
//public UInt32 wlanNotConnectableReason; // 4
//public UInt32 uNumberOfPhyTypes; // 4
public DOT11_PHY_TYPE[] dot11PhyTypes; // max is 8, size is 8*4 = 32
//public UInt32[] dot11PhyTypes; // max is 8, size is 8*4 = 32
//public bool bMorePhyTypes;// 4
public UInt32 wlanSignalQuality; // size 4
//A percentage value that represents the signal quality of the network. WLAN_SIGNAL_QUALITY is of type ULONG. This member contains a value between 0 and 100. A value of 0 implies an actual RSSI signal strength of -100 dbm. A value of 100 implies an actual RSSI signal strength of -50 dbm. You can calculate the RSSI signal strength value for wlanSignalQuality values between 1 and 99 using linear interpolation.
//public bool bSecurityEnabled;// 4
public DOT11_AUTH_ALGORITHM dot11DefaultAuthAlgorithm;// 4
public DOT11_CIPHER_ALGORITHM dot11DefaultCipherAlgorithm;// 4
//public UInt32 dot11DefaultAuthAlgorithm;// 4
//public UInt32 dot11DefaultCipherAlgorithm;// 4
//public UInt32 dwFlags;// 4
//public UInt32 dwReserved;// 4
}我无法使Marshal.PtrToStructure工作。
这是调用WlanGetAvailableNetworkList的函数
public static WLAN_AVAILABLE_NETWORKS_LIST GetAvailNetworkList()
{
UInt32 _dwflags = 3;
IntPtr handle = GetClientHandle();
IntPtr pGuid = GetCurrentInterfaceGuidPointer();
IntPtr _ppAvailNetworkList = new IntPtr();
uint error = WlanGetAvailableNetworkList(handle, pGuid, _dwflags, IntPtr.Zero, out _ppAvailNetworkList);
if (error != 0)
{
Console.WriteLine("WlanEnumerated function in GetAvailNetworkPointer() failed... inspect error number" + error);
}
else
{
// It worked
}
WLAN_AVAILABLE_NETWORKS_LIST TempNetworkList = new WLAN_AVAILABLE_NETWORKS_LIST(_ppAvailNetworkList);
WlanFreeMemory(pGuid);
CloseClientHandle(handle);
return TempNetworkList;
}以及确认有RSSI值的NUINT测试。
[Test]
public void GetAvailNetworkReturnsRSSI()
{
WiFiApi.WLAN_AVAILABLE_NETWORKS_LIST networklist = WiFiApi.GetAvailNetworkList();
for (int i = 0; i < networklist.NumberOfNetworks; i++)
{
string SSIDstr = new string(networklist.Available_Network[i].SSID.SSID);
Console.Write("Network " + i + " ");
Console.Write(SSIDstr);
Console.Write(" RSSI = " + networklist.Available_Network[i].wlanSignalQuality);
Console.Write(" dbM = " + ((int)(networklist.Available_Network[i].wlanSignalQuality/2)-100));
Console.WriteLine(" ");
if (0 != networklist.Available_Network[i].SSID.SSID_Length)
{
Assert.LessOrEqual((int)networklist.Available_Network[i].wlanSignalQuality, 100);
Assert.Greater((int)networklist.Available_Network[i].wlanSignalQuality, 0);
}
}
}
rssi参数获取_如何获取WlanGetNetworkBssList函数返回值的Rssi值相关推荐
- python函数定义中参数列表里的参数是_详解Python函数中参数带星号是什么意思
函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...
- mysql函数返回表类型_如何从MySQL函数返回表?
您不能从MySQL函数返回表.该函数可以返回字符串,整数,字符等.要从MySQL返回表,请使用存储过程,而不是函数. 让我们首先创建一个表-mysql> create table DemoTab ...
- mysql 元数据获取_[MySQL] 获取元数据的步骤
[MySQL] 获取元数据的方法 MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysql ...
- 参数 中_理解JavaScript中函数的参数
1,arguments JavaScript的函数的参数(arguments)在函数体的内部表现为一个类似数组的对象.就是它拥有数组的方法,却不是Array的实例. 例1 我们直接打印出argumen ...
- mysql identity 获取_如何获取MySQL中Identity列的种子值?
为此,您可以使用SHOW VARIABLES命令-SHOW VARIABLES LIKE 'auto_inc%'; 输出结果 这将产生以下输出-+--------------------------+ ...
- double fun在c语言中是什么意思,编写函数 double fun(double x,double y),计算两参数平方差的绝对值,做为函数返回值....
编写函数fun,函数首部为double fun(int n),其功能是计算S=1!+2!+3!... 6个答案 - 提问时间: 2011-10-13 - 6个赞 问题说明:"S=1!+2!+3!+.. ...
- py函数式编程(高阶函数map/reduce/filter/sorted、闭包函数/返回函数、匿名函数lamber、@装饰器decorator、偏函数functool.partial())
#py函数式编程.py #高阶函数map/reduce/filter/sorted.闭包函数/返回函数.匿名函数lamber.@装饰器decorator.偏函数functool.partial()# ...
- python中len函数返回值为int吗_Python len()函数
目录 描述 语法 参数说明 举例 1. 当参数是序列类型对象(字符.字符串.列表.元组或者是字典)时: 2. 当参数是非序列对象时: 注意事项 描述 len函数返回序列类型对象(字符或字符串.元组.列 ...
- Python函数返回多个值的方法
如果程序需要有多个返回值,则既可将多个值包装成列表之后返回,也可直接返回多个值.如果 Python 函数直接返回多个值,Python 会自动将多个返回值封装成元组. 如下程序示范了函数直接返回多个值的 ...
- python函数返回多个变量_Python中接收函数多个返回结果的两种方法
在Python中函数经常会返回多个值,今天我们一起来讲解一下接收多个函数返回值的方法 工具/原料 电脑 Python开发工具 方法/步骤 1 用def 代码创建一个函数,名称为func1 代码如下: ...
最新文章
- 认认真真推荐几个机器学习、深度学习公众号
- 6款实用开源报表工具 | 码云周刊第 83 期
- Java1.5语言新特性简单总结
- 服务器2003蓝屏A5修复,求助windows 2003 蓝屏分析
- python中时间处理去空格去冒号_Python实用日期时间处理方法汇总
- 文本预处理跑得慢?抱抱脸团队又放福利,1GB文本语料分词只需20s!
- jsp数据 foreach 循环遍历 (含效果图)- 代码篇
- 史上最全数据库中间件详解
- CentOS 7 上搭建 Nacos Cluster 集群
- 一个C++的ElasticSearch Client
- 计算机组成原理期末总结
- 新特性解读 | MySQL 8.0 对 limit 的优化
- 毕业设计计算机选题意义怎么写,毕业设计(论文)选题 毕业论文选题研究意义怎么写...
- 《小QQ 大帝国 马化腾传奇》熊江
- matlab 双馈,基于Matlab的双馈调速系统研究
- 页面报错$injector:unpr
- liunx系统的根结构认识及命令学习
- NLP-D35-nlp比赛D4【run baselines】-回家-h5pypicklewith open() as
- chrome打开本地html自动刷新,谷歌浏览器插件Auto Refresh 网页自动刷新
- CV5200远距离WiFi模组,安防监控数据远程传输方案,支持mesh自组网
热门文章
- bsod错误代码。_BSOD的完整形式是什么?
- 计算机组成与原理第二章,计算机组成原理《第二章》
- STM32F103标准库函数驱动max30102心率血氧模块
- oracle 有if语句吗,oracle的if语句
- 京瓷打印机p5026cdn_京瓷p5026cdn打印机驱动
- 计算机硕士工资一览表
- Yoshua Bengio:注意力是“有意识”AI的核心要素
- 图灵奖得主Bengio和LeCun称自监督学习可使AI达到人类智力水平
- Windows10 查看电脑关机时间(提交忘记打卡申请必备)
- OTSU算法实现二值化