Android wifi Porting

Android : 2009. 10. 1. 18:11
반응형
출처 : http://www.mail-archive.com/android-porting@googlegroups.com/msg04139.html 

[android-porting] Re: wpa_supplicant wifi problems no scan results

Leon
Fri, 24 Apr 2009 07:47:35 -0700

Another way/thought:

  In include/linux/wireless.h of linux kernel
struct  iw_quality
{
        __u8            level;          /* signal level (dBm) */
};

The value should be negative, but it is stored in the unsigned value.

Therefore in iwlib.c of the wireless tool
void
iw_print_stats(char *           buffer,
               iwqual *         qual,
               iwrange *        range,
               int              has_range)
{
 /* Statistics are in dBm (absolute power measurement) */
          sprintf(buffer,
                  "Quality:%d/%d  Signal level:%d dBm  Noise level:%d
dBm%s",
                  qual->qual, range->max_qual.qual,
                  qual->level - 0x100, qual->noise - 0x100,
                  (qual->updated & 0x7) ? " (updated)" : "");
}

"qual->level - 0x100" restores to its origin negative value.


In driver.h of external/wpa_supplicant
struct wpa_scan_result {
        int level;
}

level can be negative. And it should get the negative value.

So,
In driver_wext.c
int wpa_driver_wext_get_scan_results(void *priv,
                                     struct wpa_scan_result *results,
                                     size_t max_size)
{
        case IWEVQUAL:
                    results[ap_num].level = iwe->u.qual.level - 0x100;
}

Is it better to make conversion in wpa_supplicant ?


Regards,
Leon


