<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12467">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">layer23/sap_interface.c: separate protocol definition<br><br>Change-Id: Iad9b3d88b02cc7ec4cf64483bbc85e3a61c9ad10<br>---<br>M src/host/layer23/include/osmocom/bb/common/Makefile.am<br>M src/host/layer23/include/osmocom/bb/common/sap_interface.h<br>A src/host/layer23/include/osmocom/bb/common/sap_proto.h<br>M src/host/layer23/src/common/Makefile.am<br>M src/host/layer23/src/common/sap_interface.c<br>A src/host/layer23/src/common/sap_proto.c<br>6 files changed, 200 insertions(+), 156 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/67/12467/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/layer23/include/osmocom/bb/common/Makefile.am b/src/host/layer23/include/osmocom/bb/common/Makefile.am</span><br><span>index e1ea7eb..eb1dfb7 100644</span><br><span>--- a/src/host/layer23/include/osmocom/bb/common/Makefile.am</span><br><span>+++ b/src/host/layer23/include/osmocom/bb/common/Makefile.am</span><br><span>@@ -1,3 +1,3 @@</span><br><span> noinst_HEADERS = l1ctl.h l1l2_interface.h l23_app.h logging.h \</span><br><span> networks.h gps.h sysinfo.h osmocom_data.h utils.h \</span><br><span style="color: hsl(0, 100%, 40%);">- sap_interface.h</span><br><span style="color: hsl(120, 100%, 40%);">+ sap_proto.h sap_interface.h</span><br><span>diff --git a/src/host/layer23/include/osmocom/bb/common/sap_interface.h b/src/host/layer23/include/osmocom/bb/common/sap_interface.h</span><br><span>index 5332982..96d056b 100644</span><br><span>--- a/src/host/layer23/include/osmocom/bb/common/sap_interface.h</span><br><span>+++ b/src/host/layer23/include/osmocom/bb/common/sap_interface.h</span><br><span>@@ -16,86 +16,3 @@</span><br><span> SAP_PROCESSING_ATR_REQUEST,</span><br><span> SAP_PROCESSING_APDU_REQUEST</span><br><span> };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.1: Message Overview */</span><br><span style="color: hsl(0, 100%, 40%);">-enum sap_msg_type {</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CONNECT_REQ = 0x00,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CONNECT_RESP = 0x01,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_DISCONNECT_REQ = 0x02,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_DISCONNECT_RESP = 0x03,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_DISCONNECT_IND = 0x04,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_TRANSFER_APDU_REQ = 0x05,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_TRANSFER_APDU_RESP = 0x06,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_TRANSFER_ATR_REQ = 0x07,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_TRANSFER_ATR_RESP = 0x08,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_POWER_SIM_OFF_REQ = 0x09,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_POWER_SIM_OFF_RESP = 0x0A,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_POWER_SIM_ON_REQ = 0x0B,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_POWER_SIM_ON_RESP = 0x0C,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESET_SIM_REQ = 0x0D,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESET_SIM_RESP = 0x0E,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_TRANSFER_CARD_READER_STATUS_REQ = 0x0F,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_TRANSFER_CARD_READER_STATUS_RESP = 0x10,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_STATUS_IND = 0x11,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_ERROR_RESP = 0x12,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_SET_TRANSPORT_PROTOCOL_REQ = 0x13,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_SET_TRANSPORT_PROTOCOL_RESP = 0x14</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.15: List of Parameter IDs */</span><br><span style="color: hsl(0, 100%, 40%);">-enum sap_param_type {</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_MAX_MSG_SIZE = 0x00,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CONNECTION_STATUS = 0x01,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESULT_CODE = 0x02,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_DISCONNECTION_TYPE = 0x03,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_COMMAND_APDU = 0x04,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_COMMAND_APDU_7816 = 0x10,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESPONSE_APDU = 0x05,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_ATR = 0x06,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CARD_READER_STATUS = 0x07,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_STATUS_CHANGE = 0x08,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_TRANSPORT_PROTOCOL = 0x09</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.18: Possible values for ResultCode */</span><br><span style="color: hsl(0, 100%, 40%);">-enum sap_result_type {</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESULT_OK_REQ_PROC_CORR = 0x00,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESULT_ERROR_NO_REASON = 0x01,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESULT_ERROR_CARD_NOT_ACC = 0x02,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESULT_ERROR_CARD_POWERED_OFF = 0x03,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESULT_ERROR_CARD_REMOVED = 0x04,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESULT_ERROR_CARD_POWERED_ON = 0x05,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESULT_ERROR_DATA_UNAVAIL = 0x06,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_RESULT_ERROR_NOT_SUPPORTED = 0x07,</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.19: Possible values for StatusChange */</span><br><span style="color: hsl(0, 100%, 40%);">-enum sap_card_status_type {</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CARD_STATUS_UNKNOWN_ERROR = 0x00,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CARD_STATUS_RESET = 0x01,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CARD_STATUS_NOT_ACC = 0x02,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CARD_STATUS_REMOVED = 0x03,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CARD_STATUS_INSERTED = 0x04,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CARD_STATUS_RECOVERED = 0x05,</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.16: Possible values for ConnectionStatus */</span><br><span style="color: hsl(0, 100%, 40%);">-enum sap_conn_status_type {</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CONN_STATUS_OK_READY = 0x00,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CONN_STATUS_ERROR_CONN = 0x01,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CONN_STATUS_ERROR_MAX_MSG_SIZE = 0x02,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CONN_STATUS_ERROR_SMALL_MSG_SIZE = 0x03,</span><br><span style="color: hsl(0, 100%, 40%);">- SAP_CONN_STATUS_OK_CALL = 0x04,</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct sap_param {</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t id;</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t len;</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t *value;</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct sap_msg {</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t id;</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t num_params;</span><br><span style="color: hsl(0, 100%, 40%);">- struct sap_param *params;</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span>diff --git a/src/host/layer23/include/osmocom/bb/common/sap_proto.h b/src/host/layer23/include/osmocom/bb/common/sap_proto.h</span><br><span>new file mode 100644</span><br><span>index 0000000..49b30fc</span><br><span>--- /dev/null</span><br><span>+++ b/src/host/layer23/include/osmocom/bb/common/sap_proto.h</span><br><span>@@ -0,0 +1,94 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.1: Message Overview */</span><br><span style="color: hsl(120, 100%, 40%);">+enum sap_msg_type {</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CONNECT_REQ = 0x00,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CONNECT_RESP = 0x01,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_DISCONNECT_REQ = 0x02,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_DISCONNECT_RESP = 0x03,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_DISCONNECT_IND = 0x04,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_TRANSFER_APDU_REQ = 0x05,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_TRANSFER_APDU_RESP = 0x06,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_TRANSFER_ATR_REQ = 0x07,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_TRANSFER_ATR_RESP = 0x08,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_POWER_SIM_OFF_REQ = 0x09,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_POWER_SIM_OFF_RESP = 0x0A,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_POWER_SIM_ON_REQ = 0x0B,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_POWER_SIM_ON_RESP = 0x0C,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESET_SIM_REQ = 0x0D,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESET_SIM_RESP = 0x0E,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_TRANSFER_CARD_READER_STATUS_REQ = 0x0F,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_TRANSFER_CARD_READER_STATUS_RESP = 0x10,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_STATUS_IND = 0x11,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_ERROR_RESP = 0x12,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_SET_TRANSPORT_PROTOCOL_REQ = 0x13,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_SET_TRANSPORT_PROTOCOL_RESP = 0x14</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.15: List of Parameter IDs */</span><br><span style="color: hsl(120, 100%, 40%);">+enum sap_param_type {</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_MAX_MSG_SIZE = 0x00,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CONNECTION_STATUS = 0x01,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESULT_CODE = 0x02,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_DISCONNECTION_TYPE = 0x03,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_COMMAND_APDU = 0x04,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_COMMAND_APDU_7816 = 0x10,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESPONSE_APDU = 0x05,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_ATR = 0x06,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CARD_READER_STATUS = 0x07,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_STATUS_CHANGE = 0x08,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_TRANSPORT_PROTOCOL = 0x09</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.18: Possible values for ResultCode */</span><br><span style="color: hsl(120, 100%, 40%);">+enum sap_result_type {</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESULT_OK_REQ_PROC_CORR = 0x00,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESULT_ERROR_NO_REASON = 0x01,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESULT_ERROR_CARD_NOT_ACC = 0x02,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESULT_ERROR_CARD_POWERED_OFF = 0x03,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESULT_ERROR_CARD_REMOVED = 0x04,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESULT_ERROR_CARD_POWERED_ON = 0x05,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESULT_ERROR_DATA_UNAVAIL = 0x06,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_RESULT_ERROR_NOT_SUPPORTED = 0x07,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.19: Possible values for StatusChange */</span><br><span style="color: hsl(120, 100%, 40%);">+enum sap_card_status_type {</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CARD_STATUS_UNKNOWN_ERROR = 0x00,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CARD_STATUS_RESET = 0x01,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CARD_STATUS_NOT_ACC = 0x02,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CARD_STATUS_REMOVED = 0x03,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CARD_STATUS_INSERTED = 0x04,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CARD_STATUS_RECOVERED = 0x05,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.16: Possible values for ConnectionStatus */</span><br><span style="color: hsl(120, 100%, 40%);">+enum sap_conn_status_type {</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CONN_STATUS_OK_READY = 0x00,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CONN_STATUS_ERROR_CONN = 0x01,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CONN_STATUS_ERROR_MAX_MSG_SIZE = 0x02,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CONN_STATUS_ERROR_SMALL_MSG_SIZE = 0x03,</span><br><span style="color: hsl(120, 100%, 40%);">+ SAP_CONN_STATUS_OK_CALL = 0x04,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct value_string sap_msg_names[];</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct value_string sap_param_names[];</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct value_string sap_result_names[];</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct value_string sap_card_status_names[];</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct value_string sap_conn_status_names[];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct sap_param {</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t id;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t len;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t *value;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct sap_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t id;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t num_params;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct sap_param *params;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span>diff --git a/src/host/layer23/src/common/Makefile.am b/src/host/layer23/src/common/Makefile.am</span><br><span>index b76094c..9eed961 100644</span><br><span>--- a/src/host/layer23/src/common/Makefile.am</span><br><span>+++ b/src/host/layer23/src/common/Makefile.am</span><br><span>@@ -2,5 +2,5 @@</span><br><span> AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBGPS_CFLAGS)</span><br><span> </span><br><span> noinst_LIBRARIES = liblayer23.a</span><br><span style="color: hsl(0, 100%, 40%);">-liblayer23_a_SOURCES = l1ctl.c l1l2_interface.c sap_interface.c \</span><br><span style="color: hsl(120, 100%, 40%);">+liblayer23_a_SOURCES = l1ctl.c l1l2_interface.c sap_proto.c sap_interface.c \</span><br><span> logging.c networks.c sim.c sysinfo.c gps.c l1ctl_lapdm_glue.c utils.c</span><br><span>diff --git a/src/host/layer23/src/common/sap_interface.c b/src/host/layer23/src/common/sap_interface.c</span><br><span>index a152c18..7b8717d 100644</span><br><span>--- a/src/host/layer23/src/common/sap_interface.c</span><br><span>+++ b/src/host/layer23/src/common/sap_interface.c</span><br><span>@@ -26,6 +26,7 @@</span><br><span> #include <osmocom/bb/common/osmocom_data.h></span><br><span> #include <osmocom/bb/common/logging.h></span><br><span> #include <osmocom/bb/common/sap_interface.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bb/common/sap_proto.h></span><br><span> </span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/core/talloc.h></span><br><span>@@ -47,77 +48,6 @@</span><br><span> </span><br><span> static void sap_connect(struct osmocom_ms *ms);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.15: List of Parameter IDs */</span><br><span style="color: hsl(0, 100%, 40%);">-static const struct value_string sap_param_names[] = {</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_MAX_MSG_SIZE, "MaxMsgSize" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CONNECTION_STATUS, "ConnectionStatus" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESULT_CODE, "ResultCode" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_DISCONNECTION_TYPE, "DisconnectionType" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_COMMAND_APDU, "CommandAPDU" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_COMMAND_APDU_7816, "CommandAPDU7816" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESPONSE_APDU, "ResponseAPDU" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_ATR, "ATR" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CARD_READER_STATUS, "CardReaderStatus" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_STATUS_CHANGE, "StatusChange" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_TRANSPORT_PROTOCOL, "TransportProtocol" },</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.1: Message Overview */</span><br><span style="color: hsl(0, 100%, 40%);">-static const struct value_string sap_msg_names[] = {</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CONNECT_REQ, "CONNECT_REQ" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CONNECT_RESP, "CONNECT_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_DISCONNECT_REQ, "DISCONNECT_REQ" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_DISCONNECT_RESP, "DISCONNECT_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_DISCONNECT_IND, "DISCONNECT_IND" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_TRANSFER_APDU_REQ, "TRANSFER_APDU_REQ" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_TRANSFER_APDU_RESP, "TRANSFER_APDU_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_TRANSFER_ATR_REQ, "TRANSFER_ATR_REQ" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_TRANSFER_ATR_RESP, "TRANSFER_ATR_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_POWER_SIM_OFF_REQ, "POWER_SIM_OFF_REQ" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_POWER_SIM_OFF_RESP, "POWER_SIM_OFF_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_POWER_SIM_ON_REQ, "POWER_SIM_ON_REQ" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_POWER_SIM_ON_RESP, "POWER_SIM_ON_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESET_SIM_REQ, "RESET_SIM_REQ" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESET_SIM_RESP, "RESET_SIM_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_TRANSFER_CARD_READER_STATUS_REQ, "TRANSFER_CARD_READER_STATUS_REQ" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_TRANSFER_CARD_READER_STATUS_RESP, "TRANSFER_CARD_READER_STATUS_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_STATUS_IND, "STATUS_IND" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_ERROR_RESP, "ERROR_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_SET_TRANSPORT_PROTOCOL_REQ, "SET_TRANSPORT_PROTOCOL_REQ" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_SET_TRANSPORT_PROTOCOL_RESP, "SET_TRANSPORT_PROTOCOL_RESP" },</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.18: Possible values for ResultCode */</span><br><span style="color: hsl(0, 100%, 40%);">-static const struct value_string sap_result_names[] = {</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESULT_OK_REQ_PROC_CORR, "OK, request processed correctly" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESULT_ERROR_NO_REASON, "Error, no reason defined" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESULT_ERROR_CARD_NOT_ACC, "Error, card not accessible" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESULT_ERROR_CARD_POWERED_OFF, "Error, card (already) powered off" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESULT_ERROR_CARD_REMOVED, "Error, card removed" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESULT_ERROR_CARD_POWERED_ON, "Error, card already powered on" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESULT_ERROR_DATA_UNAVAIL, "Error, data not available" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_RESULT_ERROR_NOT_SUPPORTED, "Error, not supported "}</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.19: Possible values for StatusChange */</span><br><span style="color: hsl(0, 100%, 40%);">-static const struct value_string sap_card_status_names[] = {</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CARD_STATUS_UNKNOWN_ERROR, "Unknown Error" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CARD_STATUS_RESET, "Card reset" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CARD_STATUS_NOT_ACC, "Card not accessible" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CARD_STATUS_REMOVED, "Card removed" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CARD_STATUS_INSERTED, "Card inserted" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CARD_STATUS_RECOVERED, "Card recovered" },</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Table 5.16: Possible values for ConnectionStatus */</span><br><span style="color: hsl(0, 100%, 40%);">-static const struct value_string sap_conn_status_names[] = {</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CONN_STATUS_OK_READY, "OK, Server can fulfill requirements" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CONN_STATUS_ERROR_CONN, "Error, Server unable to establish connection" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CONN_STATUS_ERROR_MAX_MSG_SIZE, "Error, Server does not support maximum message size" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CONN_STATUS_ERROR_SMALL_MSG_SIZE, "Error, maximum message size by Client is too small" },</span><br><span style="color: hsl(0, 100%, 40%);">- { SAP_CONN_STATUS_OK_CALL, "OK, ongoing call" },</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static struct msgb *sap_create_msg(uint8_t id, uint8_t num_params, struct sap_param *params)</span><br><span> {</span><br><span> struct msgb *msg;</span><br><span>@@ -181,9 +111,13 @@</span><br><span> get_value_string(sap_result_names, param->value[0]));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#if 0</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: ARRAY_SIZE() is not applicable to</span><br><span style="color: hsl(120, 100%, 40%);">+ * extern const struct value_string[] */</span><br><span> if(param->value[0] > ARRAY_SIZE(sap_result_names)){</span><br><span> return -1;</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> </span><br><span> return 0;</span><br><span> }</span><br><span>diff --git a/src/host/layer23/src/common/sap_proto.c b/src/host/layer23/src/common/sap_proto.c</span><br><span>new file mode 100644</span><br><span>index 0000000..c84a357</span><br><span>--- /dev/null</span><br><span>+++ b/src/host/layer23/src/common/sap_proto.c</span><br><span>@@ -0,0 +1,99 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * SAP (SIM Access Profile) protocol definition</span><br><span style="color: hsl(120, 100%, 40%);">+ * based on Bluetooth SAP specification</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2011 by Nico Golde <nico@ngolde.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2018 by Vadim Yanitskiy <axilirator@gmail.com></span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 2 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU General Public License along</span><br><span style="color: hsl(120, 100%, 40%);">+ * with this program; if not, write to the Free Software Foundation, Inc.,</span><br><span style="color: hsl(120, 100%, 40%);">+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bb/common/sap_proto.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.1: Message Overview */</span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string sap_msg_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CONNECT_REQ, "CONNECT_REQ" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CONNECT_RESP, "CONNECT_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_DISCONNECT_REQ, "DISCONNECT_REQ" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_DISCONNECT_RESP, "DISCONNECT_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_DISCONNECT_IND, "DISCONNECT_IND" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_TRANSFER_APDU_REQ, "TRANSFER_APDU_REQ" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_TRANSFER_APDU_RESP, "TRANSFER_APDU_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_TRANSFER_ATR_REQ, "TRANSFER_ATR_REQ" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_TRANSFER_ATR_RESP, "TRANSFER_ATR_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_POWER_SIM_OFF_REQ, "POWER_SIM_OFF_REQ" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_POWER_SIM_OFF_RESP, "POWER_SIM_OFF_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_POWER_SIM_ON_REQ, "POWER_SIM_ON_REQ" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_POWER_SIM_ON_RESP, "POWER_SIM_ON_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESET_SIM_REQ, "RESET_SIM_REQ" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESET_SIM_RESP, "RESET_SIM_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_TRANSFER_CARD_READER_STATUS_REQ, "TRANSFER_CARD_READER_STATUS_REQ" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_TRANSFER_CARD_READER_STATUS_RESP, "TRANSFER_CARD_READER_STATUS_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_STATUS_IND, "STATUS_IND" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_ERROR_RESP, "ERROR_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_SET_TRANSPORT_PROTOCOL_REQ, "SET_TRANSPORT_PROTOCOL_REQ" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_SET_TRANSPORT_PROTOCOL_RESP, "SET_TRANSPORT_PROTOCOL_RESP" },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.15: List of Parameter IDs */</span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string sap_param_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_MAX_MSG_SIZE, "MaxMsgSize" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CONNECTION_STATUS, "ConnectionStatus" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESULT_CODE, "ResultCode" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_DISCONNECTION_TYPE, "DisconnectionType" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_COMMAND_APDU, "CommandAPDU" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_COMMAND_APDU_7816, "CommandAPDU7816" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESPONSE_APDU, "ResponseAPDU" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_ATR, "ATR" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CARD_READER_STATUS, "CardReaderStatus" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_STATUS_CHANGE, "StatusChange" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_TRANSPORT_PROTOCOL, "TransportProtocol" },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.18: Possible values for ResultCode */</span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string sap_result_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESULT_OK_REQ_PROC_CORR, "OK, request processed correctly" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESULT_ERROR_NO_REASON, "Error, no reason defined" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESULT_ERROR_CARD_NOT_ACC, "Error, card not accessible" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESULT_ERROR_CARD_POWERED_OFF, "Error, card (already) powered off" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESULT_ERROR_CARD_REMOVED, "Error, card removed" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESULT_ERROR_CARD_POWERED_ON, "Error, card already powered on" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESULT_ERROR_DATA_UNAVAIL, "Error, data not available" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_RESULT_ERROR_NOT_SUPPORTED, "Error, not supported "}</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.19: Possible values for StatusChange */</span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string sap_card_status_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CARD_STATUS_UNKNOWN_ERROR, "Unknown Error" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CARD_STATUS_RESET, "Card reset" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CARD_STATUS_NOT_ACC, "Card not accessible" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CARD_STATUS_REMOVED, "Card removed" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CARD_STATUS_INSERTED, "Card inserted" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CARD_STATUS_RECOVERED, "Card recovered" },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Table 5.16: Possible values for ConnectionStatus */</span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string sap_conn_status_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CONN_STATUS_OK_READY, "OK, Server can fulfill requirements" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CONN_STATUS_ERROR_CONN, "Error, Server unable to establish connection" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CONN_STATUS_ERROR_MAX_MSG_SIZE, "Error, Server does not support maximum message size" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CONN_STATUS_ERROR_SMALL_MSG_SIZE, "Error, maximum message size by Client is too small" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { SAP_CONN_STATUS_OK_CALL, "OK, ongoing call" },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12467">change 12467</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/12467"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Iad9b3d88b02cc7ec4cf64483bbc85e3a61c9ad10 </div>
<div style="display:none"> Gerrit-Change-Number: 12467 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>