fixeria has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmocom-bb/+/34912?usp=email )


Change subject: mobile: clarify TCH I/O {handler,format} naming
......................................................................

mobile: clarify TCH I/O {handler,format} naming

Before we add handling of TCH I/O for data calls, let's rename the
existing voice related symbols, fields, and the VTY commands to
have 'voice' in their names.  Add backward compatibility aliases.

Change-Id: If6c799d11e225ad00ca5da5ae63dca20568a0ce0
Related: OS#4396
---
M src/host/layer23/include/osmocom/bb/common/settings.h
M src/host/layer23/src/common/settings.c
M src/host/layer23/src/mobile/gapk_io.c
M src/host/layer23/src/mobile/gsm48_rr.c
M src/host/layer23/src/mobile/voice.c
M src/host/layer23/src/mobile/vty_interface.c
6 files changed, 128 insertions(+), 91 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/12/34912/1

diff --git a/src/host/layer23/include/osmocom/bb/common/settings.h 
b/src/host/layer23/include/osmocom/bb/common/settings.h
index e56e201..aeb4abd 100644
--- a/src/host/layer23/include/osmocom/bb/common/settings.h
+++ b/src/host/layer23/include/osmocom/bb/common/settings.h
@@ -26,39 +26,39 @@
        MNCC_HANDLER_DUMMY,
 };

