FreeCalypso > hg > freecalypso-tools
changeset 335:097ce8431d11
uptools/libcoding: SMS DCS decoding implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 04 Feb 2018 00:43:14 +0000 |
parents | f40530e2d48d |
children | ead4ee22ef62 |
files | uptools/libcoding/Makefile uptools/libcoding/grokdcs.c |
diffstat | 2 files changed, 49 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/uptools/libcoding/Makefile Sun Feb 04 00:01:37 2018 +0000 +++ b/uptools/libcoding/Makefile Sun Feb 04 00:43:14 2018 +0000 @@ -1,8 +1,8 @@ CC= gcc CFLAGS= -O2 -OBJS= alpha_addr.o decode_helpers.o gsm7_decode.o gsm7_decode_tables.o \ - gsm7_unpack.o gsmtime.o hexdecode.o number_decode.o scaddr.o \ - ucs2_decode.o +OBJS= alpha_addr.o decode_helpers.o grokdcs.o gsm7_decode.o \ + gsm7_decode_tables.o gsm7_unpack.o gsmtime.o hexdecode.o \ + number_decode.o scaddr.o ucs2_decode.o LIB= libcoding.a all: ${LIB}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uptools/libcoding/grokdcs.c Sun Feb 04 00:43:14 2018 +0000 @@ -0,0 +1,46 @@ +/* + * This library module implements the function that distills the complex + * set of possible SMS DCS octet values to just one of 4 possibilities: + * 7-bit text (7), 8-bit data octets (8), UCS-2 text (16) or compressed + * data (9). + * + * The decoding is based on the 3GPP TS 23.038 V11.0.0 spec; + * reserved encodings are treated as 7-bit text as the spec instructs. + */ + +sms_dcs_classify(dcs) +{ + if (!(dcs & 0x80)) { + if (dcs & 0x20) + return(9); + switch (dcs & 0xC) { + case 0: + return(7); + case 4: + return(8); + case 8: + return(16); + default: + /* reserved, treating as 7-bit per the spec */ + return(7); + } + } + switch (dcs & 0xF0) { + case 0x80: + case 0x90: + case 0xA0: + case 0xB0: + /* reserved, treating as 7-bit per the spec */ + return(7); + case 0xC0: + case 0xD0: + return(7); + case 0xE0: + return(16); + case 0xF0: + if (dcs & 4) + return(8); + else + return(7); + } +}