RPC: Merge RPC PSA Client APIs
Originally, connection-based APIs are optional, depends on whether the
TF-M provides any.
So the RPC APIs are also separated so that they can be selected.
Later, the APIs are always provided with returning NOT SUPPORTED in case
of no connection-based APIs.
And the RPC test framework followed up by always building all the APIs.
This patch makes it further by merging all the APIs.
Change-Id: I923c24e5e83cae4e3d8f4774d776dbe8d07610c2
Signed-off-by: Kevin Peng <kevin.peng@arm.com>
diff --git a/erpc/client/CMakeLists.txt b/erpc/client/CMakeLists.txt
index 53658aa..9472dc0 100644
--- a/erpc/client/CMakeLists.txt
+++ b/erpc/client/CMakeLists.txt
@@ -51,8 +51,7 @@
${ERPC_REPO_PATH}/erpc_c/setup/erpc_client_setup.cpp
${ERPC_REPO_PATH}/erpc_c/setup/erpc_setup_mbf_dynamic.cpp
# Generated files
- ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_psa_client_api_client.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_psa_connection_api_client.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_client.cpp
)
target_include_directories(erpc_client
diff --git a/erpc/client/erpc_client_wrapper.c b/erpc/client/erpc_client_wrapper.c
index 37b5f82..4b23f5f 100644
--- a/erpc/client/erpc_client_wrapper.c
+++ b/erpc/client/erpc_client_wrapper.c
@@ -7,7 +7,7 @@
#include <stddef.h>
#include "psa/client.h"
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
psa_status_t psa_call(psa_handle_t handle, int32_t type,
const psa_invec *in_vec, size_t in_len,
diff --git a/erpc/generated_files/tfm_erpc_psa_client_api.h b/erpc/generated_files/tfm_erpc.h
similarity index 78%
rename from erpc/generated_files/tfm_erpc_psa_client_api.h
rename to erpc/generated_files/tfm_erpc.h
index 6b6760e..0bff49a 100644
--- a/erpc/generated_files/tfm_erpc_psa_client_api.h
+++ b/erpc/generated_files/tfm_erpc.h
@@ -1,19 +1,19 @@
/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
+ * Generated by erpcgen 1.9.1 on Fri Jul 21 17:28:31 2023.
*
* AUTOGENERATED - DO NOT EDIT
*/
-#if !defined(_tfm_erpc_psa_client_api_h_)
-#define _tfm_erpc_psa_client_api_h_
+#if !defined(_tfm_erpc_h_)
+#define _tfm_erpc_h_
#include <stdbool.h>
#include <stddef.h>
@@ -55,6 +55,8 @@
kpsa_client_api_psa_framework_version_id = 1,
kpsa_client_api_psa_version_id = 2,
kpsa_client_api_erpc_psa_call_id = 3,
+ kpsa_client_api_psa_connect_id = 4,
+ kpsa_client_api_psa_close_id = 5,
};
#if defined(__cplusplus)
@@ -68,10 +70,14 @@
uint32_t psa_version(uint32_t sid);
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_handle_t psa_connect(uint32_t sid, uint32_t ver);
+
+void psa_close(psa_handle_t handle);
//@}
#if defined(__cplusplus)
}
#endif
-#endif // _tfm_erpc_psa_client_api_h_
+#endif // _tfm_erpc_h_
diff --git a/erpc/generated_files/tfm_erpc_psa_client_api_client.cpp b/erpc/generated_files/tfm_erpc_client.cpp
similarity index 71%
rename from erpc/generated_files/tfm_erpc_psa_client_api_client.cpp
rename to erpc/generated_files/tfm_erpc_client.cpp
index fa7dee9..11c6fae 100644
--- a/erpc/generated_files/tfm_erpc_psa_client_api_client.cpp
+++ b/erpc/generated_files/tfm_erpc_client.cpp
@@ -1,12 +1,12 @@
/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
+ * Generated by erpcgen 1.9.1 on Fri Jul 21 17:28:31 2023.
*
* AUTOGENERATED - DO NOT EDIT
*/
@@ -19,9 +19,7 @@
#include "erpc_codec.h"
extern "C"
{
-#include "tfm_erpc_psa_client_api.h"
-// import callbacks declaration from other groups
-#include "tfm_erpc_psa_connection_api.h"
+#include "tfm_erpc.h"
}
#if 10901 != ERPC_VERSION_NUMBER
@@ -298,3 +296,123 @@
return result;
}
+
+// psa_client_api interface psa_connect function client shim.
+psa_handle_t psa_connect(uint32_t sid, uint32_t ver)
+{
+ erpc_status_t err = kErpcStatus_Success;
+
+ psa_handle_t result;
+
+#if ERPC_PRE_POST_ACTION
+ pre_post_action_cb preCB = g_client->getPreCB();
+ if (preCB)
+ {
+ preCB();
+ }
+#endif
+
+ // Get a new request.
+ RequestContext request = g_client->createRequest(false);
+
+ // Encode the request.
+ Codec * codec = request.getCodec();
+
+ if (codec == NULL)
+ {
+ err = kErpcStatus_MemoryError;
+ }
+ else
+ {
+ codec->startWriteMessage(kInvocationMessage, kpsa_client_api_service_id, kpsa_client_api_psa_connect_id, request.getSequence());
+
+ codec->write(sid);
+
+ codec->write(ver);
+
+ // Send message to server
+ // Codec status is checked inside this function.
+ g_client->performRequest(request);
+
+ codec->read(&result);
+
+ err = codec->getStatus();
+ }
+
+ // Dispose of the request.
+ g_client->releaseRequest(request);
+
+ // Invoke error handler callback function
+ g_client->callErrorHandler(err, kpsa_client_api_psa_connect_id);
+
+#if ERPC_PRE_POST_ACTION
+ pre_post_action_cb postCB = g_client->getPostCB();
+ if (postCB)
+ {
+ postCB();
+ }
+#endif
+
+
+ if (err != kErpcStatus_Success)
+ {
+ result = -1;
+ }
+
+ return result;
+}
+
+// psa_client_api interface psa_close function client shim.
+void psa_close(psa_handle_t handle)
+{
+ erpc_status_t err = kErpcStatus_Success;
+
+
+#if ERPC_PRE_POST_ACTION
+ pre_post_action_cb preCB = g_client->getPreCB();
+ if (preCB)
+ {
+ preCB();
+ }
+#endif
+
+ // Get a new request.
+ RequestContext request = g_client->createRequest(false);
+
+ // Encode the request.
+ Codec * codec = request.getCodec();
+
+ if (codec == NULL)
+ {
+ err = kErpcStatus_MemoryError;
+ }
+ else
+ {
+ codec->startWriteMessage(kInvocationMessage, kpsa_client_api_service_id, kpsa_client_api_psa_close_id, request.getSequence());
+
+ codec->write(handle);
+
+ // Send message to server
+ // Codec status is checked inside this function.
+ g_client->performRequest(request);
+
+ err = codec->getStatus();
+ }
+
+ // Dispose of the request.
+ g_client->releaseRequest(request);
+
+ // Invoke error handler callback function
+ g_client->callErrorHandler(err, kpsa_client_api_psa_close_id);
+
+#if ERPC_PRE_POST_ACTION
+ pre_post_action_cb postCB = g_client->getPostCB();
+ if (postCB)
+ {
+ postCB();
+ }
+#endif
+
+
+ return;
+}
diff --git a/erpc/generated_files/tfm_erpc_psa_connection_api.h b/erpc/generated_files/tfm_erpc_psa_connection_api.h
deleted file mode 100644
index 4155916..0000000
--- a/erpc/generated_files/tfm_erpc_psa_connection_api.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
- *
- * AUTOGENERATED - DO NOT EDIT
- */
-
-
-#if !defined(_tfm_erpc_psa_connection_api_h_)
-#define _tfm_erpc_psa_connection_api_h_
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-#include "erpc_version.h"
-#include "psa/client.h"
-
-#if 10901 != ERPC_VERSION_NUMBER
-#error "The generated shim code version is different to the rest of eRPC code."
-#endif
-
-#if !defined(ERPC_TYPE_DEFINITIONS)
-#define ERPC_TYPE_DEFINITIONS
-
-// Aliases data types declarations
-typedef struct list_binary_1_t list_binary_1_t;
-typedef struct binary_t binary_t;
-
-// Structures/unions data types declarations
-struct list_binary_1_t
-{
- binary_t * elements;
- uint32_t elementsCount;
-};
-
-struct binary_t
-{
- uint8_t * data;
- uint32_t dataLength;
-};
-
-
-#endif // ERPC_TYPE_DEFINITIONS
-
-/*! @brief psa_connection_api identifiers */
-enum _psa_connection_api_ids
-{
- kpsa_connection_api_service_id = 2,
- kpsa_connection_api_psa_connect_id = 1,
- kpsa_connection_api_psa_close_id = 2,
-};
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-//! @name psa_connection_api
-//@{
-psa_handle_t psa_connect(uint32_t sid, uint32_t ver);
-
-void psa_close(psa_handle_t handle);
-//@}
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif // _tfm_erpc_psa_connection_api_h_
diff --git a/erpc/generated_files/tfm_erpc_psa_connection_api_client.cpp b/erpc/generated_files/tfm_erpc_psa_connection_api_client.cpp
deleted file mode 100644
index ab24967..0000000
--- a/erpc/generated_files/tfm_erpc_psa_connection_api_client.cpp
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
- *
- * AUTOGENERATED - DO NOT EDIT
- */
-
-
-#include "erpc_client_manager.h"
-#if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
-#include "erpc_port.h"
-#endif
-#include "erpc_codec.h"
-extern "C"
-{
-#include "tfm_erpc_psa_connection_api.h"
-// import callbacks declaration from other groups
-#include "tfm_erpc_psa_client_api.h"
-}
-
-#if 10901 != ERPC_VERSION_NUMBER
-#error "The generated shim code version is different to the rest of eRPC code."
-#endif
-
-using namespace erpc;
-using namespace std;
-
-extern ClientManager *g_client;
-
-
-// psa_connection_api interface psa_connect function client shim.
-psa_handle_t psa_connect(uint32_t sid, uint32_t ver)
-{
- erpc_status_t err = kErpcStatus_Success;
-
- psa_handle_t result;
-
-#if ERPC_PRE_POST_ACTION
- pre_post_action_cb preCB = g_client->getPreCB();
- if (preCB)
- {
- preCB();
- }
-#endif
-
- // Get a new request.
- RequestContext request = g_client->createRequest(false);
-
- // Encode the request.
- Codec * codec = request.getCodec();
-
- if (codec == NULL)
- {
- err = kErpcStatus_MemoryError;
- }
- else
- {
- codec->startWriteMessage(kInvocationMessage, kpsa_connection_api_service_id, kpsa_connection_api_psa_connect_id, request.getSequence());
-
- codec->write(sid);
-
- codec->write(ver);
-
- // Send message to server
- // Codec status is checked inside this function.
- g_client->performRequest(request);
-
- codec->read(&result);
-
- err = codec->getStatus();
- }
-
- // Dispose of the request.
- g_client->releaseRequest(request);
-
- // Invoke error handler callback function
- g_client->callErrorHandler(err, kpsa_connection_api_psa_connect_id);
-
-#if ERPC_PRE_POST_ACTION
- pre_post_action_cb postCB = g_client->getPostCB();
- if (postCB)
- {
- postCB();
- }
-#endif
-
-
- if (err != kErpcStatus_Success)
- {
- result = -1;
- }
-
- return result;
-}
-
-// psa_connection_api interface psa_close function client shim.
-void psa_close(psa_handle_t handle)
-{
- erpc_status_t err = kErpcStatus_Success;
-
-
-#if ERPC_PRE_POST_ACTION
- pre_post_action_cb preCB = g_client->getPreCB();
- if (preCB)
- {
- preCB();
- }
-#endif
-
- // Get a new request.
- RequestContext request = g_client->createRequest(false);
-
- // Encode the request.
- Codec * codec = request.getCodec();
-
- if (codec == NULL)
- {
- err = kErpcStatus_MemoryError;
- }
- else
- {
- codec->startWriteMessage(kInvocationMessage, kpsa_connection_api_service_id, kpsa_connection_api_psa_close_id, request.getSequence());
-
- codec->write(handle);
-
- // Send message to server
- // Codec status is checked inside this function.
- g_client->performRequest(request);
-
- err = codec->getStatus();
- }
-
- // Dispose of the request.
- g_client->releaseRequest(request);
-
- // Invoke error handler callback function
- g_client->callErrorHandler(err, kpsa_connection_api_psa_close_id);
-
-#if ERPC_PRE_POST_ACTION
- pre_post_action_cb postCB = g_client->getPostCB();
- if (postCB)
- {
- postCB();
- }
-#endif
-
-
- return;
-}
diff --git a/erpc/generated_files/tfm_erpc_psa_connection_api_server.cpp b/erpc/generated_files/tfm_erpc_psa_connection_api_server.cpp
deleted file mode 100644
index 8e51d8d..0000000
--- a/erpc/generated_files/tfm_erpc_psa_connection_api_server.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
- *
- * AUTOGENERATED - DO NOT EDIT
- */
-
-
-#include "tfm_erpc_psa_connection_api_server.h"
-#if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
-#include <new>
-#include "erpc_port.h"
-#endif
-#include "erpc_manually_constructed.h"
-
-#if 10901 != ERPC_VERSION_NUMBER
-#error "The generated shim code version is different to the rest of eRPC code."
-#endif
-
-using namespace erpc;
-using namespace std;
-
-#if ERPC_NESTED_CALLS_DETECTION
-extern bool nestingDetection;
-#endif
-
-ERPC_MANUALLY_CONSTRUCTED_STATIC(psa_connection_api_service, s_psa_connection_api_service);
-
-
-
-// Call the correct server shim based on method unique ID.
-erpc_status_t psa_connection_api_service::handleInvocation(uint32_t methodId, uint32_t sequence, Codec * codec, MessageBufferFactory *messageFactory)
-{
- erpc_status_t erpcStatus;
- switch (methodId)
- {
- case kpsa_connection_api_psa_connect_id:
- {
- erpcStatus = psa_connect_shim(codec, messageFactory, sequence);
- break;
- }
-
- case kpsa_connection_api_psa_close_id:
- {
- erpcStatus = psa_close_shim(codec, messageFactory, sequence);
- break;
- }
-
- default:
- {
- erpcStatus = kErpcStatus_InvalidArgument;
- break;
- }
- }
-
- return erpcStatus;
-}
-
-// Server shim for psa_connect of psa_connection_api interface.
-erpc_status_t psa_connection_api_service::psa_connect_shim(Codec * codec, MessageBufferFactory *messageFactory, uint32_t sequence)
-{
- erpc_status_t err = kErpcStatus_Success;
-
- uint32_t sid;
- uint32_t ver;
- psa_handle_t result;
-
- // startReadMessage() was already called before this shim was invoked.
-
- codec->read(&sid);
-
- codec->read(&ver);
-
- err = codec->getStatus();
- if (err == kErpcStatus_Success)
- {
- // Invoke the actual served function.
-#if ERPC_NESTED_CALLS_DETECTION
- nestingDetection = true;
-#endif
- result = psa_connect(sid, ver);
-#if ERPC_NESTED_CALLS_DETECTION
- nestingDetection = false;
-#endif
-
- // preparing MessageBuffer for serializing data
- err = messageFactory->prepareServerBufferForSend(codec->getBuffer());
- }
-
- if (err == kErpcStatus_Success)
- {
- // preparing codec for serializing data
- codec->reset();
-
- // Build response message.
- codec->startWriteMessage(kReplyMessage, kpsa_connection_api_service_id, kpsa_connection_api_psa_connect_id, sequence);
-
- codec->write(result);
-
- err = codec->getStatus();
- }
-
- return err;
-}
-
-// Server shim for psa_close of psa_connection_api interface.
-erpc_status_t psa_connection_api_service::psa_close_shim(Codec * codec, MessageBufferFactory *messageFactory, uint32_t sequence)
-{
- erpc_status_t err = kErpcStatus_Success;
-
- psa_handle_t handle;
-
- // startReadMessage() was already called before this shim was invoked.
-
- codec->read(&handle);
-
- err = codec->getStatus();
- if (err == kErpcStatus_Success)
- {
- // Invoke the actual served function.
-#if ERPC_NESTED_CALLS_DETECTION
- nestingDetection = true;
-#endif
- psa_close(handle);
-#if ERPC_NESTED_CALLS_DETECTION
- nestingDetection = false;
-#endif
-
- // preparing MessageBuffer for serializing data
- err = messageFactory->prepareServerBufferForSend(codec->getBuffer());
- }
-
- if (err == kErpcStatus_Success)
- {
- // preparing codec for serializing data
- codec->reset();
-
- // Build response message.
- codec->startWriteMessage(kReplyMessage, kpsa_connection_api_service_id, kpsa_connection_api_psa_close_id, sequence);
-
- err = codec->getStatus();
- }
-
- return err;
-}
-
-#if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
-erpc_service_t create_psa_connection_api_service()
-{
- return new (nothrow) psa_connection_api_service();
-}
-
-void destroy_psa_connection_api_service(erpc_service_t service)
-{
- if (service)
- {
- delete (psa_connection_api_service *)service;
- }
-}
-#elif ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_STATIC
-erpc_service_t create_psa_connection_api_service()
-{
- s_psa_connection_api_service.construct();
- return s_psa_connection_api_service.get();
-}
-
-void destroy_psa_connection_api_service()
-{
- s_psa_connection_api_service.destroy();
-}
-#else
-#warning "Unknown eRPC allocation policy!"
-#endif
diff --git a/erpc/generated_files/tfm_erpc_psa_connection_api_server.h b/erpc/generated_files/tfm_erpc_psa_connection_api_server.h
deleted file mode 100644
index 01dbc1f..0000000
--- a/erpc/generated_files/tfm_erpc_psa_connection_api_server.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
- *
- * AUTOGENERATED - DO NOT EDIT
- */
-
-
-#if !defined(_tfm_erpc_psa_connection_api_server_h_)
-#define _tfm_erpc_psa_connection_api_server_h_
-
-#ifdef __cplusplus
-#include "erpc_server.h"
-#include "erpc_codec.h"
-extern "C"
-{
-#include "tfm_erpc_psa_connection_api.h"
-#include <stdint.h>
-#include <stdbool.h>
-}
-
-#if 10901 != ERPC_VERSION_NUMBER
-#error "The generated shim code version is different to the rest of eRPC code."
-#endif
-
-
-/*!
- * @brief Service subclass for psa_connection_api.
- */
-class psa_connection_api_service : public erpc::Service
-{
-public:
- psa_connection_api_service() : Service(kpsa_connection_api_service_id) {}
-
- /*! @brief Call the correct server shim based on method unique ID. */
- virtual erpc_status_t handleInvocation(uint32_t methodId, uint32_t sequence, erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory);
-
-private:
- /*! @brief Server shim for psa_connect of psa_connection_api interface. */
- erpc_status_t psa_connect_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
-
- /*! @brief Server shim for psa_close of psa_connection_api interface. */
- erpc_status_t psa_close_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
-};
-
-extern "C" {
-#else
-#include "tfm_erpc_psa_connection_api.h"
-#endif // __cplusplus
-
-typedef void * erpc_service_t;
-
-erpc_service_t create_psa_connection_api_service(void);
-
-#if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
-void destroy_psa_connection_api_service(erpc_service_t service);
-#elif ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_STATIC
-void destroy_psa_connection_api_service(void);
-#else
-#warning "Unknown eRPC allocation policy!"
-#endif
-
-#ifdef __cplusplus
-}
-#endif // __cplusplus
-
-#endif // _tfm_erpc_psa_connection_api_server_h_
diff --git a/erpc/generated_files/tfm_erpc_psa_client_api_server.cpp b/erpc/generated_files/tfm_erpc_server.cpp
similarity index 75%
rename from erpc/generated_files/tfm_erpc_psa_client_api_server.cpp
rename to erpc/generated_files/tfm_erpc_server.cpp
index 82fb722..d2ec345 100644
--- a/erpc/generated_files/tfm_erpc_psa_client_api_server.cpp
+++ b/erpc/generated_files/tfm_erpc_server.cpp
@@ -1,18 +1,18 @@
/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
+ * Generated by erpcgen 1.9.1 on Fri Jul 21 17:28:31 2023.
*
* AUTOGENERATED - DO NOT EDIT
*/
-#include "tfm_erpc_psa_client_api_server.h"
+#include "tfm_erpc_server.h"
#if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
#include <new>
#include "erpc_port.h"
@@ -126,7 +126,10 @@
// Free space allocated inside struct binary_t function implementation
static void free_binary_t_struct(binary_t * data)
{
- erpc_free(data->data);
+ if (data->data)
+ {
+ erpc_free(data->data);
+ }
}
// Free space allocated inside struct list_binary_1_t function implementation
@@ -137,7 +140,10 @@
free_binary_t_struct(&data->elements[listCount]);
}
- erpc_free(data->elements);
+ if (data->elements)
+ {
+ erpc_free(data->elements);
+ }
}
@@ -166,6 +172,18 @@
break;
}
+ case kpsa_client_api_psa_connect_id:
+ {
+ erpcStatus = psa_connect_shim(codec, messageFactory, sequence);
+ break;
+ }
+
+ case kpsa_client_api_psa_close_id:
+ {
+ erpcStatus = psa_close_shim(codec, messageFactory, sequence);
+ break;
+ }
+
default:
{
erpcStatus = kErpcStatus_InvalidArgument;
@@ -327,13 +345,107 @@
{
free_list_binary_1_t_struct(erpc_in_vec);
}
- erpc_free(erpc_in_vec);
+ if (erpc_in_vec)
+ {
+ erpc_free(erpc_in_vec);
+ }
if (erpc_out_vec)
{
free_list_binary_1_t_struct(erpc_out_vec);
}
- erpc_free(erpc_out_vec);
+ if (erpc_out_vec)
+ {
+ erpc_free(erpc_out_vec);
+ }
+
+ return err;
+}
+
+// Server shim for psa_connect of psa_client_api interface.
+erpc_status_t psa_client_api_service::psa_connect_shim(Codec * codec, MessageBufferFactory *messageFactory, uint32_t sequence)
+{
+ erpc_status_t err = kErpcStatus_Success;
+
+ uint32_t sid;
+ uint32_t ver;
+ psa_handle_t result;
+
+ // startReadMessage() was already called before this shim was invoked.
+
+ codec->read(&sid);
+
+ codec->read(&ver);
+
+ err = codec->getStatus();
+ if (err == kErpcStatus_Success)
+ {
+ // Invoke the actual served function.
+#if ERPC_NESTED_CALLS_DETECTION
+ nestingDetection = true;
+#endif
+ result = psa_connect(sid, ver);
+#if ERPC_NESTED_CALLS_DETECTION
+ nestingDetection = false;
+#endif
+
+ // preparing MessageBuffer for serializing data
+ err = messageFactory->prepareServerBufferForSend(codec->getBuffer());
+ }
+
+ if (err == kErpcStatus_Success)
+ {
+ // preparing codec for serializing data
+ codec->reset();
+
+ // Build response message.
+ codec->startWriteMessage(kReplyMessage, kpsa_client_api_service_id, kpsa_client_api_psa_connect_id, sequence);
+
+ codec->write(result);
+
+ err = codec->getStatus();
+ }
+
+ return err;
+}
+
+// Server shim for psa_close of psa_client_api interface.
+erpc_status_t psa_client_api_service::psa_close_shim(Codec * codec, MessageBufferFactory *messageFactory, uint32_t sequence)
+{
+ erpc_status_t err = kErpcStatus_Success;
+
+ psa_handle_t handle;
+
+ // startReadMessage() was already called before this shim was invoked.
+
+ codec->read(&handle);
+
+ err = codec->getStatus();
+ if (err == kErpcStatus_Success)
+ {
+ // Invoke the actual served function.
+#if ERPC_NESTED_CALLS_DETECTION
+ nestingDetection = true;
+#endif
+ psa_close(handle);
+#if ERPC_NESTED_CALLS_DETECTION
+ nestingDetection = false;
+#endif
+
+ // preparing MessageBuffer for serializing data
+ err = messageFactory->prepareServerBufferForSend(codec->getBuffer());
+ }
+
+ if (err == kErpcStatus_Success)
+ {
+ // preparing codec for serializing data
+ codec->reset();
+
+ // Build response message.
+ codec->startWriteMessage(kReplyMessage, kpsa_client_api_service_id, kpsa_client_api_psa_close_id, sequence);
+
+ err = codec->getStatus();
+ }
return err;
}
diff --git a/erpc/generated_files/tfm_erpc_psa_client_api_server.h b/erpc/generated_files/tfm_erpc_server.h
similarity index 74%
rename from erpc/generated_files/tfm_erpc_psa_client_api_server.h
rename to erpc/generated_files/tfm_erpc_server.h
index 3146840..b8162a4 100644
--- a/erpc/generated_files/tfm_erpc_psa_client_api_server.h
+++ b/erpc/generated_files/tfm_erpc_server.h
@@ -1,26 +1,26 @@
/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
+ * Generated by erpcgen 1.9.1 on Fri Jul 21 17:28:31 2023.
*
* AUTOGENERATED - DO NOT EDIT
*/
-#if !defined(_tfm_erpc_psa_client_api_server_h_)
-#define _tfm_erpc_psa_client_api_server_h_
+#if !defined(_tfm_erpc_server_h_)
+#define _tfm_erpc_server_h_
#ifdef __cplusplus
#include "erpc_server.h"
#include "erpc_codec.h"
extern "C"
{
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
#include <stdint.h>
#include <stdbool.h>
}
@@ -50,11 +50,17 @@
/*! @brief Server shim for erpc_psa_call of psa_client_api interface. */
erpc_status_t erpc_psa_call_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
+
+ /*! @brief Server shim for psa_connect of psa_client_api interface. */
+ erpc_status_t psa_connect_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
+
+ /*! @brief Server shim for psa_close of psa_client_api interface. */
+ erpc_status_t psa_close_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
};
extern "C" {
#else
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
#endif // __cplusplus
typedef void * erpc_service_t;
@@ -73,4 +79,4 @@
}
#endif // __cplusplus
-#endif // _tfm_erpc_psa_client_api_server_h_
+#endif // _tfm_erpc_server_h_
diff --git a/erpc/host_example/main.c b/erpc/host_example/main.c
index 1545525..c2d1357 100644
--- a/erpc/host_example/main.c
+++ b/erpc/host_example/main.c
@@ -10,7 +10,7 @@
#include <string.h>
#include "erpc_port.h"
#include "erpc_client_start.h"
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
#include "tfm_crypto_defs.h"
#include "psa/client.h"
#include "psa/crypto.h"
diff --git a/erpc/server/CMakeLists.txt b/erpc/server/CMakeLists.txt
index 0562f7f..8e43295 100644
--- a/erpc/server/CMakeLists.txt
+++ b/erpc/server/CMakeLists.txt
@@ -37,8 +37,7 @@
${ERPC_REPO_PATH}/erpc_c/setup/erpc_setup_mbf_dynamic.cpp
${ERPC_REPO_PATH}/erpc_c/setup/erpc_server_setup.cpp
# Generated files
- ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_psa_client_api_server.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_psa_connection_api_server.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_server.cpp
)
target_include_directories(erpc_server
diff --git a/erpc/server/erpc_server_start.c b/erpc/server/erpc_server_start.c
index 4d27876..ca3b6e9 100644
--- a/erpc/server/erpc_server_start.c
+++ b/erpc/server/erpc_server_start.c
@@ -9,14 +9,12 @@
#include "erpc_mbf_setup.h"
#include "erpc_server_setup.h"
-#include "tfm_erpc_psa_client_api_server.h"
-#include "tfm_erpc_psa_connection_api_server.h"
+#include "tfm_erpc_server.h"
void erpc_server_start(erpc_transport_t transport)
{
erpc_server_init(transport, erpc_mbf_dynamic_init());
erpc_add_service_to_server(create_psa_client_api_service());
- erpc_add_service_to_server(create_psa_connection_api_service());
erpc_server_run();
diff --git a/erpc/server/erpc_server_wrapper.c b/erpc/server/erpc_server_wrapper.c
index 8215c9a..b27a1da 100644
--- a/erpc/server/erpc_server_wrapper.c
+++ b/erpc/server/erpc_server_wrapper.c
@@ -7,7 +7,7 @@
#include <stddef.h>
#include "psa/client.h"
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
psa_status_t erpc_psa_call(psa_handle_t handle, int32_t t,
const list_binary_1_t *erpc_in_vec,
diff --git a/erpc/tfm.erpc b/erpc/tfm.erpc
index 20a7d1e..ace775e 100644
--- a/erpc/tfm.erpc
+++ b/erpc/tfm.erpc
@@ -12,13 +12,10 @@
@external type psa_handle_t = int32
@external type psa_status_t = int32
-@group(psa_client_api) interface psa_client_api {
+interface psa_client_api {
psa_framework_version() -> uint32
psa_version(uint32 sid) -> uint32
erpc_psa_call(psa_handle_t handle, int32 t, list<binary> erpc_in_vec, inout list<binary> erpc_out_vec) -> psa_status_t
-}
-
-@group(psa_connection_api) interface psa_connection_api {
psa_connect(uint32 sid, uint32 ver) -> psa_handle_t
psa_close(psa_handle_t handle) -> void
}