Chinaunix首页 | 论坛 | 博客
  • 博客访问: 269042
  • 博文数量: 53
  • 博客积分: 1910
  • 博客等级: 中尉
  • 技术积分: 1130
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-10 14:56
文章分类

全部博文(53)

文章存档

2013年(1)

2012年(17)

2011年(33)

2010年(2)

分类: 嵌入式

2011-12-06 19:22:47

   由于wpa_supplicant 不支持wireless tools(wext) 或者iw(nl80211)
的某些命令(跟wep,wpa 没关系),这样如果需要做测试比如set txpower,channel 等命令时
wpa_supplicant就不支持

   但可以通过把iw,或者wireless tool 等命令加入到wpa_supplicant
中来实现,这样的好处,可以通过wpa_cli  调用,并且上层有jni
方便界面开发

实现wext接口wireless tools 命令到wpa_supplicant方法很简单

就是把wireless tools 代码弄到wpa supplicant中

并在wpa_driver_priv_driver_cmd添加接口

android2.3.4下

方法如下:

1. 在driver_wext.c中
wpa_driver_priv_driver_cmd 函数中

修改:

 

  1. + extern int dispatch(void *priv, char *cmd,char *buf, size_t buf_len);
  2.  static int wpa_driver_priv_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len )
  3.  {
  4.         struct wpa_driver_wext_data *drv = priv;
  5.         int ret = -1;

  6.         wpa_printf(MSG_DEBUG, "%s %s", __func__, cmd);
  7. -
  8.         if (os_strcasecmp(cmd, "start") == 0) {
  9.                 wpa_printf(MSG_DEBUG,"Start command");
  10.                 return (ret);
  11. @@ -2723,6 +2724,9 @@ static int wpa_driver_priv_driver_cmd( void *priv, char *cmd, char *buf, size_t
  12.         }
  13.         else if( os_strcasecmp(cmd, "btcoexstat") == 0 ) {
  14.         }
  15. + else if( (ret = dispatch(priv,cmd, buf, buf_len)) >= 0){
  16. + return ret;
  17. + }
  18.         else {
  19.                 wpa_printf(MSG_DEBUG,"Unsupported command");
  20.         }


添加一个dispatch 命令接口


2. 将wrieless tools中iwconfig 部分内容移植过来
    添加文件 如附件

 driver_cmd.zip   
    然后将加的文件 加到wpa_supplicant 目录下的andorid.mk 中

3. 测试
  
   进入wpa_cli 输入
   driver get:命令
   driver set:命令=value

命令字 可选iwconfig 中下面结构中第1个feild

 

  1. static const struct iwconfig_entry iwconfig_cmds[] = {
  2.     { "essid",        set_essid_info,        1,    SIOCSIWESSID,
  3.         "Set ESSID",        

  4.     "{NNN|any|on|off}" },
  5.     { "mode",        set_mode_info,        1,    SIOCSIWMODE,
  6.     "Set Mode",            "{managed|ad-

  7. hoc|master|...}" },
  8.     { "freq",        set_freq_info,        1,    SIOCSIWFREQ,
  9.     "Set Frequency",        "N.NNN[k|M|G]" },
  10.     {

  11. "channel",        set_freq_info,        1,    SIOCSIWFREQ,
  12.     "Set Frequency",        "N" },
  13.     { "bit",        set_bitrate_info,    

  14. 1,    SIOCSIWRATE,
  15.     "Set Bit Rate",            "{N[k|M|G]|auto|fixed}" },
  16.     { "rate",        set_bitrate_info,    1,    SIOCSIWRATE,
  17.     

  18. "Set Bit Rate",            "{N[k|M|G]|auto|fixed}" },
  19.     { "power",        set_power_info,        1,    SIOCSIWPOWER,
  20.     "Set Power

  21. Management",        "{period N|timeout N|saving N|off}" },
  22. #ifndef WE_ESSENTIAL
  23.     { "nickname",        set_nick_info,        1,    

  24. SIOCSIWNICKN,
  25.     "Set Nickname",            "NNN" },
  26.     { "nwid",        set_nwid_info,        1,    SIOCSIWNWID,
  27.     "Set NWID",        

  28.     "{NN|on|off}" },
  29. #ifdef USE_ADDRESS_SUBROUTINES    
  30.     { "ap",        set_apaddr_info,    1,    SIOCSIWAP,
  31.     "Set AP Address",        

  32. "{N|off|auto}" },
  33. #endif    
  34.     { "txpower",        set_txpower_info,    1,    SIOCSIWTXPOW,
  35.     "Set Tx Power",            

  36. "{NmW|NdBm|off|auto}" },
  37.     { "sens",        set_sens_info,        1,    SIOCSIWSENS,
  38.     "Set Sensitivity",        "N" },
  39.     { "retry",    

  40.     set_retry_info,        1,    SIOCSIWRETRY,
  41.     "Set Retry Limit",        "{limit N|lifetime N}" },
  42.     { "rts",        set_rts_info,    

  43.     1,    SIOCSIWRTS,
  44.     "Set RTS Threshold",        "{N|auto|fixed|off}" },
  45.     { "frag",        set_frag_info,        1,    

  46. SIOCSIWFRAG,
  47.     "Set Fragmentation Threshold",    "{N|auto|fixed|off}" },
  48.     { "modulation",    set_modulation_info,    1,    SIOCGIWMODUL,
  49.     "Set

  50. Modulation",        "{11g|11a|CCK|OFDMg|...}" },
  51. #endif    /* WE_ESSENTIAL */
  52.     { "commit",        set_commit_info,    0,    

  53. SIOCSIWCOMMIT,
  54.     "Commit changes",        "" },
  55.     { NULL, NULL, 0, 0, NULL, NULL },
  56. };

比如tx-power

取值
  driver get:txpower  

设置

  driver get:txpower=20


4.nl80211 driver priv命令的实现
  同样把 iw  部分代码,修改下支持dispatch接口
  另外需要libnl ,需要将其build成android native lib

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