mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2024-12-04 23:45:26 +00:00
fixed usb serial not working after reconnect (#2196)
* fixed usb serial not working after reconnect * added restart for sd over usb disconnect * improved usb serial fix * fixed formatting
This commit is contained in:
parent
048359fb0e
commit
19eb6b44d5
@ -49,6 +49,7 @@ void USBSerial::on_channel_opened() {
|
||||
}
|
||||
|
||||
void USBSerial::on_channel_closed() {
|
||||
reset_transfer_queues();
|
||||
connected = false;
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,10 @@ CH_IRQ_HANDLER(USB0_IRQHandler) {
|
||||
chSysUnlockFromIsr();
|
||||
}
|
||||
|
||||
if (status & USB0_USBSTS_D_SLI) {
|
||||
on_channel_closed();
|
||||
}
|
||||
|
||||
CH_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
@ -131,11 +135,7 @@ usb_request_status_t usb_get_line_coding_request(usb_endpoint_t* const endpoint,
|
||||
}
|
||||
usb_request_status_t usb_set_control_line_state_request(usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) {
|
||||
if (stage == USB_TRANSFER_STAGE_SETUP) {
|
||||
// if (endpoint->setup.value == 3) {
|
||||
on_channel_opened();
|
||||
//} else {
|
||||
// on_channel_closed();
|
||||
//}
|
||||
|
||||
usb_transfer_schedule_ack(endpoint->in);
|
||||
}
|
||||
|
@ -54,6 +54,14 @@ void init_host_to_device() {
|
||||
thread_usb_event = chThdSelf();
|
||||
}
|
||||
|
||||
void reset_transfer_queues() {
|
||||
while (usb_bulk_buffer_queue.empty() == false)
|
||||
usb_bulk_buffer_queue.pop();
|
||||
|
||||
while (usb_bulk_buffer_spare.empty() == false)
|
||||
usb_bulk_buffer_spare.pop();
|
||||
}
|
||||
|
||||
void schedule_host_to_device_transfer() {
|
||||
if (usb_bulk_buffer_queue.size() >= 8)
|
||||
return;
|
||||
|
@ -27,6 +27,7 @@
|
||||
#define USB_BULK_BUFFER_SIZE 64
|
||||
|
||||
void init_host_to_device();
|
||||
void reset_transfer_queues();
|
||||
void serial_bulk_transfer_complete(void* user_data, unsigned int bytes_transferred);
|
||||
void schedule_host_to_device_transfer();
|
||||
void complete_host_to_device_transfer();
|
||||
|
@ -22,13 +22,23 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include <libopencm3/lpc43xx/usb.h>
|
||||
|
||||
extern "C" {
|
||||
void start_usb(void);
|
||||
void irq_usb(void);
|
||||
void usb_transfer(void);
|
||||
|
||||
extern volatile bool scsi_running;
|
||||
|
||||
CH_IRQ_HANDLER(Vector60) {
|
||||
const uint32_t status = USB0_USBSTS_D & USB0_USBINTR_D;
|
||||
if (status & USB0_USBSTS_D_SLI) {
|
||||
// USB reset received.
|
||||
if (scsi_running) {
|
||||
LPC_RGU->RESET_CTRL[0] = (1 << 0);
|
||||
}
|
||||
}
|
||||
irq_usb();
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include "sd_over_usb.h"
|
||||
#include "scsi.h"
|
||||
|
||||
bool scsi_running = false;
|
||||
volatile bool scsi_running = false;
|
||||
|
||||
usb_request_status_t report_max_lun(
|
||||
usb_endpoint_t* const endpoint,
|
||||
|
Loading…
Reference in New Issue
Block a user