diff options
Diffstat (limited to 'packages/gsm/files/028_shell-phonebook-find-and-read-range-support.patch')
-rw-r--r-- | packages/gsm/files/028_shell-phonebook-find-and-read-range-support.patch | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/packages/gsm/files/028_shell-phonebook-find-and-read-range-support.patch b/packages/gsm/files/028_shell-phonebook-find-and-read-range-support.patch new file mode 100644 index 0000000000..db07a5df35 --- /dev/null +++ b/packages/gsm/files/028_shell-phonebook-find-and-read-range-support.patch @@ -0,0 +1,264 @@ +From: Sean Chiang <sean_chiang@openmoko.com> +Subject: [PATCH] improvement for find and read phonebooks in shell + +This patch improves the functions to find and read phonebooks in shell. + +Besides prr and pf, I add two new commands pRr and pRf to retrieve the +phonebook. + +Signed-off-by: Jim Huang <jserv@openmoko.org> + +Index: gsm/src/util/shell.c +=================================================================== +--- gsm.orig/src/util/shell.c 2007-09-17 23:57:51.000000000 +0800 ++++ gsm/src/util/shell.c 2007-09-17 23:59:04.000000000 +0800 +@@ -34,8 +34,6 @@ + #include <gsmd/usock.h> + #include <gsmd/ts0705.h> + +-#include <common/linux_list.h> +- + #ifndef __GSMD__ + #define __GSMD__ + #include <gsmd/talloc.h> +@@ -43,9 +41,8 @@ + #endif + + #define STDIN_BUF_SIZE 1024 +- +-static LLIST_HEAD(storage_list); +-static LLIST_HEAD(phonebook_list); ++static int nFIND = 0; ++static int nREADRG = 0; + + /* this is the handler for receiving passthrough responses */ + static int pt_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh) +@@ -62,46 +59,23 @@ + struct gsmd_phonebook_storage *gpst; + char *payload; + char *fcomma, *lcomma, *ptr = NULL; ++ int *num; + char buf[128]; ++ int i; + + switch (gmh->msg_subtype) { +-#if 0 + case GSMD_PHONEBOOK_FIND: ++ num = (int *) ((char *)gmh + sizeof(*gmh)); ++ printf("Records:%d\n", *num); ++ ++ nFIND = *num; ++ break; + case GSMD_PHONEBOOK_READRG: +- payload = (char *)gmh + sizeof(*gmh); ++ num = (int *) ((char *)gmh + sizeof(*gmh)); ++ printf("Records:%d\n", *num); + +- if (!strncmp(payload, "+CPBR", 5) || +- !strncmp(payload, "+CPBF", 5)) { +- gp = (struct gsmd_phonebook *) malloc(sizeof(struct gsmd_phonebook)); +- ptr = strchr(payload, ' '); +- gp->index = atoi(ptr+1); +- +- fcomma = strchr(payload, '"'); +- lcomma = strchr(fcomma+1, '"'); +- strncpy(gp->numb, fcomma + 1, (lcomma-fcomma-1)); +- gp->numb[(lcomma - fcomma) - 1] = '\0'; +- +- gp->type = atoi(lcomma + 2); +- +- ptr = strrchr(payload, ','); +- fcomma = ptr + 1; +- lcomma = strchr(fcomma + 1, '"'); +- strncpy(gp->text, fcomma + 1, (lcomma - fcomma - 1)); +- gp->text[(lcomma - fcomma) - 1] = '\0'; +- +- llist_add_tail(&gp->list, &phonebook_list); +- +-#if 0 +- llist_for_each_entry(gp, &phonebook_list, list) { +- printf("%d, %s, %d, %s\n", gp->index, gp->numb, gp->type, gp->text); +- } +-#endif +- printf("%d, %s, %d, %s\n", gp->index, gp->numb, gp->type, gp->text); +- } +- else +- printf("%s\n", payload); ++ nREADRG = *num; + break; +-#endif + case GSMD_PHONEBOOK_READ: + gp = (struct gsmd_phonebook *) ((char *)gmh + sizeof(*gmh)); + if (gp->index) +@@ -115,48 +89,18 @@ + gps = (struct gsmd_phonebook_support *) ((char *)gmh + sizeof(*gmh)); + printf("(1-%d), %d, %d\n", gps->index, gps->nlength, gps->tlength); + break; +-#if 0 +- case GSMD_PHONEBOOK_LIST_STORAGE: +- payload = (char *)gmh + sizeof(*gmh); + +- if (!strncmp(payload, "+CPBS", 5)) { +- char* delim = "(,"; +- struct gsmd_phonebook_storage *cur, *cur2; +- +- /* Remove previous record */ +- if (!llist_empty(&storage_list)) { +- llist_for_each_entry_safe(cur, cur2, +- &storage_list, list) { +- llist_del(&cur->list); +- talloc_free(cur); +- } +- } +- +- ptr = strpbrk(payload, delim); +- +- while ( ptr ) { +- gpst = (struct gsmd_phonebook_storage *) malloc(sizeof(struct gsmd_phonebook_storage)); +- strncpy(gpst->storage, ptr+2, 2); +- gpst->storage[2] = '\0'; +- +- ptr = strpbrk(ptr+2, delim); +- +- llist_add_tail(&gpst->list, &storage_list); +- } ++ case GSMD_PHONEBOOK_LIST_STORAGE: ++ gpst = (struct gsmd_phonebook_storage *)((char *)gmh + sizeof(*gmh)); + +- if (llist_empty(&storage_list)) +- return 0; ++ for (i = 0; i < gpst->num; i++) { ++ printf("%s, ", gpst->mem[i].type); ++ } + +- llist_for_each_entry(cur, &storage_list, list) { +- printf("\n%s",cur->storage); +- } ++ printf("\n"); + +- printf("\n"); +- } +- else +- printf("%s\n", payload); + break; +-#endif ++ + case GSMD_PHONEBOOK_WRITE: + case GSMD_PHONEBOOK_DELETE: + case GSMD_PHONEBOOK_SET_STORAGE: +@@ -164,6 +108,26 @@ + payload = (char *)gmh + sizeof(*gmh); + printf("%s\n", payload); + break; ++ case GSMD_PHONEBOOK_RETRIEVE_READRG: ++ gp = (struct gsmd_phonebook *) ((char *)gmh + sizeof(*gmh)); ++ ++ for (i=0; i<nREADRG; i++) { ++ printf("%d,%s,%d,%s\n", gp->index, gp->numb, gp->type, gp->text); ++ gp++; ++ } ++ ++ nREADRG = 0; ++ break; ++ case GSMD_PHONEBOOK_RETRIEVE_FIND: ++ gp = (struct gsmd_phonebook *) ((char *)gmh + sizeof(*gmh)); ++ ++ for (i = 0; i < nFIND; i++) { ++ printf("%d,%s,%d,%s\n", gp->index, gp->numb, gp->type, gp->text); ++ gp++; ++ } ++ ++ nFIND = 0; ++ break; + default: + return -EINVAL; + } +@@ -381,11 +345,13 @@ + "\tpd\tPB Delete (pb=index)\n" + "\tpr\tPB Read (pr=index)\n" + "\tprr\tPB Read Range (prr=index1,index2)\n" +- "\tpf\tPB Find (pff=indtext)\n" ++ "\tpf\tPB Find (pf=indtext)\n" + "\tpw\tPB Write (pw=index,number,text)\n" + "\tps\tPB Support\n" + "\tpm\tPB Memory\n" + "\tpp\tPB Set Memory (pp=storage)\n" ++ "\tpRr\tRetrieve Readrg Records\n" ++ "\tpRf\tRetrieve Find Records\n" + "\tsd\tSMS Delete (sd=index,delflg)\n" + "\tsl\tSMS List (sl=stat)\n" + "\tsr\tSMS Read (sr=index)\n" +@@ -509,48 +475,21 @@ + printf("Delete Phonebook Entry\n"); + ptr = strchr(buf, '='); + lgsm_pb_del_entry(lgsmh, atoi(ptr+1)); +-#if 0 + } else if ( !strncmp(buf, "prr", 3)) { + printf("Read Phonebook Entries\n"); + struct lgsm_phonebook_readrg pb_readrg; +- struct gsmd_phonebook *gp_cur, *gp_cur2; +- +- /* Remove records */ +- if (!llist_empty(&phonebook_list)) { +- llist_for_each_entry_safe(gp_cur, +- gp_cur2, +- &phonebook_list, +- list) { +- llist_del(&gp_cur->list); +- talloc_free(gp_cur); +- } +- } + + ptr = strchr(buf, '='); + pb_readrg.index1 = atoi(ptr+1); + ptr = strchr(buf, ','); + pb_readrg.index2 = atoi(ptr+1); + lgsm_pb_read_entries(lgsmh, &pb_readrg); +-#endif + } else if ( !strncmp(buf, "pr", 2)) { + ptr = strchr(buf, '='); + lgsm_pb_read_entry(lgsmh, atoi(ptr+1)); +-#if 0 + } else if ( !strncmp(buf, "pf", 2)) { + printf("Find Phonebook Entry\n"); + struct lgsm_phonebook_find pb_find; +- struct gsmd_phonebook *gp_cur, *gp_cur2; +- +- /* Remove records */ +- if (!llist_empty(&phonebook_list)) { +- llist_for_each_entry_safe(gp_cur, +- gp_cur2, +- &phonebook_list, +- list) { +- llist_del(&gp_cur->list); +- talloc_free(gp_cur); +- } +- } + + ptr = strchr(buf, '='); + strncpy(pb_find.findtext, +@@ -559,7 +498,6 @@ + pb_find.findtext[strlen(ptr+1)] = '\0'; + + lgsm_pb_find_entry(lgsmh, &pb_find); +-#endif + } else if ( !strncmp(buf, "pw", 2)) { + printf("Write Phonebook Entry\n"); + struct lgsm_phonebook pb; +@@ -591,6 +529,16 @@ + } else if ( !strncmp(buf, "ps", 2)) { + printf("Get Phonebook Support\n"); + lgsm_pb_get_support(lgsmh); ++ } else if( !strncmp(buf, "pRr", 3) ) { ++ printf("Retrieve Readrg Records\n"); ++ ++ if ( nREADRG ) ++ lgsm_pb_retrieve_readrg(lgsmh, nREADRG); ++ } else if( !strncmp(buf, "pRf", 3) ) { ++ printf("Retrieve Find Records\n"); ++ ++ if ( nFIND ) ++ lgsm_pb_retrieve_find(lgsmh, nFIND); + } else if ( !strncmp(buf, "sd", 2)) { + printf("Delete SMS\n"); + struct lgsm_sms_delete sms_del; |