fixeria has uploaded this change for review.

View Change

mobile: VTY: make soft-UART parameters configurable

Change-Id: I48bb58aaf1101fbc0e58db3fb1100927e506ede2
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/mnccms.c
M src/host/layer23/src/mobile/vty_interface.c
4 files changed, 156 insertions(+), 4 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/62/35662/1
diff --git a/src/host/layer23/include/osmocom/bb/common/settings.h b/src/host/layer23/include/osmocom/bb/common/settings.h
index ecebae8..a1c9b3e 100644
--- a/src/host/layer23/include/osmocom/bb/common/settings.h
+++ b/src/host/layer23/include/osmocom/bb/common/settings.h
@@ -136,6 +136,12 @@
enum data_call_type type;
enum data_call_rate rate;
enum gsm48_bcap_transp transp;
+
+ /* async call parameters */
+ bool is_async;
+ unsigned int nr_stop_bits;
+ unsigned int nr_data_bits;
+ enum gsm48_bcap_parity parity;
};

struct gsm_settings {
diff --git a/src/host/layer23/src/common/settings.c b/src/host/layer23/src/common/settings.c
index 6ffb095..bc5d115 100644
--- a/src/host/layer23/src/common/settings.c
+++ b/src/host/layer23/src/common/settings.c
@@ -139,6 +139,12 @@
.type = DATA_CALL_TYPE_ISDN,
.rate = DATA_CALL_RATE_V110_9600,
.transp = GSM48_BCAP_TR_TRANSP,
+
+ /* async call parameters (8-N-1) */
+ .is_async = true,
+ .nr_stop_bits = 1,
+ .nr_data_bits = 8,
+ .parity = GSM48_BCAP_PAR_NONE,
};

return 0;
diff --git a/src/host/layer23/src/mobile/mnccms.c b/src/host/layer23/src/mobile/mnccms.c
index 4bdb845..fa3b284 100644
--- a/src/host/layer23/src/mobile/mnccms.c
+++ b/src/host/layer23/src/mobile/mnccms.c
@@ -217,11 +217,11 @@
/* TODO: make these fields configurable via *set */
.rate_adaption = GSM48_BCAP_RA_V110_X30,
.sig_access = GSM48_BCAP_SA_I440_I450,
- .async = 1,
+ .async = cp->is_async,
.transp = cp->transp,
- .nr_data_bits = 8,
- .parity = GSM48_BCAP_PAR_NONE,
- .nr_stop_bits = 1,
+ .nr_data_bits = cp->nr_data_bits,
+ .nr_stop_bits = cp->nr_stop_bits,
+ .parity = cp->parity,
/* .user_rate is set below */
/* .interm_rate is set below */
},
diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c
index 05a20e4..4c2263a 100644
--- a/src/host/layer23/src/mobile/vty_interface.c
+++ b/src/host/layer23/src/mobile/vty_interface.c
@@ -756,6 +756,119 @@
return CMD_SUCCESS;
}

