<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>