summaryrefslogtreecommitdiff
path: root/src/gsmd/sms_pdu.c
diff options
context:
space:
mode:
authorlaforge <laforge@99fdad57-331a-0410-800a-d7fa5415bdb3>2007-08-17 08:31:21 +0000
committerlaforge <laforge@99fdad57-331a-0410-800a-d7fa5415bdb3>2007-08-17 08:31:21 +0000
commitbe174b78167bf9f2b77901b4b318606144a5ae58 (patch)
treeb3f517006fd9772f088c989eff7f5513bf100743 /src/gsmd/sms_pdu.c
parent90bf3b4473da30d8b89c8ecfabcce42c0e4fe484 (diff)
From: Andrzej Zaborowski <balrog@zabor.org>
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
Diffstat (limited to 'src/gsmd/sms_pdu.c')
-rw-r--r--src/gsmd/sms_pdu.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/gsmd/sms_pdu.c b/src/gsmd/sms_pdu.c
index c9b9327..665fdcb 100644
--- a/src/gsmd/sms_pdu.c
+++ b/src/gsmd/sms_pdu.c
@@ -26,6 +26,7 @@
#include <gsmd/gsmd.h>
#include <gsmd/usock.h>
+#include <gsmd/sms.h>
static int sms_number_bytelen(u_int8_t type, u_int8_t len)
{
@@ -50,7 +51,7 @@ static int sms_data_bytelen(u_int8_t data_coding_scheme, u_int8_t len)
return 0;
}
-static int sms_address2ascii(struct gsmd_addr *dst, u_int8_t *src)
+static int sms_address2ascii(struct gsmd_addr *dst, const u_int8_t *src)
{
int i;
@@ -80,7 +81,7 @@ static int sms_address2ascii(struct gsmd_addr *dst, u_int8_t *src)
}
int sms_pdu_to_msg(struct gsmd_sms_list *dst,
- u_int8_t *src, int pdulen, int len)
+ const u_int8_t *src, int pdulen, int len)
{
int i, vpf;
if (len < 1 || len < 1 + src[0] + pdulen || pdulen < 1)
@@ -200,7 +201,7 @@ int sms_pdu_to_msg(struct gsmd_sms_list *dst,
}
/* Refer to GSM 03.40 subclause 9.2.3.3, for SMS-SUBMIT */
-int sms_pdu_make_smssubmit(char *dest, struct gsmd_sms_submit *src)
+int sms_pdu_make_smssubmit(char *dest, const struct gsmd_sms_submit *src)
{
/* FIXME: ALPHANUMERIC encoded addresses can be longer than 13B */
u_int8_t header[15 + GSMD_ADDR_MAXLEN];
@@ -259,3 +260,25 @@ int sms_pdu_make_smssubmit(char *dest, struct gsmd_sms_submit *src)
return pos + len;
}
+
+/* Refer to GSM 03.41 subclause 9.3 */
+int cbs_pdu_to_msg(struct gsmd_cbm *dst, u_int8_t *src, int pdulen, int len)
+{
+ if (len != pdulen || len != CBM_MAX_PDU_SIZE)
+ return 1;
+
+ dst->serial.scope = (src[0] >> 6) & 3;
+ dst->serial.msg_code = ((src[0] << 4) | (src[1] >> 4)) & 0x3ff;
+ dst->serial.update_num = src[1] & 0xf;
+
+ dst->msg_id = (src[2] << 8) | src[3];
+
+ dst->language = src[4] & 0xf;
+ dst->coding_scheme = ((src[4] >> 4) & 3) << 2;
+
+ dst->pages = src[5] & 0xf;
+ dst->page = src[5] >> 4;
+
+ memcpy(dst->data, src + 6, len - 6);
+ return 0;
+}
personal git repositories of Harald Welte. Your mileage may vary