mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-12-24 06:49:24 -05: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() {
|
void USBSerial::on_channel_closed() {
|
||||||
|
reset_transfer_queues();
|
||||||
connected = false;
|
connected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +42,10 @@ CH_IRQ_HANDLER(USB0_IRQHandler) {
|
|||||||
chSysUnlockFromIsr();
|
chSysUnlockFromIsr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (status & USB0_USBSTS_D_SLI) {
|
||||||
|
on_channel_closed();
|
||||||
|
}
|
||||||
|
|
||||||
CH_IRQ_EPILOGUE();
|
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) {
|
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 (stage == USB_TRANSFER_STAGE_SETUP) {
|
||||||
// if (endpoint->setup.value == 3) {
|
|
||||||
on_channel_opened();
|
on_channel_opened();
|
||||||
//} else {
|
|
||||||
// on_channel_closed();
|
|
||||||
//}
|
|
||||||
|
|
||||||
usb_transfer_schedule_ack(endpoint->in);
|
usb_transfer_schedule_ack(endpoint->in);
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,14 @@ void init_host_to_device() {
|
|||||||
thread_usb_event = chThdSelf();
|
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() {
|
void schedule_host_to_device_transfer() {
|
||||||
if (usb_bulk_buffer_queue.size() >= 8)
|
if (usb_bulk_buffer_queue.size() >= 8)
|
||||||
return;
|
return;
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#define USB_BULK_BUFFER_SIZE 64
|
#define USB_BULK_BUFFER_SIZE 64
|
||||||
|
|
||||||
void init_host_to_device();
|
void init_host_to_device();
|
||||||
|
void reset_transfer_queues();
|
||||||
void serial_bulk_transfer_complete(void* user_data, unsigned int bytes_transferred);
|
void serial_bulk_transfer_complete(void* user_data, unsigned int bytes_transferred);
|
||||||
void schedule_host_to_device_transfer();
|
void schedule_host_to_device_transfer();
|
||||||
void complete_host_to_device_transfer();
|
void complete_host_to_device_transfer();
|
||||||
|
@ -22,13 +22,23 @@
|
|||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
|
#include <libopencm3/lpc43xx/usb.h>
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
void start_usb(void);
|
void start_usb(void);
|
||||||
void irq_usb(void);
|
void irq_usb(void);
|
||||||
void usb_transfer(void);
|
void usb_transfer(void);
|
||||||
|
|
||||||
|
extern volatile bool scsi_running;
|
||||||
|
|
||||||
CH_IRQ_HANDLER(Vector60) {
|
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();
|
irq_usb();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#include "sd_over_usb.h"
|
#include "sd_over_usb.h"
|
||||||
#include "scsi.h"
|
#include "scsi.h"
|
||||||
|
|
||||||
bool scsi_running = false;
|
volatile bool scsi_running = false;
|
||||||
|
|
||||||
usb_request_status_t report_max_lun(
|
usb_request_status_t report_max_lun(
|
||||||
usb_endpoint_t* const endpoint,
|
usb_endpoint_t* const endpoint,
|
||||||
|
Loading…
Reference in New Issue
Block a user