Improve behaviour on full USB buffer

This commit is contained in:
Jan Käberich 2021-09-24 22:21:38 +02:00
parent 4a374e022d
commit 0452d2472c
4 changed files with 18 additions and 2 deletions

View File

@ -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;
}

View File

@ -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
}

View File

@ -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) {

View File

@ -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();
});
}