diff options
47 files changed, 1159 insertions, 294 deletions
diff --git a/classes/base.bbclass b/classes/base.bbclass index fec7622f18..5381d43e7b 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -892,6 +892,13 @@ python () { base_after_parse(d) } +# Remove me when we switch to bitbake 1.8.8 +def base_get_srcrev(d): + import bb + + if bb.fetch.get_srcrev: + return bb.fetch.get_srcrev(d) + return "NOT IMPLEMENTED" # Patch handling inherit patch diff --git a/classes/openmoko-panel-plugin.bbclass b/classes/openmoko-panel-plugin.bbclass index 4ef42b5015..6a22a92ac8 100644 --- a/classes/openmoko-panel-plugin.bbclass +++ b/classes/openmoko-panel-plugin.bbclass @@ -1,5 +1,5 @@ SECTION = "openmoko/panel-plugin" -DEPENDS += "matchbox-panel-2" +DEPENDS += "matchbox-panel-2 libmokopanelui2" inherit openmoko2 diff --git a/conf/bitbake.conf b/conf/bitbake.conf index e305dc3251..19910d32e7 100644 --- a/conf/bitbake.conf +++ b/conf/bitbake.conf @@ -365,6 +365,7 @@ UPDATECOMMAND = "ERROR, this must be a BitBake bug" UPDATECOMMAND_cvs = "/usr/bin/env cvs -d${CVSROOT} update -d -P ${CVSCOOPTS}" UPDATECOMMAND_svn = "/usr/bin/env svn update ${SVNCOOPTS}" SRCDATE = "${DATE}" +SRCREV = "${@base_get_srcrev(d)}" SRC_URI = "file://${FILE}" diff --git a/conf/distro/include/openmoko-srcdate-now.inc b/conf/distro/include/openmoko-srcdate-now.inc new file mode 100644 index 0000000000..7ca0768819 --- /dev/null +++ b/conf/distro/include/openmoko-srcdate-now.inc @@ -0,0 +1,18 @@ +# Warning! Builds unupgradable packages! + +# OpenMoko +SRCDATE_libgsmd ?= "now" +SRCDATE_libmokogsmd2 ?= "now" +SRCDATE_libmokoui2 ?= "now" +SRCDATE_libmokojournal2 ?= "now" +SRCDATE_libmokopanelui2 ?= "now" +SRCDATE_openmoko-today2 ?= "now" +SRCDATE_openmoko-dialer2 ?= "now" +SRCDATE_openmoko-contacts2 ?= "now" + +SRCDATE_openmoko-panel-battery ?= "now" +SRCDATE_openmoko-panel-clock ?= "now" +SRCDATE_openmoko-panel-gsm ?= "now" +SRCDATE_openmoko-panel-usb ?= "now" +SRCDATE_openmoko-panel-bt ?= "now" +SRCDATE_openmoko-panel-gps ?= "now" diff --git a/conf/distro/include/openmoko.inc b/conf/distro/include/openmoko.inc index 457aa997dd..7c3c4a8f41 100644 --- a/conf/distro/include/openmoko.inc +++ b/conf/distro/include/openmoko.inc @@ -1,7 +1,7 @@ # # Header # -DISTRO_NAME = "OpenMoKo" +DISTRO_NAME = "OpenMoko" # # Naming schemes diff --git a/conf/distro/openmoko.conf b/conf/distro/openmoko.conf index 1f46be09d6..bd4e2076ca 100644 --- a/conf/distro/openmoko.conf +++ b/conf/distro/openmoko.conf @@ -5,11 +5,13 @@ #----------------------------------------------------------------------------- require conf/distro/angstrom-2007.1.conf +require conf/distro/include/openmoko-srcdate-now.inc + # # Header # -DISTRO_NAME = "OpenMoKo" +DISTRO_NAME = "OpenMoko" DISTRO_VERSION = ".dev-snapshot-${DATE}" #DISTRO_TYPE = "release" DISTRO_TYPE = "debug" diff --git a/contrib/mtn2cl/mtn2cl.sh b/contrib/mtn2cl/mtn2cl.sh index a6c042333f..f404def82d 100755 --- a/contrib/mtn2cl/mtn2cl.sh +++ b/contrib/mtn2cl/mtn2cl.sh @@ -1,9 +1,8 @@ #/bin/sh -# This script takes the last 1000 revs and writes a ChangeLog - mkdir logs +export LOGNAME=Changelog.`date -u "+%Y%m%d"` export REV_NOW=`mtn automate heads |head -n1` for i in `mtn log --brief --no-graph --no-merges --from l:"1 week ago" --to ${REV_NOW}| awk '{print $2 ":" $1}'` ; do \ @@ -17,9 +16,9 @@ done cd logs for i in * ; do \ - echo $i: >> ../ChangeLog - cat $i >> ../ChangeLog - echo >> ../ChangeLog + echo $i: >> ../${LOGNAME} + cat $i >> ../${LOGNAME} + echo >> ../${LOGNAME} done cd .. @@ -30,13 +29,13 @@ wget "http://bugs.openembedded.org/buglist.cgi?bug_file_loc=&bug_file_loc_type=a NEW_BUGS="`cat logs/new-bugs.csv | wc -l | tr -d " "`" RESOLVED_BUGS="`cat logs/resolved-bugs.csv | wc -l | tr -d " "`" -echo -e "\n\nBugs fixed:" >> ChangeLog -cat logs/resolved-bugs.csv | awk -F, '{print $1 " " $7 "\t " $8}' | sed s:\"::g >> ChangeLog +echo -e "\n\nBugs fixed:" >> ${LOGNAME} +cat logs/resolved-bugs.csv | awk -F, '{print $1 " " $7 "\t " $8}' | sed s:\"::g >> ${LOGNAME} -echo -e "\n\nBugs opened:" >> ChangeLog -cat logs/new-bugs.csv | awk -F, '{print $1 " " $7 "\t " $8}' | sed s:\"::g >> ChangeLog +echo -e "\n\nBugs opened:" >> ${LOGNAME} +cat logs/new-bugs.csv | awk -F, '{print $1 " " $7 "\t " $8}' | sed s:\"::g >> ${LOGNAME} -echo -e "\nIn total $NEW_BUGS bugs have been created and $RESOLVED_BUGS bugs were closed." >> ChangeLog +echo -e "\nIn total $NEW_BUGS bugs have been created and $RESOLVED_BUGS bugs were closed." >> ${LOGNAME} rm -Rf logs diff --git a/packages/file/file-native_4.21.bb b/packages/file/file-native_4.21.bb index 59535dd518..734891d18d 100644 --- a/packages/file/file-native_4.21.bb +++ b/packages/file/file-native_4.21.bb @@ -1,6 +1,6 @@ require file_${PV}.bb inherit native -DEPENDS = "" +DEPENDS = "zlib-native" PR = "r0" SRC_URI += "file://native-fix.diff;patch=1" diff --git a/packages/libmikey/.mtn2git_empty b/packages/gnash/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/libmikey/.mtn2git_empty +++ b/packages/gnash/.mtn2git_empty diff --git a/packages/gnash/gnash_0.8.0.bb b/packages/gnash/gnash_0.8.0.bb new file mode 100644 index 0000000000..197cea06b6 --- /dev/null +++ b/packages/gnash/gnash_0.8.0.bb @@ -0,0 +1,79 @@ +DESCRIPTION = "Gnash is a GNU Flash movie player that supports many SWF v7 features" + +LICENSE = "GPL-2" +HOMEPAGE = "http://www.gnu.org/software/gnash" + +DEPENDS = "gtk+ cairo libxml2 libmad libsdl-mixer zlib boost jpeg pango curl" + +SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gnash/${PV}/gnash-${PV}.tar.bz2" + + +EXTRA_OECONF = "--enable-gui=gtk \ + --enable-renderer=cairo \ + --enable-media=none \ + --disable-klash \ + --enable-z \ + --enable-jpeg \ + --disable-glext \ + --enable-Xft \ + --enable-expat \ + --enable-mad \ + --enable-cairo \ + --disable-plugin \ + --disable-cygnal \ + --with-boost-incl=${STAGING_INCDIR} \ + --with-boost-lib=${STAGING_LIBDIR} \ + --with-libxml-incl=${STAGING_INCDIR}/libxml2 \ + --with-libxml-lib=${STAGING_LIBDIR} \ + --with-glib-incl=${STAGING_INCDIR}/glib-2.0 \ +# --with-glib-lib=${STAGING_LIBDIR} \ + --with-gtk2-incl=${STAGING_INCDIR}/gtk-2.0 \ + --with-pango-incl=${STAGING_INCDIR}/pango-1.0 \ +# --with-pango-lib=${STAGING_LIBDIR} \ + --with-sdl-incl=${STAGING_INCDIR}/SDL \ + --with-atk-incl=${STAGING_INCDIR}/atk-1.0 \ + --with-Xft-incl=${STAGING_INCDIR}/X11 \ + --with-expat-incl=${STAGING_INCDIR} \ + --with-mad-incl=${STAGING_INCDIR} \ + --with-cairo-incl=${STAGING_INCDIR}/cairo \ + --with-curl-incl=${STAGING_INCDIR} \ + --with-curl-lib=${STAGING_LIBDIR} \ + " + +inherit autotools pkgconfig + +LDFLAGS += " -L${STAGING_LIBDIR} -lcurl -lboost_date_time -lboost_filesystem -lboost_iostreams -lboost_signals -lboost_thread-mt " +CFLAGS += " -I${STAGING_INCDIR} -I${STAGING_LIBDIR}/gtk-2.0/include/ " + +do_configure_append() { + for i in `find . -name Makefile` ; do + sed -i s:I/usr/include:I${STAGING_INCDIR}:g $i + done +} + + +PARALLEL_MAKE = "" + +do_compile() { + oe_runmake 'CC=${CC}' 'LD=${LD}' 'CFLAGS=${CFLAGS}' \ + 'ZLIB_INCLUDE=${STAGING_INCDIR}' \ + 'ZLIB_LIBS=${STAGING_LIBDIR}' \ + 'PNG_INCLUDE=${STAGING_INCDIR}' \ + 'PNG_LIBS=${STAGING_LIBDIR}' +} + + +PACKAGES =+ " libgnashamf libgnashbackend libgnashbase libgnashgeo libgnashgui libgnashplayer libgnashserver " + +FILES_libgnashamf = "${libdir}/libgnashamf-${PV}.so" +FILES_libgnashbackend = "${libdir}/libgnashbackend-${PV}.so" +FILES_libgnashbase = "${libdir}/libgnashbase-${PV}.so" +FILES_libgnashgeo = "${libdir}/libgnashgeo-${PV}.so" +FILES_libgnashgui = "${libdir}/libgnashgui-${PV}.so" +FILES_libgnashplayer = "${libdir}/libgnashplayer-${PV}.so" +FILES_libgnashserver = "${libdir}/libgnashserver-${PV}.so" + +do_stage() { + autotools_stage_all +} + diff --git a/packages/gsm/files/alive-start-if-interpreter-ready.patch b/packages/gsm/files/alive-start-if-interpreter-ready.patch deleted file mode 100644 index 20104d2e3f..0000000000 --- a/packages/gsm/files/alive-start-if-interpreter-ready.patch +++ /dev/null @@ -1,39 +0,0 @@ -Index: gsm/src/gsmd/atcmd.c -=================================================================== ---- gsm.orig/src/gsmd/atcmd.c 2007-06-03 13:24:44.000000000 +0200 -+++ gsm/src/gsmd/atcmd.c 2007-06-03 13:24:46.000000000 +0200 -@@ -185,6 +185,7 @@ - !strcmp(buf, "AT-Command Interpreter ready")) { - g->interpreter_ready = 1; - gsmd_initsettings(g); -+ gmsd_alive_start(g); - return 0; - } - -Index: gsm/src/gsmd/gsmd.c -=================================================================== ---- gsm.orig/src/gsmd/gsmd.c 2007-06-03 13:22:02.000000000 +0200 -+++ gsm/src/gsmd/gsmd.c 2007-06-03 13:22:56.000000000 +0200 -@@ -128,7 +128,7 @@ - gsmd_timer_register(tmr); - } - --static int gmsd_alive_start(struct gsmd *gsmd) -+int gmsd_alive_start(struct gsmd *gsmd) - { - struct timeval tv; - -@@ -478,10 +478,11 @@ - /* select a vendor plugin */ - gsmd_vendor_plugin_find(&g); - -- if (g.interpreter_ready) -+ if (g.interpreter_ready) { - gsmd_initsettings(&g); - -- gmsd_alive_start(&g); -+ gmsd_alive_start(&g); -+ } - - gsmd_opname_init(&g); - diff --git a/packages/gsm/files/libgsmd-tool-fix.patch b/packages/gsm/files/libgsmd-tool-fix.patch new file mode 100644 index 0000000000..8938f5a682 --- /dev/null +++ b/packages/gsm/files/libgsmd-tool-fix.patch @@ -0,0 +1,19 @@ +Index: gsm/src/util/atcmd.c +=================================================================== +--- gsm.orig/src/util/atcmd.c 2007-07-31 11:44:32.000000000 +0200 ++++ gsm/src/util/atcmd.c 2007-07-31 11:46:44.000000000 +0200 +@@ -91,9 +91,11 @@ + continue; + } + printf("STR=`%s'\n", buf); ++ ++ /* this is a synchronous call for a passthrough ++ * command */ ++ lgsm_passthrough(lgsmh, buf, rbuf, &rlen); ++ printf("RSTR=`%s'\n", rbuf); + } +- /* this is a synchronous call for a passthrough command */ +- lgsm_passthrough(lgsmh, buf, rbuf, &rlen); +- printf("RSTR=`%s'\n", rbuf); + } + } diff --git a/packages/gsm/files/mlbuf-in-gsmd-struct.patch b/packages/gsm/files/mlbuf-in-gsmd-struct.patch new file mode 100644 index 0000000000..d46eae8bb3 --- /dev/null +++ b/packages/gsm/files/mlbuf-in-gsmd-struct.patch @@ -0,0 +1,102 @@ +Index: gsm/include/gsmd/gsmd.h +=================================================================== +--- gsm.orig/include/gsmd/gsmd.h 2007-07-31 14:07:47.000000000 +0200 ++++ gsm/include/gsmd/gsmd.h 2007-07-31 14:09:02.000000000 +0200 +@@ -74,6 +74,8 @@ + struct gsmd_device_state dev_state; + + struct llist_head operators; /* cached list of operator names */ ++ unsigned int mlbuf_len; ++ unsigned char *mlbuf; /* ml_parse buffer */ + }; + + struct gsmd_user { +Index: gsm/src/gsmd/atcmd.c +=================================================================== +--- gsm.orig/src/gsmd/atcmd.c 2007-07-31 14:06:49.000000000 +0200 ++++ gsm/src/gsmd/atcmd.c 2007-07-31 14:12:33.000000000 +0200 +@@ -175,9 +175,7 @@ + { + struct gsmd *g = ctx; + struct gsmd_atcmd *cmd = NULL; +- static char mlbuf[MLPARSE_BUF_SIZE]; + int rc = 0, final = 0; +- int mlbuf_len; + + DEBUGP("buf=`%s'(%d)\n", buf, len); + +@@ -273,15 +271,15 @@ + + /* it might be a multiline response, so if there's a previous + response, send out mlbuf and start afresh with an empty buffer */ +- if (mlbuf[0] != 0) { ++ if (g->mlbuf[0] != 0) { + if (!cmd->cb) { + gsmd_log(GSMD_NOTICE, "command without cb!!!\n"); + } else { + DEBUGP("Calling cmd->cb()\n"); +- cmd->resp = mlbuf; ++ cmd->resp = g->mlbuf; + rc = cmd->cb(cmd, cmd->ctx, cmd->resp); + DEBUGP("Clearing mlbuf\n"); +- mlbuf[0] = 0; ++ g->mlbuf[0] = 0; + } + } + +@@ -334,16 +332,16 @@ + /* we reach here, if we are at an information response that needs to be + * passed on */ + +- if (mlbuf[0] == 0) { ++ if (g->mlbuf[0] == 0) { + DEBUGP("Filling mlbuf\n"); +- strncat(mlbuf, buf, sizeof(mlbuf)-1); ++ strncat(g->mlbuf, buf, MLPARSE_BUF_SIZE-1); + } else { + DEBUGP("Appending buf to mlbuf\n"); +- mlbuf_len = strlen(mlbuf); +- if (mlbuf_len+1 < sizeof(mlbuf)) { +- mlbuf[mlbuf_len] = '\n'; +- mlbuf[mlbuf_len+1] = '\0'; +- strncat(mlbuf, buf, sizeof(mlbuf)-mlbuf_len-2); ++ g->mlbuf_len = strlen(g->mlbuf); ++ if (g->mlbuf_len+1 < MLPARSE_BUF_SIZE) { ++ g->mlbuf[g->mlbuf_len] = '\n'; ++ g->mlbuf[g->mlbuf_len+1] = '\0'; ++ strncat(g->mlbuf, buf, MLPARSE_BUF_SIZE-g->mlbuf_len-2); + } else { + DEBUGP("response too big for mlbuf!!!\n"); + return -EFBIG; +@@ -365,13 +363,13 @@ + } else { + DEBUGP("Calling final cmd->cb()\n"); + /* send final result code if there is no information response in mlbuf */ +- if (mlbuf[0] == 0) ++ if (g->mlbuf[0] == 0) + cmd->resp = buf; + else +- cmd->resp = mlbuf; ++ cmd->resp = g->mlbuf; + rc = cmd->cb(cmd, cmd->ctx, cmd->resp); + DEBUGP("Clearing mlbuf\n"); +- mlbuf[0] = 0; ++ g->mlbuf[0] = 0; + } + + /* remove from list of currently executing cmds */ +Index: gsm/src/gsmd/gsmd.c +=================================================================== +--- gsm.orig/src/gsmd/gsmd.c 2007-07-31 14:06:47.000000000 +0200 ++++ gsm/src/gsmd/gsmd.c 2007-07-31 14:06:50.000000000 +0200 +@@ -300,6 +300,10 @@ + { + INIT_LLIST_HEAD(&g->users); + ++ g->mlbuf = talloc_array(gsmd_tallocs, unsigned char, MLPARSE_BUF_SIZE); ++ if (!g->mlbuf) ++ return -ENOMEM; ++ + return 0; + } + diff --git a/packages/gsm/files/sms-hacks.patch b/packages/gsm/files/sms-hacks.patch new file mode 100644 index 0000000000..ba248449af --- /dev/null +++ b/packages/gsm/files/sms-hacks.patch @@ -0,0 +1,820 @@ +From 3e5832569d3b29a90b29b5d5ac0ffad4765bcff3 Mon Sep 17 00:00:00 2001 +From: Andrzej Zaborowski <balrog@zabor.org> +Date: Fri, 6 Jul 2007 06:55:12 +0200 +Subject: [PATCH] SMS hacks 2 + +--- + include/gsmd/gsmd.h | 8 ++- + include/gsmd/usock.h | 35 ++++++++- + include/gsmd/vendorplugin.h | 2 +- + include/libgsmd/sms.h | 2 +- + src/gsmd/atcmd.c | 130 +++++++++++++++++++------------- + src/gsmd/sms_cb.c | 19 ++++- + src/gsmd/usock.c | 175 +++++++++++++++++++++++++++++++++++++----- + src/gsmd/vendor_ti.c | 2 +- + src/libgsmd/libgsmd_sms.c | 26 +++++-- + 11 files changed, 320 insertions(+), 91 deletions(-) + +Index: gsm/include/gsmd/gsmd.h +=================================================================== +--- gsm.orig/include/gsmd/gsmd.h 2007-07-31 14:09:02.000000000 +0200 ++++ gsm/include/gsmd/gsmd.h 2007-07-31 14:23:32.000000000 +0200 +@@ -27,6 +27,7 @@ + u_int32_t buflen; + u_int16_t id; + u_int8_t flags; ++ char *cur; + char buf[]; + }; + +@@ -36,6 +37,8 @@ + LLPARSE_STATE_IDLE_LF, /* LF before response (V1) */ + LLPARSE_STATE_RESULT, /* within result payload */ + LLPARSE_STATE_RESULT_CR, /* CR after result */ ++ LLPARSE_STATE_PROMPT, /* within a "> " prompt */ ++ LLPARSE_STATE_PROMPT_SPC, /* a complete "> " prompt */ + LLPARSE_STATE_ERROR, /* something went wrong */ + /* ... idle again */ + }; +@@ -52,6 +55,7 @@ + unsigned int flags; + void *ctx; + int (*cb)(const char *buf, int len, void *ctx); ++ int (*prompt_cb)(void *ctx); + char *cur; + char buf[LLPARSE_BUF_SIZE]; + }; +@@ -59,6 +63,7 @@ + struct gsmd; + + #define GSMD_FLAG_V0 0x0001 /* V0 responses to be expected from TA */ ++#define GSMD_FLAG_SMS_FMT 0x0002 /* Use TEXT rather than PDU mode */ + + struct gsmd { + unsigned int flags; +@@ -94,7 +99,8 @@ + + extern int gsmdlog_init(const char *path); + /* write a message to the daemons' logfile */ +-void __gsmd_log(int level, const char *file, int line, const char *function, const char *message, ...); ++void __gsmd_log(int level, const char *file, int line, const char *function, const char *message, ...) ++ __attribute__ ((__format__ (__printf__, 5, 6))); + /* macro for logging including filename and line number */ + #define gsmd_log(level, format, args ...) \ + __gsmd_log(level, __FILE__, __LINE__, __FUNCTION__, format, ## args) +Index: gsm/include/gsmd/usock.h +=================================================================== +--- gsm.orig/include/gsmd/usock.h 2007-07-31 13:58:37.000000000 +0200 ++++ gsm/include/gsmd/usock.h 2007-07-31 14:23:32.000000000 +0200 +@@ -139,7 +139,7 @@ + /* for SMS-SUBMIT, SMS-DELIVER */ + enum gsmd_sms_tp_udhi { + GSMD_SMS_TP_UDHI_NO_HEADER = (0<<6), +- GSMD_SMS_TP_UDHI_WTIH_HEADER = (1<<6), ++ GSMD_SMS_TP_UDHI_WITH_HEADER = (1<<6), + }; + + /* SMS delflg from 3GPP TS 07.05, Clause 3.5.4 */ +@@ -160,6 +160,34 @@ + GSMD_PHONEBOOK_GET_SUPPORT = 6, + }; + ++/* Type-of-Address, Numbering Plan Identification field */ ++enum gsmd_toa_npi { ++ GSMD_TOA_NPI_UNKNOWN = 0x0, ++ GSMD_TOA_NPI_ISDN = 0x1, ++ GSMD_TOA_NPI_DATA = 0x3, ++ GSMD_TOA_NPI_TELEX = 0x4, ++ GSMD_TOA_NPI_NATIONAL = 0x8, ++ GSMD_TOA_NPI_PRIVATE = 0x9, ++ GSMD_TOA_NPI_ERMES = 0xa, ++ GSMD_TOA_NPI_RESERVED = 0xf, ++}; ++ ++/* Type-of-Address, Type-of-Number field */ ++enum gsmd_toa_ton { ++ GSMD_TOA_TON_UNKNOWN = (0<<4), ++ GSMD_TOA_TON_INTERNATIONAL = (1<<4), ++ GSMD_TOA_TON_NATIONAL = (2<<4), ++ GSMD_TOA_TON_NETWORK = (3<<4), ++ GSMD_TOA_TON_SUBSCRIBER = (4<<4), ++ GSMD_TOA_TON_ALPHANUMERIC = (5<<4), ++ GSMD_TOA_TON_ABBREVIATED = (6<<4), ++}; ++ ++/* Type-of-Address, bit 7 always 1 */ ++enum gsmd_toa_reserved { ++ GSMD_TOA_RESERVED = (1<<7), ++}; ++ + /* Length from 3GPP TS 04.08, Clause 10.5.4.7 */ + + #define GSMD_ADDR_MAXLEN 32 +@@ -269,6 +297,11 @@ + char user_data[140]; + } __attribute__ ((packed)); + ++struct gsmd_sms_send { ++ struct gsmd_addr addr; ++ struct gsmd_sms payload; ++}; ++ + /* Refer to GSM 07.07 subclause 8.12 */ + struct gsmd_phonebook_readrg { + u_int8_t index1; +Index: gsm/include/gsmd/vendorplugin.h +=================================================================== +--- gsm.orig/include/gsmd/vendorplugin.h 2007-07-31 13:58:38.000000000 +0200 ++++ gsm/include/gsmd/vendorplugin.h 2007-07-31 14:23:32.000000000 +0200 +@@ -12,7 +12,7 @@ + struct gsmd_vendor_plugin { + struct llist_head list; + unsigned char *name; +- unsigned char *ext_chars; ++ char *ext_chars; + unsigned int num_unsolicit; + const struct gsmd_unsolicit *unsolicit; + int (*detect)(struct gsmd *g); +Index: gsm/include/libgsmd/sms.h +=================================================================== +--- gsm.orig/include/libgsmd/sms.h 2007-07-31 13:58:38.000000000 +0200 ++++ gsm/include/libgsmd/sms.h 2007-07-31 14:23:32.000000000 +0200 +@@ -83,7 +83,7 @@ + extern int lgsmd_sms_send(struct lgsm_handle *lh, const struct lgsm_sms *sms); + + /* Write Message to Memory */ +-extern int lgsmd_sms_write(struct lgsm_handle *lh, ++extern int lgsmd_sms_write(struct lgsm_handle *lh, + const struct lgsm_sms_write *sms_write); + + /* Packing of 7-bit characters, refer to GSM 03.38 subclause 6.1.2.1.1 */ +Index: gsm/src/gsmd/atcmd.c +=================================================================== +--- gsm.orig/src/gsmd/atcmd.c 2007-07-31 14:13:00.000000000 +0200 ++++ gsm/src/gsmd/atcmd.c 2007-07-31 14:23:32.000000000 +0200 +@@ -82,9 +82,12 @@ + + switch (llp->state) { + case LLPARSE_STATE_IDLE: ++ case LLPARSE_STATE_PROMPT_SPC: + if (llp->flags & LGSM_ATCMD_F_EXTENDED) { + if (byte == '\r') + llp->state = LLPARSE_STATE_IDLE_CR; ++ else if (byte == '>') ++ llp->state = LLPARSE_STATE_PROMPT; + else { + #ifdef STRICT + llp->state = LLPARSE_STATE_ERROR; +@@ -108,6 +111,8 @@ + /* can we really go directly into result_cr ? */ + if (byte == '\r') + llp->state = LLPARSE_STATE_RESULT_CR; ++ else if (byte == '>') ++ llp->state = LLPARSE_STATE_PROMPT; + else { + llp->state = LLPARSE_STATE_RESULT; + ret = llparse_append(llp, byte); +@@ -127,6 +132,16 @@ + memset(llp->buf, 0, LLPARSE_BUF_SIZE); + } + break; ++ case LLPARSE_STATE_PROMPT: ++ if (byte == ' ') ++ llp->state = LLPARSE_STATE_PROMPT_SPC; ++ else { ++ /* this was not a real "> " prompt */ ++ llparse_append(llp, '>'); ++ ret = llparse_append(llp, byte); ++ llp->state = LLPARSE_STATE_RESULT; ++ } ++ break; + case LLPARSE_STATE_ERROR: + break; + } +@@ -147,6 +162,10 @@ + /* FIXME: what to do with return value ? */ + llp->cb(llp->buf, llp->cur - llp->buf, llp->ctx); + } ++ ++ /* if a full SMS-style prompt was received, poke the select */ ++ if (llp->state == LLPARSE_STATE_PROMPT_SPC) ++ llp->prompt_cb(llp->ctx); + } + + return 0; +@@ -175,7 +194,7 @@ + { + struct gsmd *g = ctx; + struct gsmd_atcmd *cmd = NULL; +- int rc = 0, final = 0; ++ int rc = 0; + + DEBUGP("buf=`%s'(%d)\n", buf, len); + +@@ -229,7 +248,6 @@ + DEBUGP("error number %lu\n", err_nr); + if (cmd) + cmd->ret = err_nr; +- final = 1; + goto final_cb; + } + if (!strncmp(buf+1, "CMS ERROR", 9)) { +@@ -239,7 +257,6 @@ + DEBUGP("error number %lu\n", err_nr); + if (cmd) + cmd->ret = err_nr; +- final = 1; + goto final_cb; + } + +@@ -271,7 +288,7 @@ + + /* it might be a multiline response, so if there's a previous + response, send out mlbuf and start afresh with an empty buffer */ +- if (g->mlbuf[0] != 0) { ++ if (g->mlbuf_len) { + if (!cmd->cb) { + gsmd_log(GSMD_NOTICE, |
