/* * Generated by erpcgen 1.14.0 on Tue Apr 28 12:01:23 2026. * * AUTOGENERATED - DO NOT EDIT */ #include "file_service_server.hpp" #if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC #include #include "erpc_port.h" #endif #include "erpc_manually_constructed.hpp" #if 11400 != ERPC_VERSION_NUMBER #error "The generated shim code version is different to the rest of eRPC code." #endif using namespace erpc; using namespace std; using namespace erpcShim; #if ERPC_NESTED_CALLS_DETECTION extern bool nestingDetection; #endif //! @brief Function to read struct binary_t static void read_binary_t_struct(erpc::Codec * codec, binary_t * data); // Read struct binary_t function implementation static void read_binary_t_struct(erpc::Codec * codec, binary_t * data) { if(NULL == data) { return; } uint8_t * data_local; codec->readBinary(data->dataLength, &data_local); if (data->dataLength > 0) { data->data = (uint8_t *) erpc_malloc(data->dataLength * sizeof(uint8_t)); if (data->data == NULL) { codec->updateStatus(kErpcStatus_MemoryError); } else { memcpy(data->data, data_local, data->dataLength); } } else { data->data = NULL; } } //! @brief Function to free space allocated inside struct binary_t static void free_binary_t_struct(binary_t * data); // Free space allocated inside struct binary_t function implementation static void free_binary_t_struct(binary_t * data) { erpc_free(data->data); } file_service_service::file_service_service(file_service_interface *_file_service_interface) : erpc::Service(file_service_interface::m_serviceId) , m_handler(_file_service_interface) { } file_service_service::~file_service_service() { } // return service interface handler. file_service_interface* file_service_service::getHandler(void) { return m_handler; } // Call the correct server shim based on method unique ID. erpc_status_t file_service_service::handleInvocation(uint32_t methodId, uint32_t sequence, Codec * codec, MessageBufferFactory *messageFactory, Transport * transport) { erpc_status_t erpcStatus; switch (methodId) { case file_service_interface::m_fileWriteBeginId: { erpcStatus = fileWriteBegin_shim(codec, messageFactory, transport, sequence); break; } case file_service_interface::m_fileWriteChunkId: { erpcStatus = fileWriteChunk_shim(codec, messageFactory, transport, sequence); break; } case file_service_interface::m_fileWriteEndId: { erpcStatus = fileWriteEnd_shim(codec, messageFactory, transport, sequence); break; } case file_service_interface::m_fileWriteAbortId: { erpcStatus = fileWriteAbort_shim(codec, messageFactory, transport, sequence); break; } default: { erpcStatus = kErpcStatus_InvalidArgument; break; } } return erpcStatus; } // Server shim for fileWriteBegin of file_service interface. erpc_status_t file_service_service::fileWriteBegin_shim(Codec * codec, MessageBufferFactory *messageFactory, Transport * transport, uint32_t sequence) { erpc_status_t err = kErpcStatus_Success; char * path = NULL; uint32_t total_size; int32_t result; // startReadMessage() was already called before this shim was invoked. { uint32_t path_len; char * path_local; codec->readString(path_len, &path_local); path = (char*) erpc_malloc((path_len + 1) * sizeof(char)); if ((path == NULL) || (path_local == NULL)) { codec->updateStatus(kErpcStatus_MemoryError); } else { memcpy(path, path_local, path_len); (path)[path_len] = 0; } } codec->read(total_size); err = codec->getStatus(); if (err == kErpcStatus_Success) { // Invoke the actual served function. #if ERPC_NESTED_CALLS_DETECTION nestingDetection = true; #endif result = m_handler->fileWriteBegin(path, total_size); #if ERPC_NESTED_CALLS_DETECTION nestingDetection = false; #endif // preparing MessageBuffer for serializing data err = messageFactory->prepareServerBufferForSend(codec->getBufferRef(), transport->reserveHeaderSize()); } if (err == kErpcStatus_Success) { // preparing codec for serializing data codec->reset(transport->reserveHeaderSize()); // Build response message. codec->startWriteMessage(message_type_t::kReplyMessage, file_service_interface::m_serviceId, file_service_interface::m_fileWriteBeginId, sequence); codec->write(result); err = codec->getStatus(); } erpc_free(path); return err; } // Server shim for fileWriteChunk of file_service interface. erpc_status_t file_service_service::fileWriteChunk_shim(Codec * codec, MessageBufferFactory *messageFactory, Transport * transport, uint32_t sequence) { erpc_status_t err = kErpcStatus_Success; binary_t *data = NULL; data = (binary_t *) erpc_malloc(sizeof(binary_t)); if (data == NULL) { codec->updateStatus(kErpcStatus_MemoryError); } int32_t result; // startReadMessage() was already called before this shim was invoked. read_binary_t_struct(codec, data); err = codec->getStatus(); if (err == kErpcStatus_Success) { // Invoke the actual served function. #if ERPC_NESTED_CALLS_DETECTION nestingDetection = true; #endif result = m_handler->fileWriteChunk(data); #if ERPC_NESTED_CALLS_DETECTION nestingDetection = false; #endif // preparing MessageBuffer for serializing data err = messageFactory->prepareServerBufferForSend(codec->getBufferRef(), transport->reserveHeaderSize()); } if (err == kErpcStatus_Success) { // preparing codec for serializing data codec->reset(transport->reserveHeaderSize()); // Build response message. codec->startWriteMessage(message_type_t::kReplyMessage, file_service_interface::m_serviceId, file_service_interface::m_fileWriteChunkId, sequence); codec->write(result); err = codec->getStatus(); } if (data) { free_binary_t_struct(data); } erpc_free(data); return err; } // Server shim for fileWriteEnd of file_service interface. erpc_status_t file_service_service::fileWriteEnd_shim(Codec * codec, MessageBufferFactory *messageFactory, Transport * transport, uint32_t sequence) { erpc_status_t err = kErpcStatus_Success; int32_t result; // startReadMessage() was already called before this shim was invoked. err = codec->getStatus(); if (err == kErpcStatus_Success) { // Invoke the actual served function. #if ERPC_NESTED_CALLS_DETECTION nestingDetection = true; #endif result = m_handler->fileWriteEnd(); #if ERPC_NESTED_CALLS_DETECTION nestingDetection = false; #endif // preparing MessageBuffer for serializing data err = messageFactory->prepareServerBufferForSend(codec->getBufferRef(), transport->reserveHeaderSize()); } if (err == kErpcStatus_Success) { // preparing codec for serializing data codec->reset(transport->reserveHeaderSize()); // Build response message. codec->startWriteMessage(message_type_t::kReplyMessage, file_service_interface::m_serviceId, file_service_interface::m_fileWriteEndId, sequence); codec->write(result); err = codec->getStatus(); } return err; } // Server shim for fileWriteAbort of file_service interface. erpc_status_t file_service_service::fileWriteAbort_shim(Codec * codec, MessageBufferFactory *messageFactory, Transport * transport, uint32_t sequence) { erpc_status_t err = kErpcStatus_Success; int32_t result; // startReadMessage() was already called before this shim was invoked. err = codec->getStatus(); if (err == kErpcStatus_Success) { // Invoke the actual served function. #if ERPC_NESTED_CALLS_DETECTION nestingDetection = true; #endif result = m_handler->fileWriteAbort(); #if ERPC_NESTED_CALLS_DETECTION nestingDetection = false; #endif // preparing MessageBuffer for serializing data err = messageFactory->prepareServerBufferForSend(codec->getBufferRef(), transport->reserveHeaderSize()); } if (err == kErpcStatus_Success) { // preparing codec for serializing data codec->reset(transport->reserveHeaderSize()); // Build response message. codec->startWriteMessage(message_type_t::kReplyMessage, file_service_interface::m_serviceId, file_service_interface::m_fileWriteAbortId, sequence); codec->write(result); err = codec->getStatus(); } return err; }