fixeria has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmocore/+/33911 )

Change subject: gsm_08_08: define GSM0808_SCT_EXT (separately)
......................................................................

gsm_08_08: define GSM0808_SCT_EXT (separately)

As per 3GPP TS 48.008, section 3.2.2.103, the "Codec Type" field may
contain either a certain 3GPP Speech Codec Type directly (4 bit value),
or the so called "Codec Extension" = 0xFh, in which case the real Codec
Type follows in the next octet as "Extended Codec Type".

CSD is such an example, the encoding is defined as follows:

     8    7    6    5    4    3    2    1
  +----+----+----+----+-------------------+
  | -- | PI | PT | -- |        0xFh       |
  +----+----+----+----+-------------------+
  |      Extended Codec Type (CSData)     |
  +----+----+-----------------------------+
  | R2 | R3 |                             |
  +----+----+-----------------------------+

  CSData is coded with 0xFDh or '1111 1101' (0xfd).

Let's have the "Codec Extension" value clearly defined in the header
file, but intentionally separate from the other GSM0808_SCT_* values.

Change-Id: Iafaa25070684d2ba400c75fa33e803651a5ce857
Related: OS#6110, OS#4393, OS#4394
---
M include/osmocom/gsm/protocol/gsm_08_08.h
M src/gsm/gsm0808.c
M src/gsm/gsm0808_utils.c
3 files changed, 41 insertions(+), 3 deletions(-)

Approvals:
  Jenkins Builder: Verified
  osmith: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved




diff --git a/include/osmocom/gsm/protocol/gsm_08_08.h 
b/include/osmocom/gsm/protocol/gsm_08_08.h
index 967e4fe..1e211dc 100644
--- a/include/osmocom/gsm/protocol/gsm_08_08.h
+++ b/include/osmocom/gsm/protocol/gsm_08_08.h
@@ -557,6 +557,12 @@
        GSM0808_SCT_CSD = 0xfd, /*!< CSData (see also TS 26.103) */
 };

+/* Codec Extension (the real Codec Type follows in the next octet).
+ * This value is intentionally not included in gsm0808_speech_codec_type,
+ * because {enc,dec}_speech_codec() functions take care of the extended
+ * encoding internally.  It shall not be used in struct gsm0808_speech_codec. 
*/
+#define GSM0808_SCT_EXT        0x0f
+
 extern const struct value_string gsm0808_speech_codec_type_names[];
 static inline const char *gsm0808_speech_codec_type_name(enum 
gsm0808_speech_codec_type val)
 { return get_value_string(gsm0808_speech_codec_type_names, val); }
diff --git a/src/gsm/gsm0808.c b/src/gsm/gsm0808.c
index d115888..6ba6ef2 100644
--- a/src/gsm/gsm0808.c
+++ b/src/gsm/gsm0808.c
@@ -2478,6 +2478,7 @@
        { GSM0808_SCT_HR3, "HR3" },
        { GSM0808_SCT_HR4, "HR4" },
        { GSM0808_SCT_HR6, "HR6" },
+       { GSM0808_SCT_EXT, "Codec Extension" },
        { GSM0808_SCT_CSD, "CSD" },
        { 0, NULL }
 };
diff --git a/src/gsm/gsm0808_utils.c b/src/gsm/gsm0808_utils.c
index b8e1ff0..778630d 100644
--- a/src/gsm/gsm0808_utils.c
+++ b/src/gsm/gsm0808_utils.c
@@ -255,7 +255,7 @@
                header |= (1 << 4);

        if (type_extended) {
-               header |= 0x0f;
+               header |= GSM0808_SCT_EXT;
                msgb_put_u8(msg, header);
                msgb_put_u8(msg, sc->type);
        } else {
@@ -347,7 +347,7 @@

        /* An extended codec type needs at least two fields,
         * bail if the input data length is not sufficient. */
-       if ((header & 0x0F) == 0x0F && len < 2)
+       if ((header & 0x0F) == GSM0808_SCT_EXT && len < 2)
                return -EINVAL;

        elem++;
@@ -362,7 +362,7 @@
        if (header & (1 << 4))
                sc->tf = true;

-       if ((header & 0x0F) != 0x0F) {
+       if ((header & 0x0F) != GSM0808_SCT_EXT) {
                sc->type = (header & 0x0F);
        } else {
                sc->type = *elem;

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/33911
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Iafaa25070684d2ba400c75fa33e803651a5ce857
Gerrit-Change-Number: 33911
Gerrit-PatchSet: 3
Gerrit-Owner: fixeria <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to