From aa934630530af05a84b62b204ce4da7688c5e3ad Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 7 Nov 2018 13:16:54 +0100 Subject: Update 3GPP TS 08.08 Cause handling * add Class definitions * add helper to check for extended bit * add helper to get Cause's Class * use enum in gsm0808_cause_name() and gsm0808_create_cipher_reject() to avoid confusion between class and cause * update gsm0808_create_cipher_reject() comments Change-Id: I31b31dfc22eb4b6b07089e1255246ac458125340 Related: OS#3187 --- include/osmocom/gsm/gsm0808_utils.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'include/osmocom/gsm/gsm0808_utils.h') diff --git a/include/osmocom/gsm/gsm0808_utils.h b/include/osmocom/gsm/gsm0808_utils.h index f70dbdb6..b56e2635 100644 --- a/include/osmocom/gsm/gsm0808_utils.h +++ b/include/osmocom/gsm/gsm0808_utils.h @@ -107,7 +107,20 @@ int gsm0808_speech_codec_from_chan_type(struct gsm0808_speech_codec *sc, uint16_t gsm0808_sc_cfg_from_gsm48_mr_cfg(const struct gsm48_multi_rate_conf *cfg, bool fr); void gsm48_mr_cfg_from_gsm0808_sc_cfg(struct gsm48_multi_rate_conf *cfg, uint16_t s15_s0); -/*! Return 3GPP TS 48.008 3.2.2.49 Current Channel Type 1 from enum gsm_chan_t. */ +/*! \returns 3GPP TS 08.08 §3.2.2.5 Class of a given Cause */ +static inline enum gsm0808_cause_class gsm0808_cause_class(enum gsm0808_cause cause) +{ + return (cause << 1) >> 4; +} + +/*! \returns true if 3GPP TS 08.08 §3.2.2.5 Class has extended bit set */ +static inline bool gsm0808_cause_ext(enum gsm0808_cause cause) +{ + /* check that cause looks like 1XXX0000 where XXX represent class */ + return (cause & 0x80) && !(cause & 0x0F); +} + +/*! \returns 3GPP TS 48.008 3.2.2.49 Current Channel Type 1 from enum gsm_chan_t. */ static inline uint8_t gsm0808_current_channel_type_1(enum gsm_chan_t type) { switch (type) { -- cgit v1.2.3