summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorjserv <jserv@99fdad57-331a-0410-800a-d7fa5415bdb3>2007-10-17 06:20:14 +0000
committerjserv <jserv@99fdad57-331a-0410-800a-d7fa5415bdb3>2007-10-17 06:20:14 +0000
commitb4818eb1c880981b4e5956c726864ab9ee6761ee (patch)
tree67696160f5b6d6e593c47446401db7f9de8d10ec /src/util
parent5e988040575d346c4ca41061248e72d676467ed0 (diff)
Improvement for finding / reading phonebook records in shell.
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. git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@3203 99fdad57-331a-0410-800a-d7fa5415bdb3
Diffstat (limited to 'src/util')
-rw-r--r--src/util/shell.c156
1 files changed, 52 insertions, 104 deletions
diff --git a/src/util/shell.c b/src/util/shell.c
index 04076be..922b64e 100644
--- a/src/util/shell.c
+++ b/src/util/shell.c
@@ -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 @@ static int pb_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh)
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:
- case GSMD_PHONEBOOK_READRG:
- payload = (char *)gmh + sizeof(*gmh);
-
- 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';
+ num = (int *) ((char *)gmh + sizeof(*gmh));
+ printf("Records:%d\n", *num);
- 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);
+ nFIND = *num;
+ break;
+ case GSMD_PHONEBOOK_READRG:
+ num = (int *) ((char *)gmh + sizeof(*gmh));
+ printf("Records:%d\n", *num);
-#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 @@ static int pb_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh)
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 @@ static int pb_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh)
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 @@ static int shell_help(void)
"\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 @@ int shell_main(struct lgsm_handle *lgsmh)
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 @@ int shell_main(struct lgsm_handle *lgsmh)
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 @@ int shell_main(struct lgsm_handle *lgsmh)
} 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;
personal git repositories of Harald Welte. Your mileage may vary