diff options
author | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2023-10-19 21:15:35 +0700 |
---|---|---|
committer | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2023-10-19 21:15:35 +0700 |
commit | 4a0091ffd272eee25ef44cdfc95257299bdfb1ba (patch) | |
tree | c2b1d6b6b18491afba0454f51bba5b5af5bb2cf3 | |
parent | 3a4c4e8f0e24d081f9f3e44bc34d0401f51611a7 (diff) |
fixup! mobile: add support for Circuit Switched Data callsfixeria/csd
Change-Id: I24419d5d74a9c89110e046205dc4df194a317f6e
-rw-r--r-- | src/host/layer23/include/osmocom/bb/common/settings.h | 31 | ||||
-rw-r--r-- | src/host/layer23/src/mobile/vty_interface.c | 124 |
2 files changed, 155 insertions, 0 deletions
diff --git a/src/host/layer23/include/osmocom/bb/common/settings.h b/src/host/layer23/include/osmocom/bb/common/settings.h index 8f03d531..a747bcac 100644 --- a/src/host/layer23/include/osmocom/bb/common/settings.h +++ b/src/host/layer23/include/osmocom/bb/common/settings.h @@ -84,6 +84,34 @@ struct test_sim_settings { } locigprs; }; +enum bcap_data_trans_cap { + BCAP_DATA_TRANS_CAP_UDI, + BCAP_DATA_TRANS_CAP_3100KHZ_AUDIO, + BCAP_DATA_TRANS_CAP_FACSIMILE_GROUP3, +}; + +enum bcap_data_rate { + BCAP_DATA_RATE_V110_300, + BCAP_DATA_RATE_V110_1200, + BCAP_DATA_RATE_V110_2400, + BCAP_DATA_RATE_V110_4800, + BCAP_DATA_RATE_V110_9600, + BCAP_DATA_RATE_V110_14400, +}; + +enum bcap_data_ce { + BCAP_DATA_CE_TRANSP, + BCAP_DATA_CE_TRANSP_PREF, + BCAP_DATA_CE_NON_TRANSP, + BCAP_DATA_CE_NON_TRANSP_PREF, +}; + +struct bcap_data_settings { + enum bcap_data_trans_cap trans_cap; + enum bcap_data_rate data_rate; + enum bcap_data_ce ce; +}; + struct gsm_settings { char layer2_socket_path[128]; char sap_socket_path[128]; @@ -171,6 +199,9 @@ struct gsm_settings { bool csd_tch_f24; bool csd_tch_h24; + /* CSD Bearer Capability */ + struct bcap_data_settings bcap_data; + /* support for ASCI */ bool vgcs; /* support of VGCS */ bool vbs; /* support of VBS */ diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c index d128f2df..09d0bd85 100644 --- a/src/host/layer23/src/mobile/vty_interface.c +++ b/src/host/layer23/src/mobile/vty_interface.c @@ -618,6 +618,130 @@ DEFUN(call_dtmf, call_dtmf_cmd, return CMD_SUCCESS; } +#define CALL_BCAP_CMD \ + CALL_CMD " bcap" +#define CALL_BCAP_CMD_DESC \ + CALL_CMD_DESC \ + "Bearer Capability configuration\n" + +#define CALL_BCAP_DATA_CMD \ + CALL_BCAP_CMD " data" +#define CALL_BCAP_DATA_CMD_DESC \ + CALL_BCAP_CMD_DESC \ + "Bearer Capability for data calls\n" + +DEFUN(call_bcap_data_trans_cap, call_bcap_data_trans_cap_cmd, + CALL_BCAP_DATA_CMD "trans-cap (udi|3100khz-audio|facsimile)", + CALL_BCAP_DATA_CMD_DESC + "Information transfer capability (octet 3)\n" + "Unrestricted Digital Information\n" + "3.1 kHz audio, ex PLMN\n" + "Facsimile group 3\n") +{ + struct osmocom_ms *ms; + struct gsm_settings *set; + struct bcap_data_settings *bcap; + + ms = l23_vty_get_ms(argv[0], vty); + if (!ms) + return CMD_WARNING; + set = &ms->settings; + bcap = &set->bcap_data; + + if (!strcmp(argv[1], "udi")) + bcap->trans_cap = BCAP_DATA_TRANS_CAP_UDI; + else if (!strcmp(argv[1], "3100khz-audio")) + bcap->trans_cap = BCAP_DATA_TRANS_CAP_3100KHZ_AUDIO; + else if (!strcmp(argv[1], "facsimile")) + bcap->trans_cap = BCAP_DATA_TRANS_CAP_FACSIMILE_GROUP3; + else /* should not happen */ + return CMD_WARNING; + + return CMD_SUCCESS; +} + +DEFUN(call_bcap_data_rate, call_bcap_data_rate_cmd, + CALL_BCAP_DATA_CMD "speed (65|66|68|70|71|75)", + CALL_BCAP_DATA_CMD_DESC + "Data rate (values like in AT+CBST)\n" + "300 bps (V.110)\n" + "1200 bps (V.110)\n" + "2400 bps (V.110 or X.31 flag stuffing)\n" + "4800 bps (V.110 or X.31 flag stuffing)\n" + "9600 bps (V.110 or X.31 flag stuffing)\n" + "14400 bps (V.110 or X.31 flag stuffing)\n") +{ + struct osmocom_ms *ms; + struct gsm_settings *set; + struct bcap_data_settings *bcap; + + ms = l23_vty_get_ms(argv[0], vty); + if (!ms) + return CMD_WARNING; + set = &ms->settings; + bcap = &set->bcap_data; + + switch (atoi(argv[1])) { + case 65: + bcap->data_rate = BCAP_DATA_RATE_V110_300; + break; + case 66: + bcap->data_rate = BCAP_DATA_RATE_V110_1200; + break; + case 68: + bcap->data_rate = BCAP_DATA_RATE_V110_2400; + break; + case 70: + bcap->data_rate = BCAP_DATA_RATE_V110_4800; + break; + case 71: + bcap->data_rate = BCAP_DATA_RATE_V110_9600; + break; + case 75: + bcap->data_rate = BCAP_DATA_RATE_V110_14400; + break; + default: /* should not happen */ + return CMD_WARNING; + } + + return CMD_SUCCESS; +} + +DEFUN(call_bcap_data_ce, call_bcap_data_ce_cmd, + CALL_BCAP_DATA_CMD "ce (transparent|non-transparent) [prefer]", + CALL_BCAP_DATA_CMD_DESC + "Connection element (octet 6c)\n" + "Transparent connection\n" + "Non-transparent connection (RLP)\n" + "Prefer the selected mode, but also accept other(s)\n") +{ + struct osmocom_ms *ms; + struct gsm_settings *set; + struct bcap_data_settings *bcap; + + ms = l23_vty_get_ms(argv[0], vty); + if (!ms) + return CMD_WARNING; + set = &ms->settings; + bcap = &set->bcap_data; + + if (!strcmp(argv[1], "transparent")) { + if (argc > 2) + bcap->ce = BCAP_DATA_CE_TRANSP_PREF; + else + bcap->ce = BCAP_DATA_CE_TRANSP; + } else if (!strcmp(argv[1], "non-transparent")) { + if (argc > 2) + bcap->ce = BCAP_DATA_CE_NON_TRANSP_PREF; + else + bcap->ce = BCAP_DATA_CE_NON_TRANSP; + } else { /* should not happen */ + return CMD_WARNING; + } + + 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" |