Test: Add integration of the eRPC system
- PSA Client API IDL file
- Client and server init and API wrappers
- Example client application
Signed-off-by: Kevin Peng <kevin.peng@arm.com>
Signed-off-by: Jamie Fox <jamie.fox@arm.com>
Signed-off-by: Summer Qin <summer.qin@arm.com>
Change-Id: If6180fd3e596c9daabd31262fb10ae0a1583bc9b
diff --git a/erpc/server/erpc_server_wrapper.c b/erpc/server/erpc_server_wrapper.c
new file mode 100644
index 0000000..8215c9a
--- /dev/null
+++ b/erpc/server/erpc_server_wrapper.c
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#include <stddef.h>
+#include "psa/client.h"
+#include "tfm_erpc_psa_client_api.h"
+
+psa_status_t erpc_psa_call(psa_handle_t handle, int32_t t,
+ const list_binary_1_t *erpc_in_vec,
+ list_binary_1_t *erpc_out_vec)
+{
+ psa_status_t status;
+ psa_invec in_vec[PSA_MAX_IOVEC];
+ psa_outvec out_vec[PSA_MAX_IOVEC];
+ size_t i;
+ size_t in_len = erpc_in_vec->elementsCount;
+ size_t out_len = erpc_out_vec->elementsCount;
+
+ /* Copy RPC iovecs into PSA iovecs */
+ for (i = 0; i < in_len; ++i) {
+ in_vec[i] = (psa_invec){erpc_in_vec->elements[i].data,
+ erpc_in_vec->elements[i].dataLength};
+ }
+
+ for (i = 0; i < out_len; ++i) {
+ out_vec[i] = (psa_outvec){erpc_out_vec->elements[i].data,
+ erpc_out_vec->elements[i].dataLength};
+ }
+
+ status = psa_call(handle, t, in_vec, in_len, out_vec, out_len);
+
+ /* Copy updated PSA outvec lens into RPC outvecs */
+ for (i = 0; i < out_len; ++i) {
+ erpc_out_vec->elements[i].dataLength = out_vec[i].len;
+ }
+
+ return status;
+}