From 1c1d1d68d245ee7ac99d7a553a692c6c3983766e Mon Sep 17 00:00:00 2001 From: laforge Date: Sat, 2 Jun 2007 11:00:07 +0000 Subject: add machine / vendor plugin infrastructure (Philip Zabel) git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@2123 99fdad57-331a-0410-800a-d7fa5415bdb3 --- src/gsmd/vendor_qc.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/gsmd/vendor_qc.c (limited to 'src/gsmd/vendor_qc.c') diff --git a/src/gsmd/vendor_qc.c b/src/gsmd/vendor_qc.c new file mode 100644 index 0000000..2bb74bb --- /dev/null +++ b/src/gsmd/vendor_qc.c @@ -0,0 +1,104 @@ +/* Qualcomm [msm6250] gsmd plugin + * + * Written by Philipp Zabel + * 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 +#include +#include +#include +#include + +#include "gsmd.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +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)); + static int rssi_table[] = { 0,5,10,15,20,25,99 }; /* FIXME */ + unsigned int i; + + DEBUGP("entering htccsq_parse param=`%s'\n", param); + if (!ucmd) + return -EINVAL; + + + aux = (struct gsmd_evt_auxdata *) ucmd->buf; + + i = atoi(buf); + if (i > 6) + i = 6; + aux->u.signal.sigq.rssi = rssi_table[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 const struct gsmd_unsolicit qc_unsolicit[] = { + { "@HTCCSQ", &htccsq_parse }, /* Signal Quality */ + + /* FIXME: parse the below and generate the respective events */ + + /* %CGREG: reports extended information about GPRS registration state */ +}; + +static int qc_detect(struct gsmd *g) +{ + /* FIXME: do actual detection of vendor if we have multiple vendors */ + /* open /proc/cpuinfo and check for HTC Universal? */ + return 1; +} + +static int qc_initsettings(struct gsmd *g) +{ + int rc; + struct gsmd_atcmd *cmd; + + /* enable @HTCCSQ: signal quality reports */ + rc |= gsmd_simplecmd(g, "AT@HTCCSQ=1"); + + return rc; +} + +struct gsmd_vendor_plugin gsmd_vendor_plugin = { + .name = "Qualcomm msm6250", + .num_unsolicit = ARRAY_SIZE(qc_unsolicit), + .unsolicit = qc_unsolicit, + .detect = &qc_detect, + .initsettings = &qc_initsettings, +}; -- cgit v1.2.3