Wifi SmartConfig实现

现在好多设备都直接用手机wifi来配置,没有操作界面的设备了,像TISmartConfig,Airkiss。

网上也很多说明,自已也实现了个,总体比较简单。

设备端,需要能支持wifi混合模式,基本就可以了。

实现的过程就是把需要发送的数据通过udp包的长度来编码,设备端在混合模式下,通过抓取udp的广播包,根据802.11的特点过滤一下,找到自定义协议的包就行了,锁定特定的MAC地址后,连续抓包,解析出来就行了,这比较简单.

协议的定义

一般都定义一个协议的头,如用 0x1, 0x4, 0x8,这样设备端在抓UDP包时,见到这样的包长度规律后,就认为是一个协议包头,可以再加一个包头的CRC8校验,这4个字节,做为UDP的长度包,连续发送。

测试一般3,4个连续的UDP被打乱次序的机会,也不是很大,这样就可以很快的锁定是协议的开始了。

 

对数据进行编码,一般数据比较多时,指望连续发UDP,能按顺序连续接收,是不现实的。所以可以对每一个数据字节,再编码,我的做法是,每一个节点用4个字节来编码,这样:

前导符 | 数据序号| 数据|CRC8 

第一个字节固定为 0xc,表示一个字节的开始,第二个字节表示数据字节的序号,第三个字节为真正的数据,第四个字节为CRC校验:对前面3个字节做校验,接收端就可以判断是不是正常的了.

也就是你要发一个字符串到设备,如: “12345678”,表示WIFI连接的密码,那么你就需要发送 4*8=32个UDP数据报,因为对每一个数据编了号,这样不同的数据可以多次验证接收,成功率也就很高了。

在数据再发送一个CRC数据的校验,对接收的数据再校验一次。

       可以像Airkiss一样也发一个SSID的CRC校验,校验找到的SSID是不是真正的要配置的SSID,感觉有点多余呀。

       可以像Airkiss一样发一个随机数,用来当设备端连接上WIFI时,通知配置用用户,设备已经通过你的数据连接上了。

       一般像WIFI密码这样的数据,比较小,测试了一下,几秒就搞定了.

你可能感兴趣的:(C/C++,协议)