Wi-Fi源码分析之WifiService操作Wi-Fi(一)
分析Wifi.c中的wifi_load_driver()函数
int wifi_load_driver()
{
ALOGD("============wifi_load_driver================");
#ifdef WIFI_DRIVER_MODULE_PATH
ALOGD("============wifi_load_driver:WIFI_DRIVER_MODULE_PATH================");
char driver_status[PROPERTY_VALUE_MAX];
int count = 100;
if (is_wifi_driver_loaded()) {
return 0;
}
if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0)
return -1;
if (strcmp(FIRMWARE_LOADER,"") == 0) {
property_set(DRIVER_PROP_NAME, "ok");
}
else {
property_set("ctl.start", FIRMWARE_LOADER);
}
sched_yield();
while (count-- > 0) {
if (property_get(DRIVER_PROP_NAME, driver_status, NULL)) {
if (strcmp(driver_status, "ok") == 0)
return 0;
else if (strcmp(DRIVER_PROP_NAME, "failed") == 0) {
wifi_unload_driver();
return -1;
}
}
usleep(200000);
}
property_set(DRIVER_PROP_NAME, "timeout");
wifi_unload_driver();
return -1;
#else
property_set(DRIVER_PROP_NAME, "ok");
return 0;
#endif
}