r2127 - trunk/src/target/gsm/src/gsmd
laforge at sita.openmoko.org
laforge at sita.openmoko.org
Sat Jun 2 13:43:55 CEST 2007
Author: laforge
Date: 2007-06-02 13:43:55 +0200 (Sat, 02 Jun 2007)
New Revision: 2127
Modified:
trunk/src/target/gsm/src/gsmd/gsmd.c
trunk/src/target/gsm/src/gsmd/machine.c
Log:
implement manual override for vendor/machine type
Modified: trunk/src/target/gsm/src/gsmd/gsmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/gsmd.c 2007-06-02 11:43:30 UTC (rev 2126)
+++ trunk/src/target/gsm/src/gsmd/gsmd.c 2007-06-02 11:43:55 UTC (rev 2127)
@@ -158,15 +158,17 @@
{ "logfile", 1, NULL, 'l' },
{ "hwflow", 0, NULL, 'F' },
{ "leak-report", 0, NULL, 'L' },
+ { "vendor", 1, NULL, 'v' },
+ { "machine", 1, NULL, 'm' },
{ 0, 0, 0, 0 }
};
static void print_help(void)
{
- printf("gsmd - (C) 2006 by Harald Welte <laforge at gnumonks.org>\n"
+ printf("gsmd - (C) 2006-2007 by Harald Welte <laforge at gnumonks.org>\n"
"This program is FREE SOFTWARE under the terms of GNU GPL\n\n"
"Usage:\n"
- "\t-v\t--version\tDisplay program version\n"
+ "\t-V\t--version\tDisplay program version\n"
"\t-d\t--daemon\tDeamonize\n"
"\t-h\t--help\t\tDisplay this help message\n"
"\t-p dev\t--device dev\tSpecify serial device to be used\n"
@@ -174,6 +176,8 @@
"\t-F\t--hwflow\tHardware Flow Control (RTS/CTS)\n"
"\t-L\t--leak-report\tLeak Report of talloc memory allocator\n"
"\t-l file\t--logfile file\tSpecify a logfile to log to\n"
+ "\t-v\t--vendor v\tSpecify GSM modem vendor plugin\n"
+ "\t-m\t--machine m\tSpecify GSM modem machine plugin\n"
);
}
@@ -200,6 +204,8 @@
int hwflow = 0;
char *device = "/dev/ttyUSB0";
char *logfile = "syslog";
+ char *vendor_name = NULL;
+ char *machine_name = NULL;
signal(SIGTERM, sig_handler);
signal(SIGINT, sig_handler);
@@ -209,7 +215,7 @@
gsmd_tallocs = talloc_named_const(NULL, 1, "GSMD");
/*FIXME: parse commandline, set daemonize, device, ... */
- while ((argch = getopt_long(argc, argv, "FVLdhp:s:l:", opts, NULL)) != -1) {
+ while ((argch = getopt_long(argc, argv, "FVLdhp:s:l:v:m:", opts, NULL)) != -1) {
switch (argch) {
case 'V':
/* FIXME */
@@ -240,6 +246,12 @@
exit(2);
}
break;
+ case 'v':
+ vendor_name = optarg;
+ break;
+ case 'm':
+ machine_name = optarg;
+ break;
}
}
@@ -261,7 +273,7 @@
exit(1);
}
- if (gsmd_machine_plugin_init(&g) < 0) {
+ if (gsmd_machine_plugin_init(&g, machine_name, vendor_name) < 0) {
fprintf(stderr, "no machine plugins found\n");
exit(1);
}
Modified: trunk/src/target/gsm/src/gsmd/machine.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/machine.c 2007-06-02 11:43:30 UTC (rev 2126)
+++ trunk/src/target/gsm/src/gsmd/machine.c 2007-06-02 11:43:55 UTC (rev 2127)
@@ -102,11 +102,11 @@
{ NULL, NULL, NULL },
};
-int gsmd_machine_plugin_init(struct gsmd *g, int fd)
+int gsmd_machine_plugin_init(struct gsmd *g, char *machine_name, char *vendor_name)
{
FILE *cpuinfo;
char buf[1024];
- char *line, *machine = NULL;
+ char *line, *hw = NULL;
int i, rc;
cpuinfo = fopen("/proc/cpuinfo", "r");
@@ -117,23 +117,46 @@
line = strtok(buf, "\n");
while (line = strtok(NULL, "\n")) {
if (strncmp(line, "Hardware\t: ", 11) == 0) {
- machine = line+11;
+ hw = line+11;
break;
}
}
- /* FIXME: do this dynamically */
- for (i = 0; machines[i].cpuinfo; i++) {
- if (machine && strcmp(machine, machines[i].cpuinfo) == 0) {
- DEBUGP("detected %s\n", machine);
- rc = gsmd_machine_plugin_load(machines[i].machine);
- rc |= gsmd_vendor_plugin_load(machines[i].vendor);
- return rc;
+
+ if (hw) {
+ /* FIXME: do this dynamically */
+ for (i = 0; machines[i].cpuinfo; i++) {
+ if (strcmp(hw, machines[i].cpuinfo) == 0) {
+ DEBUGP("detected '%s' hardware\n", hw);
+ if (machine_name)
+ DEBUGP("warning: auto-detected machine '%s', "
+ "but user override to '%s'\n",
+ machines[i].machine, machine_name);
+ else
+ machine_name = machines[i].machine;
+
+ if (vendor_name)
+ DEBUGP("wanring: auto-detected vendor '%s', "
+ "but user override to '%s'\m",
+ machines[i].vendor, vendor_name);
+ else
+ vendor_name = machines[i].vendor;
+ break;
+ }
}
}
- /* load generic machine and all vendor plugins */
- rc = gsmd_machine_plugin_load("generic");
- gsmd_vendor_plugin_load("ti");
- gsmd_vendor_plugin_load("tihtc");
- gsmd_vendor_plugin_load("qc");
+
+ if (machine_name)
+ rc = gsmd_machine_plugin_load(machine_name);
+ else
+ rc = gsmd_machine_plugin_load("generic");
+
+ if (vendor_name)
+ gsmd_vendor_plugin_load(vendor_name);
+ else {
+ gsmd_vendor_plugin_load("ti");
+ gsmd_vendor_plugin_load("tihtc");
+ gsmd_vendor_plugin_load("qc");
+ }
+
return rc;
}
More information about the commitlog
mailing list