-/* TCH frame I/O handler */
-enum audio_io_handler {
+/* TCH I/O handler for voice calls */
+enum tch_voice_io_handler {
        /* No handler, drop frames */
-       AUDIO_IOH_NONE = 0,
+       TCH_VOICE_IOH_NONE = 0,
        /* libosmo-gapk based handler */
-       AUDIO_IOH_GAPK,
+       TCH_VOICE_IOH_GAPK,
        /* L1 PHY (e.g. Calypso DSP) */
-       AUDIO_IOH_L1PHY,
+       TCH_VOICE_IOH_L1PHY,
        /* External MNCC app (via MNCC socket) */
-       AUDIO_IOH_MNCC_SOCK,
+       TCH_VOICE_IOH_MNCC_SOCK,
        /* Return to sender */
-       AUDIO_IOH_LOOPBACK,
+       TCH_VOICE_IOH_LOOPBACK,
 };

-extern const struct value_string audio_io_handler_names[];
-static inline const char *audio_io_handler_name(enum audio_io_handler val)
-{ return get_value_string(audio_io_handler_names, val); }
+extern const struct value_string tch_voice_io_handler_names[];
+static inline const char *tch_voice_io_handler_name(enum tch_voice_io_handler 
val)
+{ return get_value_string(tch_voice_io_handler_names, val); }

-/* TCH frame I/O format */
-enum audio_io_format {
-       /* RTP format (RFC3551 for FR/EFR, RFC5993 for HR, RFC4867 for AMR) */
-       AUDIO_IOF_RTP,
+/* TCH I/O frame format */
+enum tch_io_frame_format {
+       /* RFC3551 for FR/EFR, RFC5993 for HR, RFC4867 for AMR, packed bits for 
data */
+       TCH_IOFF_RTP,
        /* Texas Instruments format, used by Calypso based phones (e.g. 
Motorola C1xx) */
-       AUDIO_IOF_TI,
+       TCH_IOFF_TI,
 };

-extern const struct value_string audio_io_format_names[];
-static inline const char *audio_io_format_name(enum audio_io_format val)
-{ return get_value_string(audio_io_format_names, val); }
+extern const struct value_string tch_io_frame_format_names[];
+static inline const char *tch_io_frame_format_name(enum tch_io_frame_format 
val)
+{ return get_value_string(tch_io_frame_format_names, val); }

-struct audio_settings {
-       enum audio_io_handler   io_handler;
-       enum audio_io_format    io_format;
+struct tch_settings {
+       enum tch_voice_io_handler voice_handler;
+       enum tch_io_frame_format frame_format;
        char alsa_output_dev[128];
        char alsa_input_dev[128];
 };
@@ -119,8 +119,8 @@
        /* MNCC handler */
        enum mncc_handler_t     mncc_handler;

-       /* Audio settings */
-       struct audio_settings   audio;
+       /* TCH settings */
+       struct tch_settings     tch;

        /* IMEI */
        char                    imei[GSM23003_IMEI_NUM_DIGITS + 1];
diff --git a/src/host/layer23/src/common/settings.c 
b/src/host/layer23/src/common/settings.c
index 5bae325..6caaa00 100644
--- a/src/host/layer23/src/common/settings.c
+++ b/src/host/layer23/src/common/settings.c
@@ -48,10 +48,10 @@
        snprintf(set->mncc_socket_path, sizeof(set->mncc_socket_path) - 1,
                 "%s_%s", mncc_socket_path, ms->name);

-       /* Audio settings: drop TCH frames by default */
-       set->audio.io_handler = AUDIO_IOH_NONE;
-       OSMO_STRLCPY_ARRAY(set->audio.alsa_output_dev, alsa_dev_default);
-       OSMO_STRLCPY_ARRAY(set->audio.alsa_input_dev, alsa_dev_default);
+       /* TCH voice: drop frames by default */
+       set->tch.voice_handler = TCH_VOICE_IOH_NONE;
+       OSMO_STRLCPY_ARRAY(set->tch.alsa_output_dev, alsa_dev_default);
+       OSMO_STRLCPY_ARRAY(set->tch.alsa_input_dev, alsa_dev_default);

        /* Built-in MNCC handler */
        set->mncc_handler = MNCC_HANDLER_INTERNAL;
@@ -226,18 +226,18 @@
        return 0;
 }

-const struct value_string audio_io_handler_names[] = {
-       { AUDIO_IOH_NONE,       "none" },
-       { AUDIO_IOH_GAPK,       "gapk" },
-       { AUDIO_IOH_L1PHY,      "l1phy" },
-       { AUDIO_IOH_MNCC_SOCK,  "mncc-sock" },
-       { AUDIO_IOH_LOOPBACK,   "loopback" },
+const struct value_string tch_voice_io_handler_names[] = {
+       { TCH_VOICE_IOH_NONE,           "none" },
+       { TCH_VOICE_IOH_GAPK,           "gapk" },
+       { TCH_VOICE_IOH_L1PHY,          "l1phy" },
+       { TCH_VOICE_IOH_MNCC_SOCK,      "mncc-sock" },
+       { TCH_VOICE_IOH_LOOPBACK,       "loopback" },
        { 0, NULL }
 };
 
-const struct value_string audio_io_format_names[] = {
-       { AUDIO_IOF_RTP,        "rtp" },
-       { AUDIO_IOF_TI,         "ti" },
+const struct value_string tch_io_frame_format_names[] = {
+       { TCH_IOFF_RTP,                 "rtp" },
+       { TCH_IOFF_TI,                  "ti" },
        { 0, NULL }
 };

diff --git a/src/host/layer23/src/mobile/gapk_io.c 
b/src/host/layer23/src/mobile/gapk_io.c
index a2a4e84..e86d625 100644
--- a/src/host/layer23/src/mobile/gapk_io.c
+++ b/src/host/layer23/src/mobile/gapk_io.c
@@ -409,16 +409,16 @@
                return -ENOTSUP;
        }

-       switch (set->audio.io_format) {
-       case AUDIO_IOF_RTP:
+       switch (set->tch.frame_format) {
+       case TCH_IOFF_RTP:
                phy_fmt = phy_fmt_pick_rtp(codec);
                break;
-       case AUDIO_IOF_TI:
+       case TCH_IOFF_TI:
                phy_fmt = phy_fmt_pick_ti(codec);
                break;
        default:
                LOGP(DGAPK, LOGL_ERROR, "Unhandled I/O format %s\n",
-                    audio_io_format_name(set->audio.io_format));
+                    tch_io_frame_format_name(set->tch.frame_format));
                return -ENOTSUP;
        }

@@ -447,8 +447,8 @@
        osmo_gapk_set_talloc_ctx(gapk_io);

        /* Prepare both source and sink chains */
-       rc |= prepare_audio_source(gapk_io, set->audio.alsa_input_dev);
-       rc |= prepare_audio_sink(gapk_io, set->audio.alsa_output_dev);
+       rc |= prepare_audio_source(gapk_io, set->tch.alsa_input_dev);
+       rc |= prepare_audio_sink(gapk_io, set->tch.alsa_output_dev);

        /* Fall back to ms instance */
        osmo_gapk_set_talloc_ctx(ms);
diff --git a/src/host/layer23/src/mobile/gsm48_rr.c 
b/src/host/layer23/src/mobile/gsm48_rr.c
index 68670b7..b4eac3c 100644
--- a/src/host/layer23/src/mobile/gsm48_rr.c
+++ b/src/host/layer23/src/mobile/gsm48_rr.c
@@ -4434,7 +4434,7 @@

 #ifdef WITH_GAPK_IO
        /* Poke GAPK audio back-end, if it is chosen */
-       if (ms->settings.audio.io_handler == AUDIO_IOH_GAPK) {
+       if (ms->settings.tch.voice_handler == TCH_VOICE_IOH_GAPK) {
                int rc = gapk_io_init_ms_chan(ms, ch_type, mode);
                if (rc)
                        return rc;
@@ -4989,7 +4989,7 @@

 #ifdef WITH_GAPK_IO
        /* Poke GAPK audio back-end, if it is chosen */
-       if (ms->settings.audio.io_handler == AUDIO_IOH_GAPK)
+       if (ms->settings.tch.voice_handler == TCH_VOICE_IOH_GAPK)
                gapk_io_init_ms_chan(ms, ch_type, cda->mode);
 #endif
 
@@ -7028,16 +7028,16 @@
        rr->tch_loop_mode = L1CTL_TCH_LOOP_OPEN;

        /* Configure audio handling in the L1PHY */
-       switch (ms->settings.audio.io_handler) {
-       case AUDIO_IOH_L1PHY:
+       switch (ms->settings.tch.voice_handler) {
+       case TCH_VOICE_IOH_L1PHY:
                rr->audio_mode = AUDIO_RX_SPEAKER | AUDIO_TX_MICROPHONE;
                break;
-       case AUDIO_IOH_MNCC_SOCK:
-       case AUDIO_IOH_LOOPBACK:
-       case AUDIO_IOH_GAPK:
+       case TCH_VOICE_IOH_MNCC_SOCK:
+       case TCH_VOICE_IOH_LOOPBACK:
+       case TCH_VOICE_IOH_GAPK:
                rr->audio_mode = AUDIO_RX_TRAFFIC_IND | AUDIO_TX_TRAFFIC_REQ;
                break;
-       case AUDIO_IOH_NONE:
+       case TCH_VOICE_IOH_NONE:
                rr->audio_mode = 0x00;
        }

@@ -7156,7 +7156,7 @@
        struct gsm48_rrlayer *rr = &ms->rrlayer;
        uint8_t ch_type, ch_subch, ch_ts;

-       if (ms->settings.audio.io_handler != AUDIO_IOH_NONE)
+       if (ms->settings.tch.voice_handler != TCH_VOICE_IOH_NONE)
                return 0;

        LOGP(DRR, LOGL_INFO, "setting audio mode to %d\n", mode);
diff --git a/src/host/layer23/src/mobile/voice.c 
b/src/host/layer23/src/mobile/voice.c
index acc0dce..b838576 100644
--- a/src/host/layer23/src/mobile/voice.c
+++ b/src/host/layer23/src/mobile/voice.c
@@ -76,15 +76,15 @@
 /* Receive a Downlink voice frame from the lower layers */
 static int gsm_recv_voice(struct osmocom_ms *ms, struct msgb *msg)
 {
-       switch (ms->settings.audio.io_handler) {
-       case AUDIO_IOH_LOOPBACK:
+       switch (ms->settings.tch.voice_handler) {
+       case TCH_VOICE_IOH_LOOPBACK:
                /* Remove the DL info header */
                msgb_pull_to_l2(msg);
                /* Send voice frame back */
                return gsm_send_voice_msg(ms, msg);
-       case AUDIO_IOH_MNCC_SOCK:
+       case TCH_VOICE_IOH_MNCC_SOCK:
                return gsm_forward_mncc(ms, msg);
-       case AUDIO_IOH_GAPK:
+       case TCH_VOICE_IOH_GAPK:
 #ifdef WITH_GAPK_IO
                /* Enqueue a frame to the DL TCH buffer */
                if (ms->gapk_io != NULL)
@@ -93,8 +93,8 @@
                        msgb_free(msg);
                break;
 #endif
-       case AUDIO_IOH_L1PHY:
-       case AUDIO_IOH_NONE:
+       case TCH_VOICE_IOH_L1PHY:
+       case TCH_VOICE_IOH_NONE:
                /* Drop voice frame */
                msgb_free(msg);
        }
diff --git a/src/host/layer23/src/mobile/vty_interface.c 
b/src/host/layer23/src/mobile/vty_interface.c
index 9a1652b..445ad4a 100644
--- a/src/host/layer23/src/mobile/vty_interface.c
+++ b/src/host/layer23/src/mobile/vty_interface.c
@@ -1476,15 +1476,15 @@
                        (set->asci_allow_any) ? "" : "no ", VTY_NEWLINE);

        vty_out(vty, " tch%s", VTY_NEWLINE);
-       vty_out(vty, "  io-handler %s%s",
-               audio_io_handler_name(set->audio.io_handler), VTY_NEWLINE);
-       if (set->audio.io_handler == AUDIO_IOH_GAPK) {
+       vty_out(vty, "  voice-io-handler %s%s",
+               tch_voice_io_handler_name(set->tch.voice_handler), VTY_NEWLINE);
+       if (set->tch.voice_handler == TCH_VOICE_IOH_GAPK) {
                vty_out(vty, "  io-tch-format %s%s",
-                       audio_io_format_name(set->audio.io_format), 
VTY_NEWLINE);
+                       tch_io_frame_format_name(set->tch.frame_format), 
VTY_NEWLINE);
                vty_out(vty, "  alsa-output-dev %s%s",
-                       set->audio.alsa_output_dev, VTY_NEWLINE);
+                       set->tch.alsa_output_dev, VTY_NEWLINE);
                vty_out(vty, "  alsa-input-dev %s%s",
-                       set->audio.alsa_input_dev, VTY_NEWLINE);
+                       set->tch.alsa_input_dev, VTY_NEWLINE);
        }

        if (ms->lua_script)
@@ -2478,26 +2478,29 @@
 SUP_EN_DI(vbs, "vbs", "Voice Broadcast Service (VBS)", 0);

 /* TCH config */
-DEFUN(cfg_ms_tch, cfg_ms_tch_cmd, "tch",
+DEFUN(cfg_ms_tch,
+      cfg_ms_tch_cmd,
+      "tch",
       "Configure TCH (Traffic CHannel) settings\n")
 {
        vty->node = TCH_NODE;
        return CMD_SUCCESS;
 }

-ALIAS_DEPRECATED(cfg_ms_tch, cfg_ms_audio_cmd,
-                "audio", "Configure audio settings\n");
+ALIAS_DEPRECATED(cfg_ms_tch,
+                cfg_ms_audio_cmd,
+                "audio",
+                "Configure audio settings\n");

-
-static int set_audio_io_handler(struct vty *vty, enum audio_io_handler val)
+static int set_voice_io_handler(struct vty *vty, enum tch_voice_io_handler val)
 {
        struct osmocom_ms *ms = (struct osmocom_ms *) vty->index;
        struct gsm_settings *set = &ms->settings;

        /* Don't restart on unchanged value */
-       if (val == set->audio.io_handler)
+       if (val == set->tch.voice_handler)
                return CMD_SUCCESS;
-       set->audio.io_handler = val;
+       set->tch.voice_handler = val;

        /* Restart required */
        vty_restart_if_started(vty, ms);
@@ -2505,59 +2508,77 @@
        return CMD_SUCCESS;
 }

-DEFUN(cfg_ms_tch_io_handler, cfg_ms_tch_io_handler_cmd,
-       "io-handler (none|gapk|l1phy|mncc-sock|loopback)",
-       "Set TCH frame I/O handler\n"
-       "No handler, drop TCH frames (default)\n"
-       "libosmo-gapk based I/O handler (requires ALSA)\n"
-       "L1 PHY (e.g. Calypso DSP in Motorola C1xx phones)\n"
-       "External MNCC application (e.g. LCR) via MNCC socket\n"
-       "Return TCH frame payload back to sender\n")
+#define TCH_VOICE_IOH_SEL \
+       "(none|gapk|l1phy|mncc-sock|loopback)"
+#define TCH_VOICE_IOH_SEL_DESC \
+       "No handler, drop TCH frames (default)\n" \
+       "libosmo-gapk based I/O handler (requires ALSA)\n" \
+       "L1 PHY (e.g. Calypso DSP in Motorola C1xx phones)\n" \
+       "External MNCC application (e.g. LCR) via MNCC socket\n" \
+       "Return TCH frame payload back to sender\n"
+
+DEFUN(cfg_ms_tch_voice_io_handler,
+      cfg_ms_tch_voice_io_handler_cmd,
+      "voice-io-handler " TCH_VOICE_IOH_SEL,
+      "Set TCH I/O handler for voice calls\n"
+      TCH_VOICE_IOH_SEL_DESC)
 {
        struct osmocom_ms *ms = (struct osmocom_ms *) vty->index;
-       int val = get_string_value(audio_io_handler_names, argv[0]);
+       int val = get_string_value(tch_voice_io_handler_names, argv[0]);

-       if (val == AUDIO_IOH_MNCC_SOCK) {
+       if (val == TCH_VOICE_IOH_MNCC_SOCK) {
                if (ms->settings.mncc_handler != MNCC_HANDLER_INTERNAL) {
-                       vty_out(vty, "Audio I/O handler 'mncc-sock' can only be 
used "
+                       vty_out(vty, "TCH I/O handler 'mncc-sock' can only be 
used "
                                "with MNCC handler 'external'%s", VTY_NEWLINE);
                        return CMD_WARNING;
                }
        }

 #ifndef WITH_GAPK_IO
-       if (val == AUDIO_IOH_GAPK) {
+       if (val == TCH_VOICE_IOH_GAPK) {
                vty_out(vty, "GAPK I/O is not compiled in (--with-gapk-io)%s", 
VTY_NEWLINE);
                return CMD_WARNING;
        }
 #endif

-       return set_audio_io_handler(vty, val);
+       return set_voice_io_handler(vty, val);
 }

-DEFUN(cfg_ms_tch_no_io_handler, cfg_ms_tch_no_io_handler_cmd,
-       "no io-handler", NO_STR "Disable TCH frame processing")
+ALIAS_DEPRECATED(cfg_ms_tch_voice_io_handler,
+                cfg_ms_tch_io_handler_cmd,
+                "io-handler " TCH_VOICE_IOH_SEL,
+                "Set TCH I/O handler for voice calls\n" 
TCH_VOICE_IOH_SEL_DESC);
+
+DEFUN(cfg_ms_tch_no_voice_io_handler,
+      cfg_ms_tch_no_voice_io_handler_cmd,
+      "no voice-io-handler",
+      NO_STR "Disable TCH I/O handling for voice calls\n")
 {
-       return set_audio_io_handler(vty, AUDIO_IOH_NONE);
+       return set_voice_io_handler(vty, TCH_VOICE_IOH_NONE);
 }

+ALIAS_DEPRECATED(cfg_ms_tch_no_voice_io_handler,
+                cfg_ms_tch_no_io_handler_cmd,
+                "no io-handler",
+                NO_STR "Disable TCH I/O handling for voice calls\n");
+
 DEFUN(cfg_ms_tch_io_tch_format, cfg_ms_tch_io_tch_format_cmd,
        "io-tch-format (rtp|ti)",
        "Set TCH I/O frame format used by the L1 PHY (for GAPK only)\n"
        "RTP format (RFC3551 for FR/EFR, RFC5993 for HR, RFC4867 for AMR)\n"
        "Texas Instruments format, used by Calypso based phones (e.g. Motorola 
C1xx)\n")
 {
-       int val = get_string_value(audio_io_format_names, argv[0]);
+       int val = get_string_value(tch_io_frame_format_names, argv[0]);
        struct osmocom_ms *ms = (struct osmocom_ms *) vty->index;
        struct gsm_settings *set = &ms->settings;

-       if (set->audio.io_handler != AUDIO_IOH_GAPK) {
+       if (set->tch.voice_handler != TCH_VOICE_IOH_GAPK) {
                vty_out(vty, "This parameter is only valid for GAPK%s", 
VTY_NEWLINE);
                return CMD_WARNING;
        }

        OSMO_ASSERT(val >= 0);
-       set->audio.io_format = val;
+       set->tch.frame_format = val;

        return CMD_SUCCESS;
 }
@@ -2571,7 +2592,7 @@
        struct osmocom_ms *ms = vty->index;
        struct gsm_settings *set = &ms->settings;

-       OSMO_STRLCPY_ARRAY(set->audio.alsa_output_dev, argv[0]);
+       OSMO_STRLCPY_ARRAY(set->tch.alsa_output_dev, argv[0]);

        return CMD_SUCCESS;
 }
@@ -2585,7 +2606,7 @@
        struct osmocom_ms *ms = vty->index;
        struct gsm_settings *set = &ms->settings;

-       OSMO_STRLCPY_ARRAY(set->audio.alsa_input_dev, argv[0]);
+       OSMO_STRLCPY_ARRAY(set->tch.alsa_input_dev, argv[0]);

        return CMD_SUCCESS;
 }
@@ -2848,6 +2869,8 @@
        install_element(MS_NODE, &cfg_ms_no_script_load_run_cmd);

        install_node(&tch_node, config_write_dummy);
+       install_element(TCH_NODE, &cfg_ms_tch_voice_io_handler_cmd);
+       install_element(TCH_NODE, &cfg_ms_tch_no_voice_io_handler_cmd);
        install_element(TCH_NODE, &cfg_ms_tch_io_handler_cmd);
        install_element(TCH_NODE, &cfg_ms_tch_no_io_handler_cmd);
        install_element(TCH_NODE, &cfg_ms_tch_io_tch_format_cmd);

--
To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/34912?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: If6c799d11e225ad00ca5da5ae63dca20568a0ce0
Gerrit-Change-Number: 34912
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <[email protected]>
Gerrit-MessageType: newchange

Reply via email to