From be174b78167bf9f2b77901b4b318606144a5ae58 Mon Sep 17 00:00:00 2001 From: laforge Date: Fri, 17 Aug 2007 08:31:21 +0000 Subject: From: Andrzej Zaborowski Date: Fri, 27 Jul 2007 19:39:15 +0200 Subject: [PATCH] Cell Broadcast message decoding and presentation in libgsmd-tool. This time Cell Broadcast is tested to work, I should have made tests earlier. Now I'm correctly getting a CB message with the human readable name of the city and district when I'm connecting. In the previous patches the CB PDU was not being decoded at all. git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@2723 99fdad57-331a-0410-800a-d7fa5415bdb3 --- include/gsmd/sms.h | 5 ++++- include/gsmd/usock.h | 42 ++++++++++++++++++++++++++++++++++++++++++ include/libgsmd/sms.h | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/gsmd/sms.h b/include/gsmd/sms.h index b48ce5d..c5ee0d8 100644 --- a/include/gsmd/sms.h +++ b/include/gsmd/sms.h @@ -8,10 +8,13 @@ int sms_cb_init(struct gsmd *gsmd); int sms_cb_network_init(struct gsmd *gsmd); -#define MAX_PDU_SIZE 180 +#define SMS_MAX_PDU_SIZE 180 +#define CBM_MAX_PDU_SIZE 88 +#define CBM_MAX_PDU_PAGES 15 int sms_pdu_make_smssubmit(char *dest, const struct gsmd_sms_submit *src); int sms_pdu_to_msg(struct gsmd_sms_list *dst, const u_int8_t *src, int pdulen, int len); +int cbs_pdu_to_msg(struct gsmd_cbm *dst, u_int8_t *src, int pdulen, int len); int usock_rcv_sms(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, int len); int usock_rcv_cb(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, int len); diff --git a/include/gsmd/usock.h b/include/gsmd/usock.h index 18ffa5e..ce5c25e 100644 --- a/include/gsmd/usock.h +++ b/include/gsmd/usock.h @@ -365,6 +365,48 @@ struct gsmd_sms_storage { struct __gsmd_sms_storage mem[3]; } __attribute__ ((packed)); +/* Refer to GSM 03.41 subclause 9.3.1 - note: this indicates display mode too */ +enum gsmd_geographical_scope { + GSMD_SCOPE_CELL_WIDE_OPER = 0, + GSMD_SCOPE_PLMN_WIDE, + GSMD_SCOPE_LOC_AREA_WIDE, + GSMD_SCOPE_CELL_WIDE, +}; + +enum gsmd_language { + GSMD_LANG_GERMAN = 0, + GSMD_LANG_ENGLISH, + GSMD_LANG_ITALIAN, + GSMD_LANG_FRENCH, + GSMD_LANG_SPANISH, + GSMD_LANG_DUTCH, + GSMD_LANG_SWEDISH, + GSMD_LANG_DANISH, + GSMD_LANG_PORTUGUESE, + GSMD_LANG_FINNISH, + GSMD_LANG_NORWEGIAN, + GSMD_LANG_GREEK, + GSMD_LANG_TURKISH, + GSMD_LANG_HUNGARIAN, + GSMD_LANG_POLISH, + GSMD_LANG_UNSPECIFIED, +}; + +/* Refer to GSM 03.41 subclause 9.3 */ +struct gsmd_cbm { + struct { + enum gsmd_geographical_scope scope; + int msg_code; + int update_num; + } serial; + u_int16_t msg_id; + enum gsmd_language language; + u_int8_t coding_scheme; + int pages; + int page; + u_int8_t data[82]; +}; + /* Refer to GSM 07.07 subclause 8.12 */ struct gsmd_phonebook_readrg { u_int8_t index1; diff --git a/include/libgsmd/sms.h b/include/libgsmd/sms.h index 69363e7..3ada62d 100644 --- a/include/libgsmd/sms.h +++ b/include/libgsmd/sms.h @@ -90,6 +90,7 @@ extern int packing_7bit_character(const char *src, struct lgsm_sms *dest); /* Packing of 7-bit characters, refer to GSM 03.38 subclause 6.1.2.1.1 */ extern int unpacking_7bit_character(const struct gsmd_sms *src, char *dest); +extern int cbm_unpacking_7bit_character(const char *src, char *dest); /* Refer to 3GPP TS 11.11 Annex B */ extern int packing_UCS2_80(char *src, char *dest); -- cgit v1.2.3