From 4c3ae72b367ed827df7d746fd34493e4addea151 Mon Sep 17 00:00:00 2001 From: Andrzej Zaborowski Date: Wed, 5 Aug 2009 09:08:40 +0200 Subject: Add encode_bcd_number utility function --- src/smsutil.c | 11 +++++++++++ src/smsutil.h | 1 + 2 files changed, 12 insertions(+) (limited to 'src') diff --git a/src/smsutil.c b/src/smsutil.c index ad38ed98..1eb4e3c8 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -110,6 +110,17 @@ static inline int to_semi_oct(char in) return digit; } +void encode_bcd_number(const char *number, unsigned char *out) +{ + while (number[0] != '\0' && number[1] != '\0') { + *out = to_semi_oct(*number++); + *out++ |= to_semi_oct(*number++) << 4; + } + + if (*number) + *out = to_semi_oct(*number) | 0xf0; +} + /* Returns whether the DCS could be parsed successfully, e.g. no reserved * values were used */ diff --git a/src/smsutil.h b/src/smsutil.h index d362aa98..4a392665 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -401,6 +401,7 @@ static inline unsigned char bit_field(unsigned char oct, int start, int num) } void extract_bcd_number(const unsigned char *buf, int len, char *out); +void encode_bcd_number(const char *number, unsigned char *out); gboolean sms_decode(const unsigned char *pdu, int len, gboolean outgoing, int tpdu_len, struct sms *out); -- cgit v1.2.3