+DEFUN(call_params_data_sync_async,
+ call_params_data_sync_async_cmd,
+ CALL_PARAMS_DATA_CMD " (sync|async)",
+ CALL_PARAMS_DATA_CMD_DESC
+ "Synchronous connection (always used for FAX calls)\n"
+ "Asynchronous connection (does not apply to FAX calls)\n")
+{
+ struct osmocom_ms *ms;
+ struct gsm_settings *set;
+ struct data_call_params *cp;
+
+ ms = l23_vty_get_ms(argv[0], vty);
+ if (!ms)
+ return CMD_WARNING;
+ set = &ms->settings;
+ cp = &set->call_params.data;
+
+ cp->is_async = (argv[1][0] == 'a');
+
+ return CMD_SUCCESS;
+}
+
+#define CALL_PARAMS_DATA_ASYNC_CMD \
+ CALL_PARAMS_DATA_CMD " async"
+#define CALL_PARAMS_DATA_ASYNC_CMD_DESC \
+ CALL_PARAMS_DATA_CMD_DESC \
+ "Asynchronous connection params (does not apply to FAX calls)\n"
+
+DEFUN(call_params_data_async_nr_stop_bits,
+ call_params_data_async_nr_stop_bits_cmd,
+ CALL_PARAMS_DATA_ASYNC_CMD " nr-stop-bits <1-2>",
+ CALL_PARAMS_DATA_ASYNC_CMD_DESC
+ "Number of stop bits (soft-UART config)\n"
+ "Number of stop bits (default: 1)\n")
+{
+ struct osmocom_ms *ms;
+ struct gsm_settings *set;
+ struct data_call_params *cp;
+
+ ms = l23_vty_get_ms(argv[0], vty);
+ if (!ms)
+ return CMD_WARNING;
+ set = &ms->settings;
+ cp = &set->call_params.data;
+
+ cp->nr_stop_bits = atoi(argv[1]);
+
+ return CMD_SUCCESS;
+}
+
+DEFUN(call_params_data_async_nr_data_bits,
+ call_params_data_async_nr_data_bits_cmd,
+ CALL_PARAMS_DATA_ASYNC_CMD " nr-data-bits <7-8>",
+ CALL_PARAMS_DATA_ASYNC_CMD_DESC
+ "Number of data bits (soft-UART config)\n"
+ "Number of data bits (default: 8)\n")
+{
+ struct osmocom_ms *ms;
+ struct gsm_settings *set;
+ struct data_call_params *cp;
+
+ ms = l23_vty_get_ms(argv[0], vty);
+ if (!ms)
+ return CMD_WARNING;
+ set = &ms->settings;
+ cp = &set->call_params.data;
+
+ cp->nr_data_bits = atoi(argv[1]);
+
+ return CMD_SUCCESS;
+}
+
+static const struct value_string async_parity_names[] = {
+ { GSM48_BCAP_PAR_NONE, "none" },
+ { GSM48_BCAP_PAR_EVEN, "even" },
+ { GSM48_BCAP_PAR_ODD, "odd" },
+ { GSM48_BCAP_PAR_ONE, "mark" },
+ { GSM48_BCAP_PAR_ZERO, "space" },
+ { 0, NULL }
+};
+
+static const struct value_string async_parity_descs[] = {
+ { GSM48_BCAP_PAR_NONE, "No parity bit (default)" },
+ { GSM48_BCAP_PAR_EVEN, "Even parity" },
+ { GSM48_BCAP_PAR_ODD, "Odd parity" },
+ { GSM48_BCAP_PAR_ONE, "Always 1" },
+ { GSM48_BCAP_PAR_ZERO, "Always 0" },
+ { 0, NULL }
+};
+
+DEFUN(call_params_data_async_parity,
+ call_params_data_async_parity_cmd,
+ CALL_PARAMS_DATA_ASYNC_CMD /* generated */,
+ CALL_PARAMS_DATA_ASYNC_CMD_DESC /* generated */)
+{
+ struct osmocom_ms *ms;
+ struct gsm_settings *set;
+ struct data_call_params *cp;
+ int val;
+
+ ms = l23_vty_get_ms(argv[0], vty);
+ if (!ms)
+ return CMD_WARNING;
+ set = &ms->settings;
+ cp = &set->call_params.data;
+
+ val = get_string_value(async_parity_names, argv[1]);
+ OSMO_ASSERT(val >= 0); /* should not happen */
+ cp->parity = (enum gsm48_bcap_parity)val;
+
+ return CMD_SUCCESS;
+}
+
DEFUN(sms, sms_cmd, "sms MS_NAME NUMBER .LINE",
"Send an SMS\nName of MS (see \"show ms\")\nPhone number to send SMS "
"(Use digits '0123456789*#abc', and '+' to dial international)\n"
@@ -2766,6 +2879,19 @@
{
int rc;

+ call_params_data_async_parity_cmd.string =
+ vty_cmd_string_from_valstr(NULL,
+ async_parity_names,
+ CALL_PARAMS_DATA_ASYNC_CMD
+ " parity (", "|", ")", 0);
+
+ call_params_data_async_parity_cmd.doc =
+ vty_cmd_string_from_valstr(NULL,
+ async_parity_descs,
+ CALL_PARAMS_DATA_ASYNC_CMD_DESC
+ "Parity mode (soft-UART config)\n",
+ "\n", "", 0);
+
if ((rc = l23_vty_init(config_write, l23_vty_signal_cb)) < 0)
return rc;

@@ -2792,6 +2918,10 @@
install_element(ENABLE_NODE, &call_params_data_type_cmd);
install_element(ENABLE_NODE, &call_params_data_rate_cmd);
install_element(ENABLE_NODE, &call_params_data_ce_cmd);
+ install_element(ENABLE_NODE, &call_params_data_sync_async_cmd);
+ install_element(ENABLE_NODE, &call_params_data_async_nr_stop_bits_cmd);
+ install_element(ENABLE_NODE, &call_params_data_async_nr_data_bits_cmd);
+ install_element(ENABLE_NODE, &call_params_data_async_parity_cmd);
install_element(ENABLE_NODE, &sms_cmd);
install_element(ENABLE_NODE, &service_cmd);
install_element(ENABLE_NODE, &vgcs_enter_cmd);

To view, visit change 35662. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I48bb58aaf1101fbc0e58db3fb1100927e506ede2
Gerrit-Change-Number: 35662
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de>
Gerrit-MessageType: newchange