int mdev_sg_main(int argc, char **argv) { int isLock; const char *device_name, *action; if(argc < 3){ printf("Usage: %s [device_name] [action]\n", argv[0]); return 0; } device_name = argv[1]; action = argv[2]; usb_dbg("(%s): action=%s.\n", device_name, action); if(get_device_type_by_device(device_name) != DEVICE_TYPE_SG) return 0; // If remove the device? if(!check_hotplug_action(action)){ usb_dbg("(%s): Remove sg device.\n", device_name); return 0; } // Check Lock. if((isLock = file_lock((char *)device_name)) == -1){ usb_dbg("(%s): Can't set the file lock!\n", device_name); return 0; } if (nvram_get_int("modem_zcd") != 0) { if (module_smart_load("sr_mod")) sleep(1); } else { char vid[8] = {0}, pid[8] = {0}; char usb_port_id[64] = {0}; if (get_usb_port_by_device(device_name, usb_port_id, sizeof(usb_port_id))) { if (get_usb_vid(usb_port_id, vid, sizeof(vid)) && get_usb_pid(usb_port_id, pid, sizeof(pid))) perform_usb_modeswitch(vid, pid); } } usb_dbg("(%s): Success!\n", device_name); file_unlock(isLock); return 1; }
static int get_modem_vid_pid(const char *modem_node, int *vid, int *pid) { char usb_port_id[64], usb_vid[8], usb_pid[8]; // get USB port. if(!get_usb_port_by_device(modem_node, usb_port_id, sizeof(usb_port_id))) return 0; // get VID. if(!get_usb_vid(usb_port_id, usb_vid, sizeof(usb_vid))) return 0; // get PID. if(!get_usb_pid(usb_port_id, usb_pid, sizeof(usb_pid))) return 0; *vid = strtol(usb_vid, NULL, 16); *pid = strtol(usb_pid, NULL, 16); return 1; }
static int write_pppd_ras_conf(const char* call_path, const char *modem_node, int ppp_unit) { FILE *fp; int modem_type; char *user, *pass, *isp; char usb_port_id[64], vid[8], pid[8]; // get USB port. if(!get_usb_port_by_device(modem_node, usb_port_id, sizeof(usb_port_id))) return 0; // get VID. if(!get_usb_vid(usb_port_id, vid, sizeof(vid))) return 0; // get PID. if(!get_usb_pid(usb_port_id, pid, sizeof(pid))) return 0; if (!(fp = fopen(call_path, "w+"))){ return 0; } modem_type = nvram_get_int("modem_type"); user = nvram_safe_get("modem_user"); pass = nvram_safe_get("modem_pass"); isp = nvram_safe_get("modem_isp"); fprintf(fp, "/dev/%s\n", modem_node); fprintf(fp, "modem\n"); fprintf(fp, "crtscts\n"); fprintf(fp, "noauth\n"); if(strlen(user) > 0) fprintf(fp, "user '%s'\n", user); if(strlen(pass) > 0) fprintf(fp, "password '%s'\n", pass); if(!strcmp(isp, "Virgin") || !strcmp(isp, "CDMA-UA")){ fprintf(fp, "refuse-chap\n"); fprintf(fp, "refuse-mschap\n"); fprintf(fp, "refuse-mschap-v2\n"); } fprintf(fp, "defaultroute\n"); fprintf(fp, "noipdefault\n"); fprintf(fp, "usepeerdns\n"); fprintf(fp, "nopcomp\n"); fprintf(fp, "noaccomp\n"); fprintf(fp, "novj\n"); fprintf(fp, "nobsdcomp\n"); fprintf(fp, "persist\n"); fprintf(fp, "maxfail %d\n", 0); fprintf(fp, "holdoff %d\n", 10); fprintf(fp, "nodeflate\n"); fprintf(fp, "mtu %d\n", nvram_safe_get_int("modem_mtu", 1500, 1000, 1500)); fprintf(fp, "mru %d\n", nvram_safe_get_int("modem_mru", 1500, 1000, 1500)); fprintf(fp, "unit %d\n", ppp_unit); if(modem_type == 2){ fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/td.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); fprintf(fp, "disconnect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/Generic_disconn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); } else if(modem_type == 1){ fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/EVDO_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); fprintf(fp, "disconnect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/EVDO_disconn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); } else { if(!strcmp(vid, "0b05") && !strcmp(pid, "0302")) // T500 fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/t500_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); else if(!strcmp(vid, "0421") && !strcmp(pid, "0612")) // CS-15 fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/t500_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); else if(!strcmp(vid, "106c") && !strcmp(pid, "3716")) fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/verizon_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); else if(!strcmp(vid, "1410") && !strcmp(pid, "4400")) fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/rogers_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); else fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/Generic_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); fprintf(fp, "disconnect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/Generic_disconn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); } fclose(fp); return 1; }