# HG changeset patch # User Mychaela Falconia # Date 1517704994 0 # Node ID 097ce8431d11b30fb968fb291d57eb51884d8d06 # Parent f40530e2d48de0e85e4b1b2da7d0914c34597e66 uptools/libcoding: SMS DCS decoding implemented diff -r f40530e2d48d -r 097ce8431d11 uptools/libcoding/Makefile --- 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} diff -r f40530e2d48d -r 097ce8431d11 uptools/libcoding/grokdcs.c --- /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); + } +}