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 --- include/libgsmd/libgsmd.h | 1 + include/libgsmd/misc.h | 4 +- include/libgsmd/phonebook.h | 52 ++++++++++++++++++++ include/libgsmd/sms.h | 114 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 include/libgsmd/sms.h (limited to 'include/libgsmd') diff --git a/include/libgsmd/libgsmd.h b/include/libgsmd/libgsmd.h index 8c34c6a..fc56890 100644 --- a/include/libgsmd/libgsmd.h +++ b/include/libgsmd/libgsmd.h @@ -65,5 +65,6 @@ extern int lgsm_subscriptions(struct lgsm_handle *lh, u_int32_t subscriptions); extern struct gsmd_msg_hdr *lgsm_gmh_fill(int type, int subtype, int payload_len); extern int lgsm_send(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh); +extern int lgsm_handle_packet(struct lgsm_handle *lh, char *buf, int len); #endif diff --git a/include/libgsmd/misc.h b/include/libgsmd/misc.h index 95e219d..cbc2df0 100644 --- a/include/libgsmd/misc.h +++ b/include/libgsmd/misc.h @@ -1,5 +1,5 @@ -#ifndef _LIBGSMD_H -#define _LIBGSMD_H +#ifndef _LIBGSMD_MISC_H +#define _LIBGSMD_MISC_H /* libgsmd.h - Library API for gsmd, the GSM Daemon * (C) 2006 by Harald Welte diff --git a/include/libgsmd/phonebook.h b/include/libgsmd/phonebook.h index 92c3a7f..a08d891 100644 --- a/include/libgsmd/phonebook.h +++ b/include/libgsmd/phonebook.h @@ -20,6 +20,36 @@ enum lgsm_pbook_type { LGSM_PB_TA_PHONEBOOK = 11, }; +/* Refer to GSM 07.07 subclause 8.14 */ +enum lgsm_pb_addr_type { + LGSM_PB_ATYPE_INTL = 145, + LGSM_PB_ATYPE_OTHE = 129, +}; + +/* Refer to GSM 07.07 subclause 8.12 */ +struct lgsm_phonebook_readrg { + int index1; + int index2; +}; + +/* Refer to GSM 07.07 subclause 8.14 */ +/* FIXME: the nlength and tlength depend on SIM, use +CPBR=? to get */ +#define LGSM_PB_NUMB_MAXLEN 44 +#define LGSM_PB_TEXT_MAXLEN 14 +struct lgsm_phonebook { + int index; + char numb[LGSM_PB_NUMB_MAXLEN+1]; + enum lgsm_pb_addr_type type; + char text[LGSM_PB_TEXT_MAXLEN+1]; +}; + +/* Refer to GSM 07.07 subclause 8.13 */ +/* FIXME: the tlength depends on SIM, use +CPBR=? to get */ +struct lgsm_phonebook_find { + char findtext[LGSM_PB_TEXT_MAXLEN+1]; +}; + +#if 0 /* Get a bitmask of supported phonebook types */ extern int lgsm_pb_get_types(struct lgsm_handle *lh, u_int32 *typemask); @@ -30,6 +60,7 @@ extern int lgsm_pb_get_range(struct lgsm_handle *lh, u_int32_t *nlength, *u_int32_t tlength); #define LGSM_PB_TEXT_MAXLEN 31 +#endif struct lgsm_pb_entry { struct lgsm_pb_entry *next; @@ -47,5 +78,26 @@ extern int lgsm_pb_get_entry(struct lgsm_handle *lh, extern int lgsm_pb_set_entry(struct lgsm_handle *lh, struct lgsm_pb_entry *pb); +/* Find phonebook entires which alphanumeric filed start + * with string */ +extern int lgsm_pb_find_entry(struct lgsm_handle *lh, + const struct lgsm_phonebook_find *pb_find); + +/* Read phonebook entry in location number index */ +extern int lgsm_pb_read_entry(struct lgsm_handle *lh, int index); + +/* Read phonebook entries in location number range */ +extern int lgsm_pb_read_entryies(struct lgsm_handle *lh, + const struct lgsm_phonebook_readrg *pb_readrg); + +/* Delete phonebook entry in location index */ +extern int lgsmd_pb_del_entry(struct lgsm_handle *lh, int index); + +/* Write phonebook entry in location */ +extern int lgsmd_pb_write_entry(struct lgsm_handle *lh, + const struct lgsm_phonebook *pb); + +/* Get the location range/nlength/tlength supported */ +extern int lgsm_pb_get_support(struct lgsm_handle *lh); #endif diff --git a/include/libgsmd/sms.h b/include/libgsmd/sms.h new file mode 100644 index 0000000..a07fc74 --- /dev/null +++ b/include/libgsmd/sms.h @@ -0,0 +1,114 @@ +#ifndef _LIBGSMD_SMS_H +#define _LIBGSMD_SMS_H + +#include + +/* Short Message Service */ + +/* Data Coding Scheme, refer to GSM 03.38 Clause 4 */ +#define B5_COMPRESSED (1<<5) +#define B4_CLASSMEANING (1<<4) +enum { + MESSAGE_CLASS_CLASS0 = 0x00, + MESSAGE_CLASS_CLASS1 = 0x01, + MESSAGE_CLASS_CLASS2 = 0x10, + MESSAGE_CLASS_CLASS3 = 0x11, +}; + +enum { + ALPHABET_DEFAULT = (0x00<<2), + ALPHABET_8BIT = (0x01<<2), + ALPHABET_UCS2 = (0x10<<2), + ALPHABET_RESERVED = (0x11<<2), +}; + +/* Coding of Alpha fields in the SIM for UCS2, (3GPP TS 11.11 Annex B) */ +//enum { + +//}; + + +/* SMS delflg from 3GPP TS 07.05, Clause 3.5.4 */ +enum lgsm_msg_sms_delflg { + LGSM_SMS_DELFLG_INDEX = 0, + LGSM_SMS_DELFLG_READ = 1, + LGSM_SMS_DELFLG_READ_SENT = 2, + LGSM_SMS_DELFLG_LEAVING_UNREAD = 3, + LGSM_SMS_DELFLG_ALL = 4, +}; + +/* SMS stat from 3GPP TS 07.05, Clause 3.1 */ +/* FIXME: only support PDU mode */ +enum lgsm_msg_sms_stat { + LGSM_SMS_REC_UNREAD = 0, + LGSM_SMS_REC_READ = 1, + LGSM_SMS_STO_UNSENT = 2, + LGSM_SMS_STO_SENT = 3, + LGSM_SMS_ALL = 4, +}; + +/* Refer to GSM 07.05 subclause 3.5.4 */ +struct lgsm_sms_delete { + int index; + enum lgsm_msg_sms_delflg delflg; +}; + +/* Refer to GSM 03.40 subclause 9.2.2.2 */ +#define LGSM_SMS_ADDR_MAXLEN 12 +#define LGSM_SMS_DATA_MAXLEN 140 +struct lgsm_sms { + /* FIXME: max length of data, + * 7 bit coding - 160(140*8/7); ucs2 coding - 70(140/2) */ + char addr[LGSM_SMS_ADDR_MAXLEN+1]; + char data[LGSM_SMS_DATA_MAXLEN+1]; +}; + +/* GSM 03.40 subclause 9.2.2.2 and GSM 07.05 subclause 4.4 and subclause 3.1 */ +struct lgsm_sms_write { + enum lgsm_msg_sms_stat stat; + struct lgsm_sms sms; +}; + +/* List Messages */ +extern int lgsm_sms_list(struct lgsm_handle *lh, enum gsmd_msg_sms_type stat); + +/* Read Message */ +extern int lgsm_sms_read(struct lgsm_handle *lh, int index); + +/* Delete Message */ +extern int lgsmd_sms_delete(struct lgsm_handle *lh, + const struct lgsm_sms_delete *sms_del); + +/* Send Message */ +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, + const struct lgsm_sms_write *sms_write); + +/* Packing of 7-bit characters, refer to GSM 03.38 subclause 6.1.2.1.1 */ +extern int packing_7bit_character(char *src, char *dest); + +/* Packing of 7-bit characters, refer to GSM 03.38 subclause 6.1.2.1.1 */ +extern int unpacking_7bit_character(char *src, char *dest); + +/* Refer to 3GPP TS 11.11 Annex B */ +extern int packing_UCS2_80(char *src, char *dest); + +/* Refer to 3GPP TS 11.11 Annex B */ +extern int unpacking_UCS2_80(char *src, char *dest); + +/* Refer to 3GPP TS 11.11 Annex B */ +extern int packing_UCS2_81(char *src, char *dest); + +/* Refer to 3GPP TS 11.11 Annex B */ +extern int unpacking_UCS2_81(char *src, char *dest); + +/* Refer to 3GPP TS 11.11 Annex B */ +extern int packing_UCS2_82(char *src, char *dest); + +/* Refer to 3GPP TS 11.11 Annex B */ +extern int unpacking_UCS2_82(char *src, char *dest); + +#endif + -- cgit v1.2.3