commit 360619ac11a94ca39cfaaeca2c63db3ceb08de3b
Author: Alex Osborne <bobofdoom@gmail.com>
Date:   Sun Jul 29 20:28:29 2007 +1000

    Add Broadcom BCM2132 vendor plugin
    
    This adds initial support for the Broadcom BCM2132 GSM module as found in
    the Palm Treo 650 PDA phone.
---
 Makefile.am  |    6 ++-
 machine.c    |    2 +
 vendor_bcm.c |  112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 119 insertions(+), 1 deletion(-)

Index: gsm/src/gsmd/Makefile.am
===================================================================
--- gsm.orig/src/gsmd/Makefile.am	2007-08-15 00:34:48.000000000 +0800
+++ gsm/src/gsmd/Makefile.am	2007-08-15 00:36:27.000000000 +0800
@@ -21,7 +21,8 @@
 		     libgsmd-machine_tihtc.la \
 		     libgsmd-vendor_ti.la \
 		     libgsmd-vendor_tihtc.la \
-		     libgsmd-vendor_qc.la
+		     libgsmd-vendor_qc.la \
+		     libgsmd-vendor_bcm.la
 
 libgsmd_machine_generic_la_SOURCES = machine_generic.c
 libgsmd_machine_generic_la_LDFLAGS = -module
@@ -34,5 +35,8 @@
 libgsmd_vendor_tihtc_la_LDFLAGS = -module
 libgsmd_vendor_qc_la_SOURCES = vendor_qc.c
 libgsmd_vendor_qc_la_LDFLAGS = -module
+libgsmd_vendor_bcm_la_SOURCES = vendor_bcm.c
+libgsmd_vendor_bcm_la_LDFLAGS = -module
+
 
 noinst_HEADERS = gsmd.h
Index: gsm/src/gsmd/machine.c
===================================================================
--- gsm.orig/src/gsmd/machine.c	2007-08-15 00:28:20.000000000 +0800
+++ gsm/src/gsmd/machine.c	2007-08-15 00:36:27.000000000 +0800
@@ -100,6 +100,7 @@
 	{ "HTC Himalaya",	"tihtc",	"tihtc" },
 	{ "HTC Magician",	"tihtc",	"tihtc" },
 	{ "HTC Universal",	"generic",	"qc" },
+	{ "Palm Treo 650",	"generic",	"bcm" },
 	{ NULL, NULL, NULL },
 };
 
@@ -157,6 +158,7 @@
 		gsmd_vendor_plugin_load("ti");
 		gsmd_vendor_plugin_load("tihtc");
 		gsmd_vendor_plugin_load("qc");
+		gsmd_vendor_plugin_load("bcm");
 	}
 
 	return rc;
Index: gsm/src/gsmd/vendor_bcm.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ gsm/src/gsmd/vendor_bcm.c	2007-08-15 00:36:27.000000000 +0800
@@ -0,0 +1,112 @@
+/* Broadcom [BCM2132] gsmd plugin
+ *
+ * Written by Alex Osborne <bobofdoom@gmail.com>
+ *
+ * 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>
+
+static int mrdy_parse(char *buf, int len, const char *param,
+		     struct gsmd *g)
+{
+	int status = atoi(param);
+	DEBUGP("entering mrdy_parse param=`%s'\n", param);
+
+	switch (status) {
+	case 1:
+		DEBUGP("Module is ready.\n");
+		break;
+	case 2:
+		DEBUGP("Emergency call is ready.\n");
+		break;
+	case 3:
+		DEBUGP("All AT commands are ready.\n");
+		break;
+	case 4:
+		DEBUGP("SIM card inserted.\n");
+		break;
+	case 5:
+		DEBUGP("SIM card removed.\n");
+		break;
+	case 6:
+		DEBUGP("No access - limited service.\n");
+		break;
+	case 7:
+		DEBUGP("SOS - limited service.\n");
+		break;
+	default:
+		DEBUGP("Unknown module ready status %d\n", status);
+	}
+
+	return 0;
+}
+
+static int mtsmenu_parse(char *buf, int len, const char *param,
+		     struct gsmd *g)
+{
+	char *tok, *param_tmp;
+	struct mtsmenu *mtsmenu;
+
+	DEBUGP("mtsmenu_parse param=`%s'\n", param);
+	return 0;
+}
+
+static const struct gsmd_unsolicit bcm_unsolicit[] = {
+	{ "*MRDY",	&mrdy_parse },		/* Module Ready Status */
+	{ "*MTSMENU",	&mtsmenu_parse },	/* Set Up Menu (SAT) */
+
+	/* FIXME: determine other unsolicited responses */
+};
+
+static int bcm_detect(struct gsmd *g)
+{
+	/* FIXME: do actual detection of vendor if we have multiple vendors */
+	return 1;
+}
+
+static int bcm_initsettings(struct gsmd *g)
+{
+	int rc;
+	struct gsmd_atcmd *cmd;
+
+	/* TODO */
+	return rc;
+}
+
+struct gsmd_vendor_plugin gsmd_vendor_plugin = {
+	.name = "Broadcom BCM2132",
+	.ext_chars = "*",
+	.num_unsolicit = ARRAY_SIZE(bcm_unsolicit),
+	.unsolicit = bcm_unsolicit,
+	.detect = &bcm_detect,
+	.initsettings = &bcm_initsettings,
+};
