-
Notifications
You must be signed in to change notification settings - Fork 224
/
Copy pathmain_server.cpp
137 lines (113 loc) · 3.31 KB
/
main_server.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
* Copyright 2024 NXP
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "erpc_matrix_multiply_server.hpp"
#include "erpc_basic_codec.hpp"
#include "erpc_crc16.hpp"
#include "erpc_message_buffer.hpp"
#include "erpc_simple_server.hpp"
#include "erpc_tcp_transport.hpp"
#include "erpc_error_handler.h"
#include <iostream>
using namespace erpcShim;
using namespace erpc;
////////////////////////////////////////////////////////////////////////////////
// Variables
////////////////////////////////////////////////////////////////////////////////
bool g_runServer = true;
////////////////////////////////////////////////////////////////////////////////
// Classes
////////////////////////////////////////////////////////////////////////////////
class MyMessageBufferFactory : public MessageBufferFactory
{
public:
virtual MessageBuffer create()
{
uint8_t *buf = new uint8_t[ERPC_DEFAULT_BUFFER_SIZE];
return MessageBuffer(buf, ERPC_DEFAULT_BUFFER_SIZE);
}
virtual void dispose(MessageBuffer *buf)
{
erpc_assert(buf);
if (*buf)
{
delete[] buf->get();
}
}
};
class MatrixMultiplyService : public MatrixMultiplyService_interface
{
void erpcMatrixMultiply(Matrix matrix1, Matrix matrix2, Matrix result_matrix)
{
int32_t i, j, k;
/* Clear the result matrix */
for (i = 0; i < matrix_size; ++i)
{
for (j = 0; j < matrix_size; ++j)
{
result_matrix[i][j] = 0;
}
}
/* Multiply two matrices */
for (i = 0; i < matrix_size; ++i)
{
for (j = 0; j < matrix_size; ++j)
{
for (k = 0; k < matrix_size; ++k)
{
result_matrix[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
}
void quitServer()
{
g_runServer = false;
}
};
////////////////////////////////////////////////////////////////////////////////
// Code
////////////////////////////////////////////////////////////////////////////////
int main()
{
erpc_status_t status;
/* Init eRPC server components */
TCPTransport transport(EXAMPLE_TCP_HOST, EXAMPLE_TCP_PORT, true);
MyMessageBufferFactory msgFactory;
BasicCodecFactory codecFactory;
SimpleServer server;
Crc16 crc16;
/* Init service implementation and handler */
MatrixMultiplyService textServiceImpl;
MatrixMultiplyService_service textService(&textServiceImpl);
/* Setup transport */
transport.setCrc16(&crc16);
status = transport.open();
if (status != kErpcStatus_Success)
{
/* Print error description */
erpc_error_handler(status, 0);
return -1;
}
/* Setup server */
server.setTransport(&transport);
server.setCodecFactory(&codecFactory);
server.setMessageBufferFactory(&msgFactory);
/* add custom service implementation to the server */
server.addService(&textService);
while (g_runServer)
{
/* poll for requests */
status = server.poll();
/* handle error status */
if (status != kErpcStatus_Success)
{
/* print error description */
erpc_error_handler(status, 0);
}
}
/* Close transport */
transport.close();
}