summaryrefslogtreecommitdiff
path: root/packages/gsm/files/magician
diff options
context:
space:
mode:
authorPhilipp Zabel <philipp.zabel@gmail.com>2007-04-05 09:04:17 +0000
committerPhilipp Zabel <philipp.zabel@gmail.com>2007-04-05 09:04:17 +0000
commit6a111dc1a6d7cc44ac3019ced52d5bbc17f0b136 (patch)
tree0d3133df2e7d0bc35bea9fb46fbb7e6682643d97 /packages/gsm/files/magician
parentb96de293f83c5860731e5a63ef27b1af2921a23c (diff)
libgsmd: experimental plugin infrastructure for magician and universal
- subject to change
Diffstat (limited to 'packages/gsm/files/magician')
-rw-r--r--packages/gsm/files/magician/default5
-rw-r--r--packages/gsm/files/magician/ldisc.patch66
-rw-r--r--packages/gsm/files/magician/vendor-tihtc.patch325
3 files changed, 3 insertions, 393 deletions
diff --git a/packages/gsm/files/magician/default b/packages/gsm/files/magician/default
index a9c3b94b1d..523d0b9479 100644
--- a/packages/gsm/files/magician/default
+++ b/packages/gsm/files/magician/default
@@ -1,9 +1,10 @@
# gsmd This shell script configures for the gsmd init script.
-# Set line Discipline 17 (N_TIHTC), needs ldisc.patch-ed gsmd
-GSMD_OPTS="-s 115200 -F -D 17"
+GSMD_OPTS="-s 115200 -F"
# If your GSM device needs to be powered up, uncomment and modify the next line
#GSM_POW="/sys/bus/platform/devices/gta01-pm-gsm.0/power_on"
+# this should be in a common /etc/default/serial, together
+# with BT_DEV, and IR_DEV
GSM_DEV="/dev/ttyS1"
diff --git a/packages/gsm/files/magician/ldisc.patch b/packages/gsm/files/magician/ldisc.patch
deleted file mode 100644
index 30d4a8812a..0000000000
--- a/packages/gsm/files/magician/ldisc.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-Index: gsm/src/gsmd/gsmd.c
-===================================================================
---- gsm.orig/src/gsmd/gsmd.c 2007-03-29 15:29:31.000000000 +0200
-+++ gsm/src/gsmd/gsmd.c 2007-03-29 15:33:07.000000000 +0200
-@@ -32,6 +32,7 @@
- #define _GNU_SOURCE
- #include <getopt.h>
-
-+#include <sys/ioctl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-
-@@ -150,6 +151,7 @@
- { "speed", 1, NULL, 's' },
- { "logfile", 1, NULL, 'l' },
- { "hwflow", 0, NULL, 'F' },
-+ { "ldisc", 1, NULL, 'D' },
- { "leak-report", 0, NULL, 'L' },
- { 0, 0, 0, 0 }
- };
-@@ -165,6 +167,7 @@
- "\t-p dev\t--device dev\tSpecify serial device to be used\n"
- "\t-s spd\t--speed spd\tSpecify speed in bps (9600,38400,115200,...)\n"
- "\t-F\t--hwflow\tHardware Flow Control (RTS/CTS)\n"
-+ "\t-D\t--ldisc num\tSet line discipline (0=N_TTY,...)\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"
- );
-@@ -191,6 +194,7 @@
- int daemonize = 0;
- int bps = 115200;
- int hwflow = 0;
-+ int ldisc = 0;
- char *device = "/dev/ttyUSB0";
- char *logfile = "syslog";
-
-@@ -202,7 +206,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:D:", opts, NULL)) != -1) {
- switch (argch) {
- case 'V':
- /* FIXME */
-@@ -232,6 +236,8 @@
- fprintf(stderr, "can't open logfile `%s'\n", optarg);
- exit(2);
- }
-+ case 'D':
-+ ldisc = atoi(optarg);
- break;
- }
- }
-@@ -249,6 +255,11 @@
- exit(1);
- }
-
-+ if (ldisc && ioctl(fd, TIOCSETD, &ldisc) < 0) {
-+ fprintf(stderr, "can't set line discipline\n");
-+ exit(1);
-+ }
-+
- if (gsmd_initialize(&g) < 0) {
- fprintf(stderr, "internal error\n");
- exit(1);
diff --git a/packages/gsm/files/magician/vendor-tihtc.patch b/packages/gsm/files/magician/vendor-tihtc.patch
deleted file mode 100644
index a2f22ffbea..0000000000
--- a/packages/gsm/files/magician/vendor-tihtc.patch
+++ /dev/null
@@ -1,325 +0,0 @@
-Index: gsm/src/gsmd/vendor_tihtc.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gsm/src/gsmd/vendor_tihtc.c 2007-03-27 13:12:05.000000000 +0200
-@@ -0,0 +1,294 @@
-+/* TI [Calypso] with HTC firmware gsmd plugin
-+ *
-+ * Written by Philipp Zabel <philipp.zabel@gmail.com>
-+ * based on vendor_ti.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along
-+ * with this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ */
-+
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include <errno.h>
-+
-+#include "gsmd.h"
-+
-+#include <gsmd/gsmd.h>
-+#include <gsmd/usock.h>
-+#include <gsmd/event.h>
-+#include <gsmd/talloc.h>
-+#include <gsmd/extrsp.h>
-+#include <gsmd/atcmd.h>
-+#include <gsmd/vendorplugin.h>
-+#include <gsmd/unsolicited.h>
-+
-+#if 0
-+#include "vendorplugin.h"
-+
-+static int
-+ti_getopt(struct gsmd *gh, int optname, void *optval, int *optlen)
-+{
-+ switch (optname) {
-+ case GSMD_OPT_CIPHER_IND:
-+ /* FIXME: send AT%CPRI=? */
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int
-+ti_setopt(struct gsmd *gh, int optname, const void *optval, int optlen)
-+{
-+ switch (optname) {
-+ case GSMD_OPT_CIPHER_IND:
-+ /* FIXME: send AT%CPRI= */
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+#endif
-+
-+
-+static int htccsq_parse(char *buf, int len, const char *param,
-+ struct gsmd *gsmd)
-+{
-+ char *tok;
-+ struct gsmd_evt_auxdata *aux;
-+ struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT, GSMD_EVT_SIGNAL,
-+ sizeof(*aux));
-+
-+ DEBUGP("entering htccsq_parse param=`%s'\n", param);
-+ if (!ucmd)
-+ return -EINVAL;
-+
-+
-+ aux = (struct gsmd_evt_auxdata *) ucmd->buf;
-+
-+ /* FIXME: contains values 1-5, should be mapped to 0-31 somehow? */
-+ /* 2 --> 11 */
-+ aux->u.signal.sigq.rssi = atoi(buf);
-+ aux->u.signal.sigq.ber = 99;
-+
-+ DEBUGP("sending EVT_SIGNAL\n");
-+ usock_evt_send(gsmd, ucmd, GSMD_EVT_SIGNAL);
-+
-+ return 0;
-+
-+out_free_io:
-+ free(ucmd);
-+ return -EIO;
-+}
-+
-+static int cpri_parse(char *buf, int len, const char *param, struct gsmd *gsmd)
-+{
-+ char *tok1, *tok2;
-+
-+ tok1 = strtok(buf, ",");
-+ if (!tok1)
-+ return -EIO;
-+
-+ tok2 = strtok(NULL, ",");
-+ if (!tok2) {
-+ switch (atoi(tok1)) {
-+ case 0:
-+ gsmd->dev_state.ciph_ind.flags &= ~GSMD_CIPHIND_ACTIVE;
-+ break;
-+ case 1:
-+ gsmd->dev_state.ciph_ind.flags |= GSMD_CIPHIND_ACTIVE;
-+ break;
-+ case 2:
-+ gsmd->dev_state.ciph_ind.flags |= GSMD_CIPHIND_DISABLED_SIM;
-+ break;
-+ }
-+ } else {
-+ struct gsmd_evt_auxdata *aux;
-+ struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT,
-+ GSMD_EVT_CIPHER,
-+ sizeof(*aux));
-+ if (!ucmd)
-+ return -ENOMEM;
-+
-+ aux = (struct gsmd_evt_auxdata *) ucmd->buf;
-+
-+ aux->u.cipher.net_state_gsm = atoi(tok1);
-+ aux->u.cipher.net_state_gsm = atoi(tok2);
-+
-+ usock_evt_send(gsmd, ucmd, GSMD_EVT_CIPHER);
-+ }
-+
-+ return 0;
-+}
-+
-+/* Call Progress Information */
-+static int cpi_parse(char *buf, int len, const char *param, struct gsmd *gsmd)
-+{
-+ char *tok;
-+ struct gsmd_evt_auxdata *aux;
-+ struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT,
-+ GSMD_EVT_OUT_STATUS,
-+ sizeof(*aux));
-+
-+ DEBUGP("entering cpi_parse param=`%s'\n", param);
-+ if (!ucmd)
-+ return -EINVAL;
-+
-+ aux = (struct gsmd_evt_auxdata *) ucmd->buf;
-+
-+ /* Format: cId, msgType, ibt, tch, dir,[mode],[number],[type],[alpha],[cause],line */
-+
-+ /* call ID */
-+ tok = strtok(buf, ",");
-+ if (!tok)
-+ goto out_free_io;
-+
-+ /* message type (layer 3) */
-+ tok = strtok(NULL, ",");
-+ if (!tok)
-+ goto out_free_io;
-+ aux->u.call_status.prog = atoi(tok);
-+
-+ /* in-band tones */
-+ tok = strtok(NULL, ",");
-+ if (!tok)
-+ goto out_free_io;
-+
-+ if (*tok == '1')
-+ aux->u.call_status.ibt = 1;
-+ else
-+ aux->u.call_status.ibt = 0;
-+
-+ /* TCH allocated */
-+ tok = strtok(NULL, ",");
-+ if (!tok)
-+ goto out_free_io;
-+
-+ if (*tok == '1')
-+ aux->u.call_status.tch = 1;
-+ else
-+ aux->u.call_status.tch = 0;
-+
-+ /* direction */
-+ tok = strtok(NULL, ",");
-+ if (!tok)
-+ goto out_send;
-+
-+ switch (*tok) {
-+ case '0':
-+ case '1':
-+ case '2':
-+ case '3':
-+ aux->u.call_status.dir = (*tok - '0');
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ /* mode */
-+ tok = strtok(NULL, ",");
-+ if (!tok)
-+ goto out_send;
-+
-+out_send:
-+ usock_evt_send(gsmd, ucmd, GSMD_EVT_OUT_STATUS);
-+
-+ return 0;
-+
-+out_free_io:
-+ talloc_free(ucmd);
-+ return -EIO;
-+}
-+
-+static const struct gsmd_unsolicit tihtc_unsolicit[] = {
-+ { "%HTCCSQ", &htccsq_parse }, /* Signal Quality */
-+ { "%CPRI", &cpri_parse }, /* Ciphering Indication */
-+ { "%CPI", &cpi_parse }, /* Call Progress Information */
-+
-+ /* FIXME: parse the below and generate the respective events */
-+
-+ /* %CGREG: reports extended information about GPRS registration state */
-+};
-+
-+static int cpi_detect_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
-+{
-+ struct gsmd *g = ctx;
-+ struct gsm_extrsp *er;
-+
-+ if (strncmp(resp, "%CPI: ", 6))
-+ return -EINVAL;
-+ resp += 6;
-+
-+ er = extrsp_parse(cmd, resp);
-+ if (!er)
-+ return -EINVAL;
-+
-+ if (extrsp_supports(er, 0, 3))
-+ return gsmd_simplecmd(g, "AT%CPI=3");
-+ else if (extrsp_supports(er, 0, 2))
-+ return gsmd_simplecmd(g, "AT%CPI=2");
-+ else
-+ DEBUGP("Call Progress Indication mode 2 or 3 not supported!!\n");
-+
-+ talloc_free(er);
-+ return 0;
-+}
-+
-+static int tihtc_detect(struct gsmd *g)
-+{
-+ /* FIXME: do actual detection of vendor if we have multiple vendors */
-+ /* open /proc/cpuinfo and check for HTC Magician or HTC Blueangel? */
-+ /* check for N_TIHTC ldisc? or set it ourselves? */
-+ return 1;
-+}
-+
-+static int tihtc_initsettings(struct gsmd *g)
-+{
-+ int rc;
-+ struct gsmd_atcmd *cmd;
-+
-+ /* use %CGREG */
-+ //rc |= gsmd_simplecmd(g, "AT%CGREG=3");
-+ /* enable %CPRI: ciphering indications */
-+ rc |= gsmd_simplecmd(g, "AT%CPRI=1");
-+ /* enable %HTCCSQ: signal quality reports */
-+ rc |= gsmd_simplecmd(g, "AT%HTCCSQ=1");
-+ /* send unsolicited commands at any time */
-+ rc |= gsmd_simplecmd(g, "AT%CUNS=0");
-+
-+ /* enable %CPI: call progress indication */
-+ cmd = atcmd_fill("AT%CPI=?", 9, &cpi_detect_cb, g, 0);
-+ if (cmd)
-+ atcmd_submit(g, cmd);
-+
-+ return rc;
-+}
-+
-+static struct gsmd_vendor_plugin plugin_tihtc = {
-+ .name = "TI Calypso / HTC firmware",
-+ .num_unsolicit = ARRAY_SIZE(tihtc_unsolicit),
-+ .unsolicit = tihtc_unsolicit,
-+ .detect = &tihtc_detect,
-+ .initsettings = &tihtc_initsettings,
-+};
-+
-+/* FIXME: this will be _init() when we make this a plugin */
-+int tihtc_init(void)
-+{
-+ return gsmd_vendor_plugin_register(&plugin_tihtc);
-+}
-Index: gsm/src/gsmd/gsmd.c
-===================================================================
---- gsm.orig/src/gsmd/gsmd.c 2007-03-27 13:07:59.000000000 +0200
-+++ gsm/src/gsmd/gsmd.c 2007-03-27 13:08:08.000000000 +0200
-@@ -276,7 +276,7 @@
- }
-
- /* FIXME: do this dynamically */
-- ticalypso_init();
-+ tihtc_init();
-
- gsmd_vendor_plugin_find(&g);
-
-Index: gsm/src/gsmd/Makefile.am
-===================================================================
---- gsm.orig/src/gsmd/Makefile.am 2007-03-27 13:09:11.000000000 +0200
-+++ gsm/src/gsmd/Makefile.am 2007-03-27 13:09:20.000000000 +0200
-@@ -4,7 +4,7 @@
- sbin_PROGRAMS = gsmd
-
- gsmd_SOURCES = gsmd.c atcmd.c select.c vendor.c usock.c unsolicited.c log.c \
-- vendor_ti.c talloc.c operator_cache.c ext_response.c
-+ vendor_ti.c vendor_tihtc.c talloc.c operator_cache.c ext_response.c
- #gsmd_LDADD = ../libgsmd/libgsmd.la
- #gsmd_LDFLAGS = -dynamic
-