Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398932
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-03 18:24
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(20)

2017年(14)

2016年(10)

2015年(30)

分类: 嵌入式

2015-08-24 22:32:35

CC3200 smart config 协议

所谓的smart config就是手机APP端发送包含WIFI 用户名 WIFI密码的 UDP 广播包或者组播包,CC3200可以接收到该UDP包,只要知道UDP的组织形式,就可以通过接收到的UDP包解密 出WIFI 用户名 密码,然后CC3200配置收到的WIFI 用户名、密码,连接到指定的WIFI AP 上。

一、下面谈谈发送的UDP数据包的组织形式:

1、我们把SSID和密码转换成一系列的分隔符、SSID tag、字符串长度、high nibble、low nibble等值,然后作为数据包的长度发送出去。

2、以ssid:MyPlace    密码:LetMeIn   为例

下面展示如何将SSID:”MyPlace”分割成high位和low位。


3、然后通过high位和low位生成两个带有序列号的值2i和2i+1。生成规则如下:

4、通过这种规则, 7个字符的SSID:”MyPlace”将得到14个值,如下:

 

5、密码按照同样的规则进行编码。

 

6、将编码后的数据按照如下格式作为udp数据包的长度循环发送出去。

ssidMyPlace    密码:LetMeIn发送数据包长度如下:

 

3 1099 3 35 3 597 3 686 3 840 3 666 3 806 3 593 

3 695 3 621 3 663 3 834 3 775 3 804 3 839 3 774 

3 1199 3 35 3 597 3 685 3 823 3 678 3 616 3 629 

3 629 3 654 3 679 3 838 3 837 3 842 3 679 3 783 

23 1099 23 35 23 597 23 686 23 840 23 666 23 806 23 593 

23 695 23 621 23 663 23 834 23 775 23 804 23 839 23 774 

23 1199 23 35 23 597 23 685 23 823 23 678 23 616 23 629 

23 629 23 654 23 679 23 838 23 837 23 842 23 679 23 783

3          --------------->>分隔符

1099    --------------->>SSID tag

3    --------------->>分隔符

35         --------------->>SSID length +28

3          --------------->>分隔符

597        --------------->>Mhigh-nibble

3          --------------->>分隔符

686        --------------->> Mlow-nibble

3          --------------->>分隔符

840        --------------->>yhigh-nibble

3             --------------->>分隔符

666           --------------->>ylow-nibble

3             --------------->>分隔符

806           --------------->>Phigh-nibble

3             --------------->>分隔符

593           --------------->>Plow-nibble

3 695 3 621 3 663 3 834 3 775 3 804 3 839 3 774 

3             --------------->>分隔符

1199          --------------->>密码tag

3             --------------->>分隔符

35            --------------->>密码length+28

3             --------------->>分隔符

597           --------------->>Lhigh-nibble

3             --------------->>分隔符

685           --------------->>Llow-nibble

3             --------------->>分隔符

823 3 678 3 616 3 629 

3 629 3 654 3 679 3 838 3 837 3 842 3 679 3 783 

把分隔符换成23,重复一遍

……..

……..


----------------------------------------------------------------------------------------------------------------------------

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <list>

  3. using namespace std;

  4. void generate_nibble(const unsigned char charater,
  5.                             unsigned char *high_nibble,unsigned char *low_nibble)
  6. {
  7.     /*
  8.     --------------------------
  9.     | | 'M' |
  10.     --------------------------
  11.     | Hex | 0x4D |
  12.     --------------------------
  13.     | | 0x4 | 0xD |
  14.     | Nibbles|----------------
  15.     | | H0 | L0 |
  16.     --------------------------
  17.     */
  18.     *high_nibble = (charater & 0xf0) >> 4;
  19.     *low_nibble = (charater & 0x0f);
  20. }

  21. void generate_seq(unsigned char *data_2i,unsigned char *data_2i_1,int number,
  22.                         const unsigned char charater,const unsigned char last_charater)
  23. {
  24.     /**/
  25.     unsigned char high_nibble_cha,low_nibble_cha;
  26.     unsigned char high_nibble_last_cha,low_nibble_last_cha;

  27.     /**/
  28.     generate_nibble(charater,&high_nibble_cha,&low_nibble_cha);
  29.     generate_nibble(last_charater,&high_nibble_last_cha,&low_nibble_last_cha);
  30.     /*
  31.     ------------------------------------------------
  32.     | seq | High | Low |
  33.     ------------------------------------------------
  34.     | 2i | Li-1^(2*i%16) | Hi |
  35.     ------------------------------------------------
  36.     | 2i+1 | Hi^((2*i+1)%16) | Li |
  37.     ------------------------------------------------
  38.     */
  39.     *data_2i = (((low_nibble_last_cha^((2*number)%16)) << 4) & 0xf0) | (high_nibble_cha & 0x0f);
  40.     *data_2i_1 = (((high_nibble_cha^((2*number + 1)%16)) << 4) &0xf0) | (low_nibble_cha & 0x0f);
  41. }


  42. void generate_encode_result(unsigned char *ssid,int len,list<int> &encode_result)
  43. {
  44.     unsigned char data_2i,data_2i_1;
  45.     ssid[-1] = 0;
  46.     for(int i = 0;i < len;i++)
  47.     {
  48.        generate_seq(&data_2i,&data_2i_1,i,ssid[i],ssid[i-1]);
  49.        encode_result.push_back(data_2i+593);
  50.        encode_result.push_back(data_2i_1+593);
  51.     }
  52. }

  53. void decode(int *encode_array,char *decode_array)
  54. {
  55.     
  56. }


  57. int main(void)
  58. {
  59.     list<int> encode_result;
  60.     unsigned char ssid[20] = "MyPlace";
  61.     generate_encode_result(ssid,7,encode_result);
  62.     list<int>::iterator iter;
  63.     for(iter = encode_result.begin();iter != encode_result.end();++iter)
  64.     {
  65.         printf("%d ",*iter);
  66.     }
  67.     printf("\n");
  68.     
  69.     return 0;
  70. }




阅读(2844) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~