Fix SDcard size and format issue (#5004)
* - fix overflow in SDcard size computation - fix format function - implement more informative format error handling * Move to a function
This commit is contained in:
@@ -151,14 +151,10 @@ bool menuRadioSdManager(event_t _event)
|
||||
showMessageBox(STR_FORMATTING);
|
||||
logsClose();
|
||||
audioQueue.stopSD();
|
||||
BYTE work[_MAX_SS];
|
||||
if (f_mkfs(0, FM_FAT32, 0, work, sizeof(work)) == FR_OK) {
|
||||
if(sdCardFormat()) {
|
||||
f_chdir("/");
|
||||
REFRESH_FILES();
|
||||
}
|
||||
else {
|
||||
POPUP_WARNING(STR_SDCARD_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
event_t event = (EVT_KEY_MASK(_event) == KEY_ENTER ? 0 : _event);
|
||||
|
||||
@@ -174,14 +174,10 @@ void menuRadioSdManager(event_t _event)
|
||||
#if defined(CPUARM)
|
||||
audioQueue.stopSD();
|
||||
#endif
|
||||
BYTE work[_MAX_SS];
|
||||
if (f_mkfs(0, FM_FAT32, 0, work, sizeof(work)) == FR_OK) {
|
||||
if(sdCardFormat()) {
|
||||
f_chdir("/");
|
||||
REFRESH_FILES();
|
||||
}
|
||||
else {
|
||||
POPUP_WARNING(STR_SDCARD_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
#if LCD_DEPTH > 1
|
||||
@@ -190,7 +186,7 @@ void menuRadioSdManager(event_t _event)
|
||||
|
||||
event_t event = (EVT_KEY_MASK(_event) == KEY_ENTER ? 0 : _event);
|
||||
SIMPLE_MENU(SD_IS_HC() ? STR_SDHC_CARD : STR_SD_CARD, menuTabGeneral, MENU_RADIO_SD_MANAGER, HEADER_LINE + reusableBuffer.sdmanager.count);
|
||||
|
||||
|
||||
switch (_event) {
|
||||
case EVT_ENTRY:
|
||||
f_chdir(ROOT_PATH);
|
||||
@@ -199,11 +195,11 @@ void menuRadioSdManager(event_t _event)
|
||||
lastPos = -1;
|
||||
#endif
|
||||
break;
|
||||
|
||||
|
||||
case EVT_ENTRY_UP:
|
||||
menuVerticalOffset = reusableBuffer.sdmanager.offset;
|
||||
break;
|
||||
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
case EVT_KEY_LONG(KEY_MENU):
|
||||
if (!READ_ONLY() && s_editMode == 0) {
|
||||
|
||||
+32
-1
@@ -22,6 +22,37 @@
|
||||
#include "opentx.h"
|
||||
#include "diskio.h"
|
||||
|
||||
bool sdCardFormat()
|
||||
{
|
||||
BYTE work[_MAX_SS];
|
||||
FRESULT res = f_mkfs("", FM_FAT32, 0, work, sizeof(work));
|
||||
switch(res) {
|
||||
case FR_OK :
|
||||
return true;
|
||||
case FR_DISK_ERR:
|
||||
POPUP_WARNING("Format error");
|
||||
return false;
|
||||
case FR_NOT_READY:
|
||||
POPUP_WARNING("SDCard not ready");
|
||||
return false;
|
||||
case FR_WRITE_PROTECTED:
|
||||
POPUP_WARNING("SDCard write protected");
|
||||
return false;
|
||||
case FR_INVALID_PARAMETER:
|
||||
POPUP_WARNING("Format param invalid");
|
||||
return false;
|
||||
case FR_INVALID_DRIVE:
|
||||
POPUP_WARNING("Invalid drive");
|
||||
return false;
|
||||
case FR_MKFS_ABORTED:
|
||||
POPUP_WARNING("Format aborted");
|
||||
return false;
|
||||
default:
|
||||
POPUP_WARNING(STR_SDCARD_ERROR);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const char * sdCheckAndCreateDirectory(const char * path)
|
||||
{
|
||||
DIR archiveFolder;
|
||||
@@ -472,7 +503,7 @@ uint32_t sdGetNoSectors()
|
||||
|
||||
uint32_t sdGetSize()
|
||||
{
|
||||
return (sdGetNoSectors() * BLOCK_SIZE) / 1000000;
|
||||
return (sdGetNoSectors() / 1000000) * BLOCK_SIZE;
|
||||
}
|
||||
|
||||
uint32_t sdGetFreeSectors()
|
||||
|
||||
@@ -95,6 +95,7 @@ void logsInit();
|
||||
void logsClose();
|
||||
void logsWrite();
|
||||
|
||||
bool sdCardFormat();
|
||||
uint32_t sdGetNoSectors();
|
||||
uint32_t sdGetSize();
|
||||
uint32_t sdGetFreeSectors();
|
||||
|
||||
Reference in New Issue
Block a user