Skip to content

Commit 0a21bfd

Browse files
rhapsodyvvgadreau
authored andcommitted
STM32F1 EP with USB_COMPOSITE (MarlinFirmware#19281)
1 parent 54ab368 commit 0a21bfd

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

Marlin/src/HAL/STM32F1/msc_sd.cpp

+17-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#define PRODUCT_ID 0x29
2222

2323
USBMassStorage MarlinMSC;
24-
USBCompositeSerial MarlinCompositeSerial;
24+
MarlinUSBCompositeSerial MarlinCompositeSerial;
2525

2626
#include "../../inc/MarlinConfig.h"
2727

@@ -38,6 +38,17 @@ USBCompositeSerial MarlinCompositeSerial;
3838

3939
#endif
4040

41+
#if ENABLED(EMERGENCY_PARSER)
42+
void (*real_rx_callback)(void);
43+
44+
void my_rx_callback(void) {
45+
real_rx_callback();
46+
int len = MarlinCompositeSerial.available();
47+
while (len-- > 0) // >0 because available() may return a negative value
48+
emergency_parser.update(MarlinCompositeSerial.emergency_state, MarlinCompositeSerial.peek());
49+
}
50+
#endif
51+
4152
void MSC_SD_init() {
4253
USBComposite.setProductId(PRODUCT_ID);
4354
// Just set MarlinCompositeSerial enabled to true
@@ -59,6 +70,11 @@ void MSC_SD_init() {
5970
// Register composite Serial
6071
MarlinCompositeSerial.registerComponent();
6172
USBComposite.begin();
73+
#if ENABLED(EMERGENCY_PARSER)
74+
//rx is usbSerialPart.endpoints[2]
75+
real_rx_callback = usbSerialPart.endpoints[2].callback;
76+
usbSerialPart.endpoints[2].callback = my_rx_callback;
77+
#endif
6278
}
6379

6480
#endif // USE_USB_COMPOSITE

Marlin/src/HAL/STM32F1/msc_sd.h

+19-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,25 @@
1717

1818
#include <USBComposite.h>
1919

20+
#include "../../inc/MarlinConfigPre.h"
21+
#if ENABLED(EMERGENCY_PARSER)
22+
#include "../../feature/e_parser.h"
23+
#endif
24+
25+
class MarlinUSBCompositeSerial : public USBCompositeSerial {
26+
public:
27+
MarlinUSBCompositeSerial() : USBCompositeSerial()
28+
#if ENABLED(EMERGENCY_PARSER)
29+
, emergency_state(EmergencyParser::State::EP_RESET)
30+
#endif
31+
{ }
32+
33+
#if ENABLED(EMERGENCY_PARSER)
34+
EmergencyParser::State emergency_state;
35+
#endif
36+
};
37+
2038
extern USBMassStorage MarlinMSC;
21-
extern USBCompositeSerial MarlinCompositeSerial;
39+
extern MarlinUSBCompositeSerial MarlinCompositeSerial;
2240

2341
void MSC_SD_init();

0 commit comments

Comments
 (0)