Ejemplo n.º 1
0
int wifi_load_driver()
{
#ifdef WIFI_DRIVER_MODULE_PATH
    char driver_status[PROPERTY_VALUE_MAX];
    int count = 100; /* wait at most 20 seconds for completion */
    char module_arg2[256];

#ifdef WIFI_DRIVER_MODULE_NAME2
     char node[50] = {'\0',};
     char buf[5] = {'\0',};
     DIR *dir = opendir("/sys/bus/usb/devices/");
     struct dirent *dent;
     if (dir != NULL) {
	 while ((dent = readdir(dir)) != NULL) {
	     memset(node, '\0', 50);
	     sprintf(node, "/sys/bus/usb/devices/%s/idVendor", dent->d_name);
	     int vid_fd = open(node, O_RDONLY);
	     memset(buf, '\0', 5);
	     if (vid_fd > 0) {
		 read(vid_fd, buf, 4);
		 ALOGE("node = %s, vid = %s", node, buf);
				if (strcmp(buf, "0bda") == 0 || 
                        strcmp(buf, "148f") == 0 || strcmp(buf, "7392") == 0) {
		     sprintf(node, "/sys/bus/usb/devices/%s/idProduct", dent->d_name);
		     int pid_fd = open(node, O_RDONLY);
		     read(pid_fd, buf, 4);
		     ALOGE("node = %s, pid = %s", node, buf);
		     if (pid_fd > 0) {
			 if (strcmp(buf, "8176") == 0 || strcmp(buf, "7811") == 0) {
			     ALOGE("rtl8192cu Wi-Fi Module 3");
			     //wifi module 3 rtl8192cu
			     strcpy(DRIVER_MODULE_NAME, WIFI_DRIVER_MODULE_NAME2);
			     strcpy(DRIVER_MODULE_TAG, WIFI_DRIVER_MODULE_NAME2 " ");
			     strcpy(DRIVER_MODULE_PATH, WIFI_DRIVER_MODULE_PATH2);
			     close(pid_fd);
			     close(vid_fd);
			     break;
			 } else if (strcmp(buf, "8172") == 0) {
			     ALOGE("rtl8191su Wi-Fi Module 2");
			     //wifi module 2 rtl8192cu
			     strcpy(DRIVER_MODULE_NAME, WIFI_DRIVER_MODULE_NAME);
			     strcpy(DRIVER_MODULE_TAG, WIFI_DRIVER_MODULE_NAME " ");
			     strcpy(DRIVER_MODULE_PATH, WIFI_DRIVER_MODULE_PATH);
			     close(pid_fd);
			     close(vid_fd);
			     break;
			 }
			 close(pid_fd);
		     }
		 }
		 close(vid_fd);
	     }
	 }
     }
     close(dir);

	ALOGE("DRIVER_MODULE_NAME = %s", DRIVER_MODULE_NAME);
	ALOGE("DRIVER_MODULE_PATH = %s", DRIVER_MODULE_PATH);
#endif

#ifdef SAMSUNG_WIFI
    char* type = get_samsung_wifi_type();

    if (wifi_mode == 1) {
        snprintf(module_arg2, sizeof(module_arg2), "%s%s", DRIVER_MODULE_AP_ARG, type == NULL ? "" : type);
    } else {
        snprintf(module_arg2, sizeof(module_arg2), "%s%s", DRIVER_MODULE_ARG, type == NULL ? "" : type);
    }

    if (insmod(DRIVER_MODULE_PATH, module_arg2) < 0) {
#else

    property_set(DRIVER_PROP_NAME, "loading");

#ifdef WIFI_EXT_MODULE_PATH
    if (insmod(EXT_MODULE_PATH, EXT_MODULE_ARG) < 0)
        return -1;
    usleep(200000);
#endif

    if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) {
#endif

#ifdef WIFI_EXT_MODULE_NAME
        rmmod(EXT_MODULE_NAME);
#endif
        return -1;
    }

    if (strcmp(FIRMWARE_LOADER,"") == 0) {
#ifdef WIFI_DRIVER_LOADER_DELAY
        usleep(WIFI_DRIVER_LOADER_DELAY);
#endif
        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_status, "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
}

int wifi_unload_driver()
{
    usleep(200000); /* allow to finish interface down */
#ifdef WIFI_DRIVER_MODULE_PATH
    if (rmmod(DRIVER_MODULE_NAME) == 0) {
        int count = 20; /* wait at most 10 seconds for completion */
        while (count-- > 0) {
            if (!is_wifi_driver_loaded())
                break;
            usleep(500000);
        }
        usleep(500000); /* allow card removal */
        if (count) {
#ifdef WIFI_EXT_MODULE_NAME
            if (rmmod(EXT_MODULE_NAME) == 0)
#endif
            return 0;
        }
        return -1;
    } else
        return -1;
#else
    property_set(DRIVER_PROP_NAME, "unloaded");
    return 0;
#endif
}
Ejemplo n.º 2
0
int wifi_load_driver()
{
#ifdef WIFI_DRIVER_MODULE_PATH
    char driver_status[PROPERTY_VALUE_MAX];
    int count = 100; /* wait at most 20 seconds for completion */
    char module_arg2[256];
#ifdef SAMSUNG_WIFI
    char* type = get_samsung_wifi_type();

    if (wifi_mode == 1) {
        snprintf(module_arg2, sizeof(module_arg2), "%s%s", DRIVER_MODULE_AP_ARG, type == NULL ? "" : type);
    } else {
        snprintf(module_arg2, sizeof(module_arg2), "%s%s", DRIVER_MODULE_ARG, type == NULL ? "" : type);
    }

    if (insmod(DRIVER_MODULE_PATH, module_arg2) < 0) {
#else

    property_set(DRIVER_PROP_NAME, "loading");

#ifdef WIFI_EXT_MODULE_PATH
    if (insmod(EXT_MODULE_PATH, EXT_MODULE_ARG) < 0)
        return -1;
    usleep(200000);
#endif

#ifdef HUAWEI_WIFI

#define P2P_INTERFACE			"p2p0"

char huawei_arg[PROPERTY_VALUE_MAX] = "mac_param=00:90:4c:ce:43:30";
char module_arg[256];

char mac_bits[PROPERTY_VALUE_MAX];
property_get("ro.serialno",mac_bits,NULL);
	sprintf(huawei_arg, "mac_param=%2.2s:%2.2s:%2.2s:%2.2s:%2.2s:%2.2s",
		"00", "90", "4C",
		mac_bits+6, mac_bits+8, mac_bits+10);	
		
	printf("%s\n", huawei_arg);	

sprintf(module_arg, "%s %s", DRIVER_MODULE_ARG, huawei_arg);
	if (insmod(DRIVER_MODULE_PATH, module_arg) < 0) {

#else
    if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) {
#endif
#endif

#ifdef WIFI_EXT_MODULE_NAME
        rmmod(EXT_MODULE_NAME);
#endif
        return -1;
    }

    if (strcmp(FIRMWARE_LOADER,"") == 0) {
#ifdef WIFI_DRIVER_LOADER_DELAY
        usleep(WIFI_DRIVER_LOADER_DELAY);
#endif
        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
}

int wifi_unload_driver()
{
    usleep(200000); /* allow to finish interface down */
#ifdef WIFI_DRIVER_MODULE_PATH
    if (rmmod(DRIVER_MODULE_NAME) == 0) {
        int count = 20; /* wait at most 10 seconds for completion */
        while (count-- > 0) {
            if (!is_wifi_driver_loaded())
                break;
            usleep(500000);
        }
        usleep(500000); /* allow card removal */
        if (count) {
#ifdef WIFI_EXT_MODULE_NAME
            if (rmmod(EXT_MODULE_NAME) == 0)
#endif
            return 0;
        }
        return -1;
    } else
        return -1;
#else
    property_set(DRIVER_PROP_NAME, "unloaded");
    return 0;
#endif
}
int wifi_load_driver()
{
#ifdef WIFI_DRIVER_MODULE_PATH
    char driver_status[PROPERTY_VALUE_MAX];
    int count = 100; /* wait at most 20 seconds for completion */
    char module_arg2[256];
#ifdef SAMSUNG_WIFI
    char* type = get_samsung_wifi_type();

    if (wifi_mode == 1) {
        snprintf(module_arg2, sizeof(module_arg2), "%s%s", DRIVER_MODULE_AP_ARG, type == NULL ? "" : type);
    } else {
        snprintf(module_arg2, sizeof(module_arg2), "%s%s", DRIVER_MODULE_ARG, type == NULL ? "" : type);
    }

    if (insmod(DRIVER_MODULE_PATH, module_arg2) < 0) {
#else

    property_set(DRIVER_PROP_NAME, "loading");

#ifdef WIFI_EXT_MODULE_PATH
    if (insmod(EXT_MODULE_PATH, EXT_MODULE_ARG) < 0)
        return -1;
    usleep(200000);
#endif

    if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) {
#endif

#ifdef WIFI_EXT_MODULE_NAME
        rmmod(EXT_MODULE_NAME);
#endif
        return -1;
    }

    if (strcmp(FIRMWARE_LOADER,"") == 0) {
#ifdef WIFI_DRIVER_LOADER_DELAY
        usleep(WIFI_DRIVER_LOADER_DELAY);
#endif
        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
}

int wifi_unload_driver()
{
    usleep(200000); /* allow to finish interface down */
#ifdef WIFI_DRIVER_MODULE_PATH
    if (rmmod(DRIVER_MODULE_NAME) == 0) {
        int count = 20; /* wait at most 10 seconds for completion */
        while (count-- > 0) {
            if (!is_wifi_driver_loaded())
                break;
            usleep(500000);
        }
        usleep(500000); /* allow card removal */
        if (count) {
#ifdef WIFI_EXT_MODULE_NAME
            if (rmmod(EXT_MODULE_NAME) == 0)
#endif
            return 0;
        }
        return -1;
    } else
        return -1;
#else
    property_set(DRIVER_PROP_NAME, "unloaded");
    return 0;
#endif
}