Skip to content
Snippets Groups Projects
Commit c535bf10 authored by q3k's avatar q3k
Browse files

recovery: implement SD card disk mode

parent 61318494
No related branches found
No related tags found
1 merge request!34SD card support
......@@ -6,6 +6,7 @@
#include "flow3r_bsp.h"
#include "st3m_fs.h"
#include "st3m_fs_flash.h"
#include "st3m_fs_sd.h"
#include "st3m_gfx.h"
#include "st3m_io.h"
#include "st3m_usb.h"
......@@ -25,7 +26,7 @@ static bool _usb_initialized = false;
static void _main_reboot(void) { esp_restart(); }
static void _main_disk_mode(void) {
static void _main_disk_mode_flash(void) {
_cur_menu = &_diskmode_menu;
_cur_menu->selected = 0;
......@@ -35,7 +36,20 @@ static void _main_disk_mode(void) {
vTaskDelay(100 / portTICK_PERIOD_MS);
}
rec_vfs_wl_msc_start();
rec_vfs_wl_msc_start_flash();
}
static void _main_disk_mode_sd(void) {
_cur_menu = &_diskmode_menu;
_cur_menu->selected = 0;
if (!_usb_initialized) {
_usb_initialized = true;
st3m_usb_init();
vTaskDelay(100 / portTICK_PERIOD_MS);
}
rec_vfs_wl_msc_start_sd();
}
static void _main_erase_fat32(void) {
......@@ -60,13 +74,14 @@ static void _diskmode_exit(void) {
static menu_entry_t _main_menu_entries[] = {
{ .label = "Reboot", .enter = _main_reboot },
{ .label = "Disk Mode", .enter = _main_disk_mode },
{ .label = "Disk Mode (Flash)", .enter = _main_disk_mode_flash },
{ .label = "Disk Mode (SD)", .enter = _main_disk_mode_sd },
{ .label = "Erase FAT32", .enter = _main_erase_fat32 },
};
static menu_t _main_menu = {
.entries = _main_menu_entries,
.entries_count = 3,
.entries_count = 4,
.selected = 0,
};
......@@ -107,6 +122,10 @@ void app_main(void) {
st3m_io_init();
st3m_fs_init();
if (st3m_fs_sd_get_status() != st3m_fs_sd_status_probed) {
_main_menu_entries[2].disabled = true;
}
TickType_t last_wake;
last_wake = xTaskGetTickCount();
......
......@@ -3,16 +3,17 @@
#include "rec_fatal.h"
#include "st3m_fs_flash.h"
#include "st3m_fs_sd.h"
#include "st3m_usb.h"
#include <string.h>
void rec_vfs_wl_msc_start(void) {
void rec_vfs_wl_msc_start_flash(void) {
st3m_usb_msc_conf_t msc = {
.block_size = st3m_fs_flash_get_blocksize(),
.block_count = st3m_fs_flash_get_blockcount(),
.product_id = { 'f', 'l', 'o', 'w', '3', 'r', 0, 0, 0, 0, 0, 0, 0, 0, 0,
0 },
.product_id = { 'f', 'l', 'o', 'w', '3', 'r', ' ', 'f', 'l', 'a', 's',
'h', 0, 0, 0, 0 },
.fn_read10 = st3m_fs_flash_read,
.fn_write10 = st3m_fs_flash_write,
};
......@@ -21,4 +22,35 @@ void rec_vfs_wl_msc_start(void) {
.disk = &msc,
};
st3m_usb_mode_switch(&usb_mode);
}
void rec_vfs_wl_msc_start_sd(void) {
st3m_fs_sd_status_t st = st3m_fs_sd_get_status();
if (st != st3m_fs_sd_status_probed) {
// TODO(q3k): don't panic
rec_fatal("no SD card");
return;
}
st3m_fs_sd_props_t props;
esp_err_t ret = st3m_fs_sd_probe(&props);
if (ret != ESP_OK) {
// TODO(q3k): don't panic
rec_fatal("SD card probe failed");
return;
}
st3m_usb_msc_conf_t msc = {
.block_size = props.sector_size,
.block_count = props.sector_count,
.product_id = { 'f', 'l', 'o', 'w', '3', 'r', ' ', 'S', 'D', 0, 0, 0, 0,
0, 0, 0 },
.fn_read10 = st3m_fs_sd_read10,
.fn_write10 = st3m_fs_sd_write10,
};
st3m_usb_mode_t usb_mode = {
.kind = st3m_usb_mode_kind_disk,
.disk = &msc,
};
st3m_usb_mode_switch(&usb_mode);
}
\ No newline at end of file
#pragma once
void rec_vfs_wl_init(void);
void rec_vfs_wl_msc_start(void);
void rec_vfs_wl_msc_start_flash(void);
void rec_vfs_wl_msc_start_sd(void);
void rec_vfs_wl_erase(void);
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment