From f243da86ed3c515740870ce0a817f2e768b420fe Mon Sep 17 00:00:00 2001 From: laforge Date: Sun, 15 Apr 2007 09:47:23 +0000 Subject: * add (still incomplete) SMS and phonebook support from Sean Chiang git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@1765 99fdad57-331a-0410-800a-d7fa5415bdb3 --- src/libgsmd/libgsmd_phonebook.c | 146 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 src/libgsmd/libgsmd_phonebook.c (limited to 'src/libgsmd/libgsmd_phonebook.c') diff --git a/src/libgsmd/libgsmd_phonebook.c b/src/libgsmd/libgsmd_phonebook.c new file mode 100644 index 0000000..c569e02 --- /dev/null +++ b/src/libgsmd/libgsmd_phonebook.c @@ -0,0 +1,146 @@ +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "lgsm_internals.h" + +int lgsm_pb_find_entry(struct lgsm_handle *lh, + const struct lgsm_phonebook_find *pb_find) +{ + struct gsmd_msg_hdr *gmh; + struct gsmd_phonebook_find *gpf; + int rc; + + gmh = lgsm_gmh_fill(GSMD_MSG_PHONEBOOK, + GSMD_PHONEBOOK_FIND, sizeof(*gpf)); + if (!gmh) + return -ENOMEM; + gpf = (struct gsmd_phonebook_find *)gmh->data; + memcpy(gpf->findtext, pb_find->findtext, sizeof(gpf->findtext)); + gpf->findtext[sizeof(gpf->findtext)-1] = '\0'; + + rc = lgsm_send(lh, gmh); + if (rc < gmh->len + sizeof(*gmh)) { + lgsm_gmh_free(gmh);; + return -EIO; + } + + lgsm_gmh_free(gmh); + + return 0; +} + +int lgsm_pb_read_entry(struct lgsm_handle *lh, int index) +{ + struct gsmd_msg_hdr *gmh; + int rc; + + gmh = lgsm_gmh_fill(GSMD_MSG_PHONEBOOK, + GSMD_PHONEBOOK_READ, sizeof(int)); + if (!gmh) + return -ENOMEM; + *(int *) gmh->data = index; + + rc = lgsm_send(lh, gmh); + if (rc < gmh->len + sizeof(*gmh)) { + lgsm_gmh_free(gmh);; + return -EIO; + } + + lgsm_gmh_free(gmh); + + return 0; +} + +int lgsm_pb_read_entryies(struct lgsm_handle *lh, + const struct lgsm_phonebook_readrg *pb_readrg) +{ + struct gsmd_msg_hdr *gmh; + struct gsmd_phonebook_readrg *gpr; + int rc; + + gmh = lgsm_gmh_fill(GSMD_MSG_PHONEBOOK, + GSMD_PHONEBOOK_READRG, sizeof(*gpr)); + if (!gmh) + return -ENOMEM; + gpr = (struct gsmd_phonebook_readrg *) gmh->data; + gpr->index1 = pb_readrg->index1; + gpr->index2 = pb_readrg->index2; + + rc = lgsm_send(lh, gmh); + if (rc < gmh->len + sizeof(*gmh)) { + lgsm_gmh_free(gmh);; + return -EIO; + } + + lgsm_gmh_free(gmh); + + return 0; +} + +int lgsmd_pb_del_entry(struct lgsm_handle *lh, int index) +{ + struct gsmd_msg_hdr *gmh; + int rc; + + gmh = lgsm_gmh_fill(GSMD_MSG_PHONEBOOK, + GSMD_PHONEBOOK_DELETE, sizeof(int)); + if (!gmh) + return -ENOMEM; + + *(int *)(gmh->data) = index; + + rc = lgsm_send(lh, gmh); + if (rc < gmh->len + sizeof(*gmh)) { + lgsm_gmh_free(gmh); + return -EIO; + } + + lgsm_gmh_free(gmh); + + return 0; +} + +int lgsmd_pb_write_entry(struct lgsm_handle *lh, + const struct lgsm_phonebook *pb) +{ + /* FIXME: only support alphabet now */ + struct gsmd_msg_hdr *gmh; + struct gsmd_phonebook *gp; + int rc; + + gmh = lgsm_gmh_fill(GSMD_MSG_PHONEBOOK, + GSMD_PHONEBOOK_WRITE, sizeof(*gp)); + if (!gmh) + return -ENOMEM; + gp = (struct gsmd_phonebook *) gmh->data; + gp->index = pb->index; + memcpy(gp->numb, pb->numb, sizeof(gp->numb)); + gp->numb[sizeof(gp->numb)-1] = '\0'; + gp->type = pb->type; + memcpy(gp->text, pb->text, sizeof(gp->text)); + gp->text[sizeof(gp->text)-1] = '\0'; + + rc = lgsm_send(lh, gmh); + if (rc < gmh->len + sizeof(*gmh)) { + lgsm_gmh_free(gmh);; + return -EIO; + } + + lgsm_gmh_free(gmh); + + return 0; +} + + +int lgsm_pb_get_support(struct lgsm_handle *lh) +{ + return lgsm_send_simple(lh, GSMD_MSG_PHONEBOOK, GSMD_PHONEBOOK_GET_SUPPORT); +} -- cgit v1.2.3