On Apr 24, 5:16 pm, Michael Trimarchi <trimar...@gandalf.sssup.it>
wrote:
> Gani Bhagavathula wrote:
> > Michael:
>
> > I have read a reference to the java parser function in some other post
> > too, but not sure what it means... Can you give me any more
> > information to work with?
>
> vi ./base/services/java/com/android/server/WifiService.java
>
> take a look of the code and in particular here
>    for (int i = lineBeg; i < lineEnd; ++i) {
> -                             char ch = reply.charAt(i);
> -                             /*
> -                              * Assume that the signal level starts
> with a '-'
> -                              */
> -                             if (ch == '-') {
> -                                 /*
> -                                  * Skip whatever instances of '-' we
> may have
> -                                  * after we parse the signal level
> -                                  */
> -                                 parsingScanResultLevel =
> (scanResultLevel == 0);
> -                             } else if (parsingScanResultLevel) {
>
> As you can see it expect a minus. You can obtain it in the
> wpa_supplicant response
> or just revert this change and don't look for -. Add a print in this
> function to see
> if it return the list of the wifi network and
> good luck
>
> > Regards,
> > Gani
>
> > On Apr 24, 9:21 am, Michael Trimarchi <trimar...@gandalf.sssup.it>
> > wrote:
>
> >> Gani Bhagavathula wrote:
>
> >>> Luca:
>
> >>> I thought I posted this yesterday, but looks like I sent it as a
> >>> Author only reply.  I thought I would put this here for everyone's
> >>> benefit.
>
> >>> In the changes we both initially did in the wifi.c, the path to the
> >>> module needs to be /lib/modules/ath5k.ko and not /system/lib/modules/
> >>> ath5k.ko.  If you change that, the Module gets loaded properly.  Not
> >>> that the WLAN works, but you dont go into the Airplane Mode.
>
> >>> The next thing I did was to comment out the line set_prop
> >>> ("ctrl.status", WLAN_LOADER); since the logs showed that it was trying
> >>> to load the firmware - ATH5K driver does not need any firmware as far
> >>> as I know.  The error related to this goes away, but I am no closer to
> >>> getting the driver to work.
>
> >>> Gani
>
> >>> On Apr 21, 9:41 pm, Luca Belluccini <lucabellucc...@gmail.com> wrote:
>
> >>>> It is not working for me. I did the same changes onwifi.c as you
> >>>> pasted here.
> >>>> In Android GUI, I can press Enablewifiand I get:
> >>>> -module insmodded
> >>>> -GUI locked for some seconds
> >>>> -reboot
> >>>> -Android in airplane mode
> >>>> I'm running on a real eeepc701.
> >>>> It seems the hot code causing error is:
> >>>> wifi_load_driver inwifi.c
>
> >>>> By the way I think we need wpa_supplicant (or it will be launched by
> >>>> Android?).
> >>>> The property wlan.driver.status must be set. But I don't know which
> >>>> value must be set.
>
> >>>> On 21 Apr, 19:40, Gani Bhagavathula <gani.bhagavath...@gmail.com>
> >>>> wrote:
>
> >>>>> Luca:
>
> >>>>> If I dont use WPA (and have no wpa_supplicant) is it OK just to change
> >>>>> thewifi.c like this, and compile the module and make sure it is in
> >>>>> the init.rc?  Will it connect to a WEP protected network at that
> >>>>> point?
>
> >>>>> static const char IFACE_DIR[]           = "/data/system/
> >>>>> wpa_supplicant";
> >>>>> static const char DRIVER_MODULE_NAME[]  = "ath5k";
> >>>>> static const char DRIVER_MODULE_TAG[]   = "ath5k ";
> >>>>> static const char DRIVER_MODULE_PATH[]  = "/system/lib/modules/
> >>>>> ath5k.ko";
> >>>>> static const char FIRMWARE_LOADER[]     = "wlan_loader";
> >>>>> static const char DRIVER_PROP_NAME[]    = "wlan.driver.status";
>
> >>>>> Regards,
> >>>>> Gani
>
> >>>>> On Apr 21, 3:54 pm, Luca Belluccini <lucabellucc...@gmail.com> wrote:
>
> >>>>>> I'm with the same module. I set it NOT built-in.
> >>>>>> You are planning to makewifiinteract with Android GUI?
> >>>>>> I modifiedwifi.c specifying the right path to module to be insmodded.
> >>>>>> By the way I'm having the same SIOCSIWAUTH error, starting manually
> >>>>>> the wpa_supplicant.
> >>>>>> I think it's the main problem.
>
> >>>>>> On 21 Apr, 12:59, Androidphan <niels.kee...@tass.nl> wrote:
>
> >>>>>>> I have an Atheros 5007EG wireless network card at my hardware
> >>>>>>> platform. I compiled the kernel(2.6.27) with ath5k built in.
>
> >>>>>>> Then I compiled wpa_supplicant with CONFIG_WIRELESS_EXTENSIONS=y
> >>>>>>> CONFIG_DRIVER_WEXT=y and CONFIG_CTRL_IFACE=y.
>
> >>>>>>> Then in my init.rc :
> >>>>>>>     mkdir /data/misc/wifi0770wifiwifi
> >>>>>>>     mkdir /data/misc/wifi/sockets 0770wifiwifi
> >>>>>>>     mkdir /data/system/wpa_supplicant 0770wifiwifi
> >>>>>>>     mkdir /data/misc/dhcp 0770 dhcp dhcp
> >>>>>>>     chown dhcp dhcp /data/misc/dhcp
>
> >>>>>>>     ifup wlan0
>
> >>>>>>> service wpa_supplicant /system/bin/logwrapper /system/bin/
> >>>>>>> wpa_supplicant -Dwext -iwlan0 -c/system/etc/wifi/wpa_supplicant.conf -
> >>>>>>> dd
> >>>>>>>     groupwifi
>
> >>>>>>> My wpa_supplicant.conf at /system/etc/wifi/wpa_supplicant.conf :
>
> >>>>>>> update_config=1
> >>>>>>> ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=system
>
> >>>>>>> Then when I try to scan with: wpa_cli -p/data/system/wpa_supplicant -
> >>>>>>> iwlan0 and then scan & scan_results, I'm getting no scan results, when
> >>>>>>> I know there are definitly scan results. Because when I scanned with
> >>>>>>> Windows, I do get to see scan results.
>
> >>>>>>> What is wrong with my configuration?
>
> >>>>>>> My logcat output from wpa_supplicant:
>
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Initializing interface 'wlan0'
> >>>>>>> conf '/system/etc/wifi/wpa_supplicant.conf' driver 'wext'
> >>>>>>> ctrl_interface 'N/A' bridge 'N/A'
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Configuration file '/system/etc/
> >>>>>>> wifi/wpa_supplicant.conf' -> '/system/etc/wifi/wpa_supplicant.conf'
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Reading configuration file '/
> >>>>>>> system/etc/wifi/wpa_supplicant.conf'
> >>>>>>> I//system/bin/wpa_supplicant( 2127): update_config=1
> >>>>>>> I//system/bin/wpa_supplicant( 2127): ctrl_interface='DIR=/data/system/
> >>>>>>> wpa_supplicant'
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Initializing interface (2)
> >>>>>>> 'wlan0'
> >>>>>>> I//system/bin/wpa_supplicant( 2127): EAPOL: SUPP_PAE entering state
> >>>>>>> DISCONNECTED
> >>>>>>> I//system/bin/wpa_supplicant( 2127): EAPOL: KEY_RX entering state
> >>>>>>> NO_KEY_RECEIVE
> >>>>>>> I//system/bin/wpa_supplicant( 2127): EAPOL: SUPP_BE entering state
> >>>>>>> INITIALIZE
> >>>>>>> I//system/bin/wpa_supplicant( 2127): EAP: EAP entering state DISABLED
> >>>>>>> I//system/bin/wpa_supplicant( 2127): EAPOL: External notification -
> >>>>>>> portEnabled=0
> >>>>>>> I//system/bin/wpa_supplicant( 2127): EAPOL: External notification -
> >>>>>>> portValid=0
> >>>>>>> I//system/bin/wpa_supplicant( 2127): SIOCGIWRANGE: WE(compiled)=22 WE
> >>>>>>> (source)=21 enc_capa=0xf
> >>>>>>> I//system/bin/wpa_supplicant( 2127):   capabilities: key_mgmt 0xf enc
> >>>>>>> 0xf
> >>>>>>> I//system/bin/wpa_supplicant( 2127): WEXT: Operstate: linkmode=1,
> >>>>>>> operstate=5
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Own MAC address:
> >>>>>>> 00:22:43:2c:fa:a6
> >>>>>>> I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_wpa
> >>>>>>> I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_key: alg=0
> >>>>>>> key_idx=0 set_tx=0 seq_len=0 key_len=0
> >>>>>>> I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_key: alg=0
> >>>>>>> key_idx=1 set_tx=0 seq_len=0 key_len=0
> >>>>>>> I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_key: alg=0
> >>>>>>> key_idx=2 set_tx=0 seq_len=0 key_len=0
> >>>>>>> I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_key: alg=0
> >>>>>>> key_idx=3 set_tx=0 seq_len=0 key_len=0
> >>>>>>> I//system/bin/wpa_supplicant( 2127):
> >>>>>>> wpa_driver_wext_set_countermeasures
> >>>>>>> I//system/bin/wpa_supplicant( 2127): ioctl[SIOCSIWAUTH]: Operation not
> >>>>>>> supported on transport endpoint
> >>>>>>> I//system/bin/wpa_supplicant( 2127): WEXT auth param 4 value 0x0 -
> >>>>>>> wpa_driver_wext_set_drop_unencrypted
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Setting scan request: 0 sec
> >>>>>>> 100000 usec
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Using existing control interface
> >>>>>>> directory.
> >>>>>>> I//system/bin/wpa_supplicant( 2127): ctrl_iface bind(PF_UNIX) failed:
> >>>>>>> Address already in use
> >>>>>>> I//system/bin/wpa_supplicant( 2127): ctrl_iface exists, but does not
> >>>>>>> allow connections - assuming it was leftover from forced program
> >>>>>>> termination
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Successfully replaced leftover
> >>>>>>> ctrl_iface socket '/data/system/wpa_supplicant/wlan0'
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Added interface wlan0
> >>>>>>> I//system/bin/wpa_supplicant( 2127): RTM_NEWLINK: operstate=0
> >>>>>>> ifi_flags=0x1003 ([UP])
> >>>>>>> I//system/bin/wpa_supplicant( 2127): RTM_NEWLINK, IFLA_IFNAME:
> >>>>>>> Interface 'wlan0' added
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Wireless event: cmd=0x8b06 len=8
> >>>>>>> I//system/bin/wpa_supplicant( 2127): State: DISCONNECTED -> SCANNING
> >>>>>>> I//system/bin/wpa_supplicant( 2127): CTRL-EVENT-STATE-CHANGE id=-1
> >>>>>>> state=2
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Starting AP scan (broadcast SSID)
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Trying to get current scan
> >>>>>>> results first without requesting a new scan to speed up initial
> >>>>>>> association
> >>>>>>> I//system/bin/wpa_supplicant( 2127): Received 0 bytes of scan results
> >>>>>>> (0 BSSes)
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
unsubscribe: android-porting+unsubscr...@googlegroups.com
website: http://groups.google.com/group/android-porting
-~----------~----~----~----~------~----~------~--~---

반응형

'Android' 카테고리의 다른 글

OpenCore에서 log 찍기  (0) 2009.10.06
Android rotates LCD (안드로이드 화면 돌리기)  (0) 2009.09.26
Android용 busybox  (0) 2009.09.26
Posted by Real_G