cmvr_head/packages/erpc-1.14.0/test/common/unit_test_server.cpp

154 lines
4.0 KiB
C++
Raw Permalink Normal View History

2025-12-30 15:44:41 +08:00
/*
* Copyright (c) 2014-2016, Freescale Semiconductor, Inc.
* Copyright 2016 - 2023 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "erpc_mbf_setup.h"
#include "erpc_server_setup.h"
#include "erpc_simple_server.hpp"
#include "erpc_transport_setup.h"
#if (defined(RPMSG) || defined(UART) || defined(MU))
extern "C" {
#if defined(UART)
/* clang-format off */
#include "fsl_lpuart_cmsis.h"
#include "app_core0.h"
/* clang-format on */
#else
#if defined(RPMSG)
#include "rpmsg_lite.h"
#endif
#define APP_ERPC_READY_EVENT_DATA (1)
/* clang-format off */
#include "mcmgr.h"
#include "app_core1.h"
/* clang-format on */
#endif
#if defined(__CC_ARM) || defined(__ARMCC_VERSION)
int main(void);
#endif
}
#endif
#include "board.h"
#include "c_test_unit_test_common_server.h"
#include "myAlloc.hpp"
#include "unit_test_wrapped.h"
////////////////////////////////////////////////////////////////////////////////
// Variables
////////////////////////////////////////////////////////////////////////////////
int ::MyAlloc::allocated_ = 0;
erpc_service_t service_common = NULL;
erpc_server_t server;
////////////////////////////////////////////////////////////////////////////////
// Code
////////////////////////////////////////////////////////////////////////////////
#if (defined(RPMSG) || defined(MU))
static void SignalReady(void)
{
/* Signal the other core we are ready by trigerring the event and passing the APP_ERPC_READY_EVENT_DATA */
MCMGR_TriggerEvent(kMCMGR_RemoteApplicationEvent, APP_ERPC_READY_EVENT_DATA);
}
#endif
int main(void)
{
BOARD_InitHardware();
#if (defined(RPMSG) || defined(MU))
uint32_t startupData;
mcmgr_status_t status;
/* Initialize MCMGR before calling its API */
MCMGR_Init();
/* Get the startup data */
do
{
status = MCMGR_GetStartupData(&startupData);
} while (status != kStatus_MCMGR_Success);
#endif
erpc_transport_t transport;
erpc_mbf_t message_buffer_factory;
#if defined(RPMSG)
transport = erpc_transport_rpmsg_lite_remote_init(101, 100, (void *)startupData, ERPC_TRANSPORT_RPMSG_LITE_LINK_ID,
SignalReady, NULL);
message_buffer_factory = erpc_mbf_rpmsg_init(transport);
#elif defined(UART)
transport = erpc_transport_cmsis_uart_init((void *)&Driver_USART0);
message_buffer_factory = erpc_mbf_dynamic_init();
#elif defined(MU)
transport = erpc_transport_mu_init(MU_BASE);
message_buffer_factory = erpc_mbf_dynamic_init();
#endif
/* Init server */
server = erpc_server_init(transport, message_buffer_factory);
/* Add test services. This function call erpc_add_service_to_server for all necessary services. */
add_services_to_server(server);
/* Add common service */
add_common_service(server);
#if defined(MU)
SignalReady();
#endif
/* Add run server */
erpc_server_run(server);
/* Deinit server */
erpc_server_deinit(server);
return 0;
}
////////////////////////////////////////////////////////////////////////////////
// Server helper functions
////////////////////////////////////////////////////////////////////////////////
void add_common_service(erpc_server_t server)
{
service_common = create_Common_service();
erpc_add_service_to_server(server, service_common);
}
void remove_common_services_from_server(erpc_server_t server, erpc_service_t service)
{
erpc_remove_service_from_server(server, service);
destroy_Common_service(service);
}
////////////////////////////////////////////////////////////////////////////////
// Common service implementations here
////////////////////////////////////////////////////////////////////////////////
void quit()
{
/* removing common services from the server */
remove_common_services_from_server(server, service_common);
/* removing individual test services from the server */
remove_services_from_server(server);
erpc_server_stop(server);
}
int32_t getServerAllocated()
{
int result = ::MyAlloc::allocated();
::MyAlloc::allocated(0);
return result;
}