text/plain
•
1.65 KB
•
70 lines
#include "usb_screen.h"
#include <stdlib.h>
#include "../audio_player.h"
#include "../playlist.h"
#include "../storage.h"
#include "../topbar.h"
#ifdef ESP_PLATFORM
#include "usb_msc.h"
#endif
static void exit_usb_mode(void) {
storage_remount();
playlist_load();
navigate_none(SCREEN_HOME);
}
static void disconnect_cb(lv_event_t* e) {
if (lv_event_get_code(e) == LV_EVENT_CLICKED) {
exit_usb_mode();
}
}
static void cancel_cb(lv_event_t* e) {
if (lv_event_get_code(e) == LV_EVENT_CANCEL) {
exit_usb_mode();
}
}
ui_state_t setup_usb_screen(lv_obj_t* parent) {
usb_screen_state_t* state = calloc(1, sizeof(usb_screen_state_t));
// Stop audio — filesystem is now owned by the PC
audio_player_stop();
state->list = bvs_list_create(parent);
topbar_set_title("USB Mode");
lv_obj_t* label_btn =
bvs_list_add_button(state->list, NULL, "Connected to PC");
lv_obj_t* disconnect_btn =
bvs_list_add_button(state->list, NULL, "Disconnect");
lv_obj_add_event_cb(disconnect_btn, disconnect_cb, LV_EVENT_CLICKED, NULL);
lv_obj_add_event_cb(disconnect_btn, cancel_cb, LV_EVENT_CANCEL, NULL);
lv_group_add_obj(lv_group_get_default(), label_btn);
lv_group_add_obj(lv_group_get_default(), disconnect_btn);
lv_obj_add_event_cb(label_btn, cancel_cb, LV_EVENT_CANCEL, NULL);
lv_group_focus_obj(disconnect_btn);
return (ui_state_t){.type = SCREEN_USB, .usb = state};
}
void free_usb_screen(usb_screen_state_t* state) {
if (!state) {
return;
}
free(state);
}
void update_usb_screen(usb_screen_state_t* state) {
(void)state;
#ifdef ESP_PLATFORM
// Auto-exit when USB cable is disconnected
if (usb_msc_host_disconnected()) {
exit_usb_mode();
}
#endif
}