22
22
#include < inttypes.h>
23
23
24
24
#include < eez/debug.h>
25
+ #include < eez/system.h>
26
+ #include < eez/tasks.h>
25
27
26
28
#include < eez/flow/flow.h>
27
29
#include < eez/flow/private.h>
@@ -89,16 +91,61 @@ static unsigned g_inputFromDebuggerPosition;
89
91
90
92
static void processDebuggerInput (char *buffer, uint32_t length);
91
93
94
+ // //////////////////////////////////////////////////////////////////////////////
95
+
96
+ char *g_toDebuggerMessage = (char *)FLOW_TO_DEBUGGER_MESSAGE_BUFFER;
97
+ uint32_t g_toDebuggerMessagePosition = 0 ;
98
+
99
+ void startToDebuggerMessage () {
100
+ }
101
+
102
+ void flushToDebuggerMessageBuffer () {
103
+ if (g_toDebuggerMessagePosition != 0 ) {
104
+ sendMessageToLowPriorityThread (FLOW_FLUSH_TO_DEBUGGER_MESSAGE);
105
+
106
+ while (g_toDebuggerMessagePosition != 0 && g_debuggerIsConnected) {
107
+ osDelay (1 );
108
+ WATCHDOG_RESET (WATCHDOG_GUI_THREAD);
109
+ }
110
+ }
111
+ }
112
+
113
+ void flushToDebuggerMessage () {
114
+ eez::mcu::ethernet::writeDebuggerBuffer (g_toDebuggerMessage, g_toDebuggerMessagePosition);
115
+ g_toDebuggerMessagePosition = 0 ;
116
+ }
117
+
118
+ void writeDebuggerBuffer (const char *buffer, uint32_t length) {
119
+ if (g_toDebuggerMessagePosition + length > FLOW_TO_DEBUGGER_MESSAGE_BUFFER_SIZE) {
120
+ flushToDebuggerMessageBuffer ();
121
+ }
122
+
123
+ memcpy (g_toDebuggerMessage + g_toDebuggerMessagePosition, buffer, length);
124
+ g_toDebuggerMessagePosition += length;
125
+ }
126
+
127
+ void finishToDebuggerMessage () {
128
+ flushToDebuggerMessageBuffer ();
129
+ }
130
+
131
+ // //////////////////////////////////////////////////////////////////////////////
132
+
92
133
static void setDebuggerState (DebuggerState newState) {
93
134
if (newState != g_debuggerState) {
94
135
g_debuggerState = newState;
95
136
96
- char buffer[100 ];
97
- snprintf (buffer, sizeof (buffer), " %d\t %d\n " ,
98
- MESSAGE_TO_DEBUGGER_STATE_CHANGED,
99
- g_debuggerState
100
- );
101
- eez::mcu::ethernet::writeDebuggerBuffer (buffer, strlen (buffer));
137
+ if (g_debuggerIsConnected) {
138
+ startToDebuggerMessage ();
139
+
140
+ char buffer[100 ];
141
+ snprintf (buffer, sizeof (buffer), " %d\t %d\n " ,
142
+ MESSAGE_TO_DEBUGGER_STATE_CHANGED,
143
+ g_debuggerState
144
+ );
145
+ writeDebuggerBuffer (buffer, strlen (buffer));
146
+
147
+ finishToDebuggerMessage ();
148
+ }
102
149
}
103
150
}
104
151
@@ -220,13 +267,13 @@ int outputBufferPosition = 0;
220
267
#define WRITE_TO_OUTPUT_BUFFER (ch ) \
221
268
outputBuffer[outputBufferPosition++] = ch; \
222
269
if (outputBufferPosition == sizeof (outputBuffer)) { \
223
- eez::mcu::ethernet:: writeDebuggerBuffer (outputBuffer, outputBufferPosition); \
270
+ writeDebuggerBuffer (outputBuffer, outputBufferPosition); \
224
271
outputBufferPosition = 0 ; \
225
272
}
226
273
227
274
#define FLUSH_OUTPUT_BUFFER () \
228
275
if (outputBufferPosition > 0 ) { \
229
- eez::mcu::ethernet:: writeDebuggerBuffer (outputBuffer, outputBufferPosition); \
276
+ writeDebuggerBuffer (outputBuffer, outputBufferPosition); \
230
277
outputBufferPosition = 0 ; \
231
278
}
232
279
@@ -362,13 +409,15 @@ void writeValue(const Value &value) {
362
409
363
410
stringAppendString (tempStr, sizeof (tempStr), " \n " );
364
411
365
- eez::mcu::ethernet:: writeDebuggerBuffer (tempStr, strlen (tempStr));
412
+ writeDebuggerBuffer (tempStr, strlen (tempStr));
366
413
}
367
414
368
415
// //////////////////////////////////////////////////////////////////////////////
369
416
370
417
void onStarted (Assets *assets) {
371
418
if (g_debuggerIsConnected) {
419
+ startToDebuggerMessage ();
420
+
372
421
auto flowDefinition = assets->flowDefinition .ptr (assets);
373
422
374
423
for (uint32_t i = 0 ; i < flowDefinition->globalVariables .count ; i++) {
@@ -380,15 +429,19 @@ void onStarted(Assets *assets) {
380
429
(int )i,
381
430
(int )pValue
382
431
);
383
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
432
+ writeDebuggerBuffer (buffer, strlen (buffer));
384
433
385
434
writeValue (*pValue);
386
435
}
436
+
437
+ finishToDebuggerMessage ();
387
438
}
388
439
}
389
440
390
441
void onAddToQueue (FlowState *flowState, int sourceComponentIndex, int sourceOutputIndex, unsigned targetComponentIndex, int targetInputIndex) {
391
442
if (g_debuggerIsConnected) {
443
+ startToDebuggerMessage ();
444
+
392
445
char buffer[100 ];
393
446
snprintf (buffer, sizeof (buffer), " %d\t %d\t %d\t %d\t %d\t %d\n " ,
394
447
MESSAGE_TO_DEBUGGER_ADD_TO_QUEUE,
@@ -398,35 +451,47 @@ void onAddToQueue(FlowState *flowState, int sourceComponentIndex, int sourceOutp
398
451
targetComponentIndex,
399
452
targetInputIndex
400
453
);
401
- eez::mcu::ethernet::writeDebuggerBuffer (buffer, strlen (buffer));
454
+ writeDebuggerBuffer (buffer, strlen (buffer));
455
+
456
+ finishToDebuggerMessage ();
402
457
}
403
458
}
404
459
405
460
void onRemoveFromQueue () {
406
461
if (g_debuggerIsConnected) {
462
+ startToDebuggerMessage ();
463
+
407
464
char buffer[100 ];
408
465
snprintf (buffer, sizeof (buffer), " %d\n " ,
409
466
MESSAGE_TO_DEBUGGER_REMOVE_FROM_QUEUE
410
467
);
411
- eez::mcu::ethernet::writeDebuggerBuffer (buffer, strlen (buffer));
468
+ writeDebuggerBuffer (buffer, strlen (buffer));
469
+
470
+ finishToDebuggerMessage ();
412
471
}
413
472
}
414
473
415
474
void onValueChanged (const Value *pValue) {
416
475
if (g_debuggerIsConnected) {
476
+ startToDebuggerMessage ();
477
+
417
478
char buffer[100 ];
418
479
snprintf (buffer, sizeof (buffer), " %d\t %d\t " ,
419
480
MESSAGE_TO_DEBUGGER_VALUE_CHANGED,
420
481
(int )pValue
421
482
);
422
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
483
+ writeDebuggerBuffer (buffer, strlen (buffer));
423
484
424
485
writeValue (*pValue);
486
+
487
+ finishToDebuggerMessage ();
425
488
}
426
489
}
427
490
428
491
void onFlowStateCreated (FlowState *flowState) {
429
492
if (g_debuggerIsConnected) {
493
+ startToDebuggerMessage ();
494
+
430
495
char buffer[100 ];
431
496
snprintf (buffer, sizeof (buffer), " %d\t %d\t %d\t %d\t %d\n " ,
432
497
MESSAGE_TO_DEBUGGER_FLOW_STATE_CREATED,
@@ -435,7 +500,7 @@ void onFlowStateCreated(FlowState *flowState) {
435
500
(int )(flowState->parentFlowState ? flowState->parentFlowState ->flowStateIndex : -1 ),
436
501
flowState->parentComponentIndex
437
502
);
438
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
503
+ writeDebuggerBuffer (buffer, strlen (buffer));
439
504
440
505
auto flow = flowState->flow ;
441
506
@@ -449,7 +514,7 @@ void onFlowStateCreated(FlowState *flowState) {
449
514
(int )i,
450
515
(int )pValue
451
516
);
452
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
517
+ writeDebuggerBuffer (buffer, strlen (buffer));
453
518
454
519
writeValue (*pValue);
455
520
}
@@ -466,35 +531,45 @@ void onFlowStateCreated(FlowState *flowState) {
466
531
(int )i,
467
532
(int )pValue
468
533
);
469
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
534
+ writeDebuggerBuffer (buffer, strlen (buffer));
470
535
471
536
writeValue (*pValue);
472
537
}
473
538
}
539
+
540
+ finishToDebuggerMessage ();
474
541
}
475
542
}
476
543
477
544
void onFlowStateDestroyed (FlowState *flowState) {
478
545
if (g_debuggerIsConnected) {
546
+ startToDebuggerMessage ();
547
+
479
548
char buffer[100 ];
480
549
snprintf (buffer, sizeof (buffer), " %d\t %d\n " ,
481
550
MESSAGE_TO_DEBUGGER_FLOW_STATE_DESTROYED,
482
551
(int )flowState->flowStateIndex
483
552
);
484
- eez::mcu::ethernet::writeDebuggerBuffer (buffer, strlen (buffer));
553
+ writeDebuggerBuffer (buffer, strlen (buffer));
554
+
555
+ finishToDebuggerMessage ();
485
556
}
486
557
}
487
558
488
559
void onFlowError (FlowState *flowState, int componentIndex, const char *errorMessage) {
489
560
if (g_debuggerIsConnected) {
561
+ startToDebuggerMessage ();
562
+
490
563
char buffer[100 ];
491
564
snprintf (buffer, sizeof (buffer), " %d\t %d\t %d\t " ,
492
565
MESSAGE_TO_DEBUGGER_FLOW_STATE_ERROR,
493
566
(int )flowState->flowStateIndex ,
494
567
componentIndex
495
568
);
496
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
569
+ writeDebuggerBuffer (buffer, strlen (buffer));
497
570
writeString (errorMessage);
571
+
572
+ finishToDebuggerMessage ();
498
573
}
499
574
}
500
575
@@ -534,68 +609,88 @@ void writeLogMessage(const char *str, size_t len) {
534
609
535
610
void logInfo (FlowState *flowState, unsigned componentIndex, const char *message) {
536
611
if (g_debuggerIsConnected) {
612
+ startToDebuggerMessage ();
613
+
537
614
char buffer[256 ];
538
615
snprintf (buffer, sizeof (buffer), " %d\t %d\t %d\t %d\t " ,
539
616
MESSAGE_TO_DEBUGGER_LOG,
540
617
LOG_ITEM_TYPE_INFO,
541
618
(int )flowState->flowStateIndex ,
542
619
componentIndex
543
620
);
544
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
621
+ writeDebuggerBuffer (buffer, strlen (buffer));
545
622
writeLogMessage (message);
623
+
624
+ finishToDebuggerMessage ();
546
625
}
547
626
}
548
627
549
628
void logScpiCommand (FlowState *flowState, unsigned componentIndex, const char *cmd) {
550
629
if (g_debuggerIsConnected) {
630
+ startToDebuggerMessage ();
631
+
551
632
char buffer[256 ];
552
633
snprintf (buffer, sizeof (buffer), " %d\t %d\t %d\t %d\t SCPI COMMAND: " ,
553
634
MESSAGE_TO_DEBUGGER_LOG,
554
635
LOG_ITEM_TYPE_SCPI,
555
636
(int )flowState->flowStateIndex ,
556
637
componentIndex
557
638
);
558
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
639
+ writeDebuggerBuffer (buffer, strlen (buffer));
559
640
writeLogMessage (cmd);
641
+
642
+ finishToDebuggerMessage ();
560
643
}
561
644
}
562
645
563
646
void logScpiQuery (FlowState *flowState, unsigned componentIndex, const char *query) {
564
647
if (g_debuggerIsConnected) {
648
+ startToDebuggerMessage ();
649
+
565
650
char buffer[256 ];
566
651
snprintf (buffer, sizeof (buffer), " %d\t %d\t %d\t %d\t SCPI QUERY: " ,
567
652
MESSAGE_TO_DEBUGGER_LOG,
568
653
LOG_ITEM_TYPE_SCPI,
569
654
(int )flowState->flowStateIndex ,
570
655
componentIndex
571
656
);
572
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
657
+ writeDebuggerBuffer (buffer, strlen (buffer));
573
658
writeLogMessage (query);
659
+
660
+ finishToDebuggerMessage ();
574
661
}
575
662
}
576
663
577
664
void logScpiQueryResult (FlowState *flowState, unsigned componentIndex, const char *resultText, size_t resultTextLen) {
578
665
if (g_debuggerIsConnected) {
666
+ startToDebuggerMessage ();
667
+
579
668
char buffer[256 ];
580
669
snprintf (buffer, sizeof (buffer) - 1 , " %d\t %d\t %d\t %d\t SCPI QUERY RESULT: " ,
581
670
MESSAGE_TO_DEBUGGER_LOG,
582
671
LOG_ITEM_TYPE_SCPI,
583
672
(int )flowState->flowStateIndex ,
584
673
componentIndex
585
674
);
586
- eez::mcu::ethernet:: writeDebuggerBuffer (buffer, strlen (buffer));
675
+ writeDebuggerBuffer (buffer, strlen (buffer));
587
676
writeLogMessage (resultText, resultTextLen);
677
+
678
+ finishToDebuggerMessage ();
588
679
}
589
680
}
590
681
591
682
void onPageChanged (int pageId) {
592
683
if (g_debuggerIsConnected) {
684
+ startToDebuggerMessage ();
685
+
593
686
char buffer[100 ];
594
687
snprintf (buffer, sizeof (buffer), " %d\t %d\n " ,
595
688
MESSAGE_TO_DEBUGGER_PAGE_CHANGED,
596
689
-pageId - 1
597
690
);
598
- eez::mcu::ethernet::writeDebuggerBuffer (buffer, strlen (buffer));
691
+ writeDebuggerBuffer (buffer, strlen (buffer));
692
+
693
+ finishToDebuggerMessage ();
599
694
}
600
695
}
601
696
0 commit comments