@@ -26,8 +26,6 @@ class BridgeClass {
2626
2727 struct k_mutex read_mutex;
2828 struct k_mutex write_mutex;
29- struct k_mutex server_mutex;
30- struct k_mutex client_mutex;
3129
3230 k_tid_t upd_tid;
3331 k_thread_stack_t *upd_stack_area;
@@ -46,8 +44,6 @@ class BridgeClass {
4644
4745 k_mutex_init (&read_mutex);
4846 k_mutex_init (&write_mutex);
49- k_mutex_init (&server_mutex);
50- k_mutex_init (&client_mutex);
5147
5248 client = new RPCClient (*transport);
5349 server = new RPCServer (*transport);
@@ -85,26 +81,25 @@ class BridgeClass {
8581
8682 void update () {
8783
88- if (k_mutex_lock (&server_mutex, K_MSEC (10 )) != 0 ) return ;
89-
9084 // Lock read mutex
9185 if (k_mutex_lock (&read_mutex, K_MSEC (10 )) != 0 ) return ;
9286
93- if (!server->get_rpc ()) {
87+ RPCRequest<> req;
88+ if (!server->get_rpc (req)) {
9489 k_mutex_unlock (&read_mutex);
9590 k_msleep (1 );
9691 return ;
9792 }
9893
9994 k_mutex_unlock (&read_mutex);
10095
101- server->process_request ();
96+ server->process_request (req );
10297
10398 // Lock write mutex
10499 while (true ) {
105100
106101 if (k_mutex_lock (&write_mutex, K_MSEC (10 )) == 0 ){
107- server->send_response ();
102+ server->send_response (req );
108103 k_mutex_unlock (&write_mutex);
109104 k_msleep (1 );
110105 break ;
@@ -114,19 +109,17 @@ class BridgeClass {
114109
115110 }
116111
117- k_mutex_unlock (&server_mutex);
118-
119112 }
120113
121114 template <typename RType, typename ... Args>
122115 bool call (const MsgPack::str_t method, RType& result, Args&&... args) {
123116
124- k_mutex_lock (&client_mutex, K_FOREVER) ;
117+ uint32_t msg_id_wait ;
125118
126119 // Lock write mutex
127120 while (true ) {
128121 if (k_mutex_lock (&write_mutex, K_MSEC (10 )) == 0 ) {
129- client->send_rpc (method, std::forward<Args>(args)...);
122+ client->send_rpc (method, msg_id_wait, std::forward<Args>(args)...);
130123 k_mutex_unlock (&write_mutex);
131124 k_msleep (1 );
132125 break ;
@@ -138,7 +131,7 @@ class BridgeClass {
138131 // Lock read mutex
139132 while (true ) {
140133 if (k_mutex_lock (&read_mutex, K_MSEC (10 )) == 0 ) {
141- if (client->get_response (result)) {
134+ if (client->get_response (msg_id_wait, result)) {
142135 k_mutex_unlock (&read_mutex);
143136 k_msleep (1 );
144137 break ;
@@ -153,8 +146,6 @@ class BridgeClass {
153146
154147 return (client->lastError .code == NO_ERR);
155148
156- k_mutex_unlock (&client_mutex);
157-
158149 }
159150
160151 template <typename ... Args>
@@ -174,26 +165,25 @@ class BridgeClass {
174165
175166 void update_safe () {
176167
177- if (k_mutex_lock (&server_mutex, K_MSEC (10 )) != 0 ) return ;
178-
179168 // Lock read mutex
180169 if (k_mutex_lock (&read_mutex, K_MSEC (10 )) != 0 ) return ;
181170
182- if (!server->get_rpc ()) {
171+ RPCRequest<> req;
172+ if (!server->get_rpc (req, " __safe__" )) {
183173 k_mutex_unlock (&read_mutex);
184174 k_msleep (1 );
185175 return ;
186176 }
187177
188178 k_mutex_unlock (&read_mutex);
189179
190- server->process_request (" __safe__ " );
180+ server->process_request (req );
191181
192182 // Lock write mutex
193183 while (true ) {
194184
195185 if (k_mutex_lock (&write_mutex, K_MSEC (10 )) == 0 ){
196- server->send_response ();
186+ server->send_response (req );
197187 k_mutex_unlock (&write_mutex);
198188 k_msleep (1 );
199189 break ;
@@ -202,8 +192,6 @@ class BridgeClass {
202192 }
203193
204194 }
205-
206- k_mutex_unlock (&server_mutex);
207195
208196 }
209197
0 commit comments