@@ -21,7 +21,14 @@ Debugger::Debugger(int socket) { this->socket = socket; }
21
21
22
22
void Debugger::addDebugMessage (size_t len, const uint8_t *buff) {
23
23
uint8_t *data = this ->parseDebugBuffer (len, buff);
24
- if (data != nullptr ) {
24
+ if (data != nullptr && *data == interruptRecvCallbackmapping) {
25
+ std::string text = (char *)buff;
26
+ auto *msg =
27
+ (uint8_t *)acalloc (sizeof (uint8_t ), len, " interrupt buffer" );
28
+ memcpy (msg, buff, len * sizeof (uint8_t ));
29
+ *msg = *data;
30
+ this ->debugMessages .push_back (msg);
31
+ } else if (data != nullptr ) {
25
32
this ->debugMessages .push_back (data);
26
33
}
27
34
}
@@ -235,13 +242,20 @@ bool Debugger::checkDebugMessages(Module *m, RunningState *program_state) {
235
242
dprintf (this ->socket , " }\n " );
236
243
break ;
237
244
case interruptPOPEvent:
238
- CallbackHandler::resolve_event ();
245
+ CallbackHandler::resolve_event (true );
239
246
break ;
240
247
#ifndef ARDUINO
241
248
case interruptPUSHEvent:
242
249
this ->handlePushedEvent (m, reinterpret_cast <char *>(interruptData));
243
250
break ;
251
+ case interruptRecvCallbackmapping:
252
+ this ->updateCallbackmapping (
253
+ m, reinterpret_cast <const char *>(interruptData + 2 ));
254
+ break ;
244
255
#endif
256
+ case interruptDUMPCallbackmapping:
257
+ this ->dumpCallbackmapping ();
258
+ break ;
245
259
default :
246
260
// handle later
247
261
dprintf (this ->socket , " COULD not parse interrupt data!\n " );
@@ -458,6 +472,10 @@ void Debugger::dumpEvents(long start, long size) const {
458
472
CallbackHandler::resolving_event = false ;
459
473
}
460
474
475
+ void Debugger::dumpCallbackmapping () const {
476
+ dprintf (this ->socket , " %s\n " , CallbackHandler::dump_callbacks ().c_str ());
477
+ }
478
+
461
479
/* *
462
480
* Read the change in bytes array.
463
481
*
@@ -979,4 +997,17 @@ void Debugger::disconnect_drone() {
979
997
pthread_mutex_unlock (&this ->push_mutex );
980
998
pthread_join (this ->push_debugging_threadid , (void **)&ptr);
981
999
}
1000
+
1001
+ void Debugger::updateCallbackmapping (Module *m, const char *data) const {
1002
+ nlohmann::basic_json<> parsed = nlohmann::json::parse (data);
1003
+ CallbackHandler::clear_callbacks ();
1004
+ nlohmann::basic_json<> callbacks = *parsed.find (" callbacks" );
1005
+ for (auto &array : callbacks.items ()) {
1006
+ auto callback = array.value ().begin ();
1007
+ for (auto &functions : callback.value ().items ()) {
1008
+ CallbackHandler::add_callback (
1009
+ Callback (m, callback.key (), functions.value ()));
1010
+ }
1011
+ }
1012
+ }
982
1013
#endif
0 commit comments