Improve behaviour on full USB buffer
This commit is contained in:
parent
4a374e022d
commit
0452d2472c
@ -284,3 +284,8 @@ void USB_LP_IRQHandler(void)
|
||||
uint16_t usb_available_buffer() {
|
||||
return sizeof(usb_transmit_fifo) - usb_transmit_fifo_level;
|
||||
}
|
||||
|
||||
void usb_clear_buffer() {
|
||||
usb_transmit_fifo_level = 0;
|
||||
data_transmission_active = 0;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ void usb_init(usbd_recv_callback_t receive_callback);
|
||||
bool usb_transmit(const uint8_t *data, uint16_t length);
|
||||
uint16_t usb_available_buffer();
|
||||
void usb_log(const char *log, uint16_t length);
|
||||
|
||||
void usb_clear_buffer();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -231,6 +231,7 @@ void HW::SetIdle() {
|
||||
FPGA::Enable(FPGA::Periphery::Port2Mixer, false);
|
||||
FPGA::Enable(FPGA::Periphery::RefMixer, false);
|
||||
FPGA::Enable(FPGA::Periphery::PortSwitch, false);
|
||||
activeMode = Mode::Idle;
|
||||
}
|
||||
|
||||
HW::AmplitudeSettings HW::GetAmplitudeSettings(int16_t cdbm, uint64_t freq, bool applyCorrections, bool port2) {
|
||||
|
@ -408,7 +408,17 @@ void VNA::SweepHalted() {
|
||||
// This function is called from a low level interrupt, need to dispatch to lower priority to allow USB
|
||||
// handling to continue
|
||||
STM::DispatchToInterrupt([](){
|
||||
while(usb_available_buffer() < reservedUSBbuffer);
|
||||
uint32_t start = HAL_GetTick();
|
||||
while(usb_available_buffer() < reservedUSBbuffer) {
|
||||
if(HAL_GetTick() - start > 100) {
|
||||
// still no buffer space after some time, something more serious must have gone wrong
|
||||
// -> abort sweep and return to idle
|
||||
usb_clear_buffer();
|
||||
FPGA::AbortSweep();
|
||||
HW::SetIdle();
|
||||
return;
|
||||
}
|
||||
}
|
||||
FPGA::ResumeHaltedSweep();
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user