Commit 80dfd650 authored by Damien George's avatar Damien George
Browse files

stmhal/main: Put /sd directory before /flash in sys.path.

If the SD card is mounted then its libraries (ie those that are imported)
should override any in /flash.
parent 3667ee1b
...@@ -168,7 +168,7 @@ static const char fresh_readme_txt[] = ...@@ -168,7 +168,7 @@ static const char fresh_readme_txt[] =
; ;
// avoid inlining to avoid stack usage within main() // avoid inlining to avoid stack usage within main()
MP_NOINLINE STATIC void init_flash_fs(uint reset_mode) { MP_NOINLINE STATIC bool init_flash_fs(uint reset_mode) {
// init the vfs object // init the vfs object
fs_user_mount_t *vfs_fat = &fs_user_mount_flash; fs_user_mount_t *vfs_fat = &fs_user_mount_flash;
vfs_fat->str = NULL; vfs_fat->str = NULL;
...@@ -192,7 +192,7 @@ MP_NOINLINE STATIC void init_flash_fs(uint reset_mode) { ...@@ -192,7 +192,7 @@ MP_NOINLINE STATIC void init_flash_fs(uint reset_mode) {
// success creating fresh LFS // success creating fresh LFS
} else { } else {
printf("PYB: can't create flash filesystem\n"); printf("PYB: can't create flash filesystem\n");
return; return false;
} }
// set label // set label
...@@ -223,7 +223,7 @@ MP_NOINLINE STATIC void init_flash_fs(uint reset_mode) { ...@@ -223,7 +223,7 @@ MP_NOINLINE STATIC void init_flash_fs(uint reset_mode) {
// mount sucessful // mount sucessful
} else { } else {
printf("PYB: can't mount flash\n"); printf("PYB: can't mount flash\n");
return; return false;
} }
// mount the flash device (there should be no other devices mounted at this point) // mount the flash device (there should be no other devices mounted at this point)
...@@ -259,9 +259,11 @@ MP_NOINLINE STATIC void init_flash_fs(uint reset_mode) { ...@@ -259,9 +259,11 @@ MP_NOINLINE STATIC void init_flash_fs(uint reset_mode) {
sys_tick_wait_at_least(start_tick, 200); sys_tick_wait_at_least(start_tick, 200);
led_state(PYB_LED_GREEN, 0); led_state(PYB_LED_GREEN, 0);
} }
return true;
} }
STATIC void init_sdcard_fs(bool first_soft_reset) { STATIC bool init_sdcard_fs(bool first_soft_reset) {
bool first_part = true; bool first_part = true;
for (int part_num = 1; part_num <= 4; ++part_num) { for (int part_num = 1; part_num <= 4; ++part_num) {
// create vfs object // create vfs object
...@@ -308,12 +310,6 @@ STATIC void init_sdcard_fs(bool first_soft_reset) { ...@@ -308,12 +310,6 @@ STATIC void init_sdcard_fs(bool first_soft_reset) {
} }
} }
if (first_part) {
// TODO these should go before the /flash entries in the path
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_sd));
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_sd_slash_lib));
}
if (first_soft_reset) { if (first_soft_reset) {
// use SD card as medium for the USB MSD // use SD card as medium for the USB MSD
#if defined(USE_DEVICE_MODE) #if defined(USE_DEVICE_MODE)
...@@ -337,6 +333,9 @@ STATIC void init_sdcard_fs(bool first_soft_reset) { ...@@ -337,6 +333,9 @@ STATIC void init_sdcard_fs(bool first_soft_reset) {
if (first_part) { if (first_part) {
printf("PYB: can't mount SD card\n"); printf("PYB: can't mount SD card\n");
return false;
} else {
return true;
} }
} }
...@@ -508,8 +507,6 @@ soft_reset: ...@@ -508,8 +507,6 @@ soft_reset:
mp_init(); mp_init();
mp_obj_list_init(mp_sys_path, 0); mp_obj_list_init(mp_sys_path, 0);
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR_)); // current dir (or base dir of the script) mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR_)); // current dir (or base dir of the script)
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_flash));
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_flash_slash_lib));
mp_obj_list_init(mp_sys_argv, 0); mp_obj_list_init(mp_sys_argv, 0);
// Initialise low-level sub-systems. Here we need to very basic things like // Initialise low-level sub-systems. Here we need to very basic things like
...@@ -552,15 +549,26 @@ soft_reset: ...@@ -552,15 +549,26 @@ soft_reset:
// Initialise the local flash filesystem. // Initialise the local flash filesystem.
// Create it if needed, mount in on /flash, and set it as current dir. // Create it if needed, mount in on /flash, and set it as current dir.
init_flash_fs(reset_mode); bool mounted_flash = init_flash_fs(reset_mode);
bool mounted_sdcard = false;
#if MICROPY_HW_HAS_SDCARD #if MICROPY_HW_HAS_SDCARD
// if an SD card is present then mount it on /sd/ // if an SD card is present then mount it on /sd/
if (sdcard_is_present()) { if (sdcard_is_present()) {
init_sdcard_fs(first_soft_reset); mounted_sdcard = init_sdcard_fs(first_soft_reset);
} }
#endif #endif
// set sys.path based on mounted filesystems (/sd is first so it can override /flash)
if (mounted_sdcard) {
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_sd));
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_sd_slash_lib));
}
if (mounted_flash) {
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_flash));
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_flash_slash_lib));
}
// reset config variables; they should be set by boot.py // reset config variables; they should be set by boot.py
MP_STATE_PORT(pyb_config_main) = MP_OBJ_NULL; MP_STATE_PORT(pyb_config_main) = MP_OBJ_NULL;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment