mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-20 23:05:19 +03:00
Show storage unit, protect blackbox config changes
This commit is contained in:
parent
8fb5ea5156
commit
7f8a6c24fa
1 changed files with 47 additions and 38 deletions
|
@ -82,72 +82,80 @@ static uint8_t cmsx_FeatureBlackbox;
|
||||||
static uint8_t cmsx_BlackboxDevice;
|
static uint8_t cmsx_BlackboxDevice;
|
||||||
static OSD_TAB_t cmsx_BlackboxDeviceTable = { &cmsx_BlackboxDevice, 2, cmsx_BlackboxDeviceNames };
|
static OSD_TAB_t cmsx_BlackboxDeviceTable = { &cmsx_BlackboxDevice, 2, cmsx_BlackboxDeviceNames };
|
||||||
|
|
||||||
#define CMS_BLACKBOX_STATUS_LENGTH 8
|
#define CMS_BLACKBOX_STRING_LENGTH 8
|
||||||
static char cmsx_BlackboxStatus[CMS_BLACKBOX_STATUS_LENGTH];
|
static char cmsx_BlackboxStatus[CMS_BLACKBOX_STRING_LENGTH];
|
||||||
|
static char cmsx_BlackboxDeviceStorageUsed[CMS_BLACKBOX_STRING_LENGTH];
|
||||||
static uint16_t cmsx_BlackboxDeviceStorageTotal;
|
static char cmsx_BlackboxDeviceStorageFree[CMS_BLACKBOX_STRING_LENGTH];
|
||||||
static uint16_t cmsx_BlackboxDeviceStorageUsed;
|
|
||||||
static uint16_t cmsx_BlackboxDeviceStorageFree;
|
|
||||||
|
|
||||||
static void cmsx_Blackbox_GetDeviceStatus()
|
static void cmsx_Blackbox_GetDeviceStatus()
|
||||||
{
|
{
|
||||||
/* Reset storage counters */
|
char * unit = "B";
|
||||||
cmsx_BlackboxDeviceStorageTotal = 0;
|
bool storageDeviceIsWorking = false;
|
||||||
cmsx_BlackboxDeviceStorageFree = 0;
|
uint16_t storageUsed = 0;
|
||||||
cmsx_BlackboxDeviceStorageUsed = 0;
|
uint16_t storageFree = 0;
|
||||||
|
|
||||||
switch (blackboxConfig()->device)
|
switch (blackboxConfig()->device)
|
||||||
{
|
{
|
||||||
#ifdef USE_SDCARD
|
#ifdef USE_SDCARD
|
||||||
case BLACKBOX_DEVICE_SDCARD:
|
case BLACKBOX_DEVICE_SDCARD:
|
||||||
|
unit = "MB";
|
||||||
|
|
||||||
if (!sdcard_isInserted()) {
|
if (!sdcard_isInserted()) {
|
||||||
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STATUS_LENGTH, "NO CARD");
|
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STRING_LENGTH, "NO CARD");
|
||||||
} else if (!sdcard_isFunctional()) {
|
} else if (!sdcard_isFunctional()) {
|
||||||
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STATUS_LENGTH, "FAULT");
|
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STRING_LENGTH, "FAULT");
|
||||||
} else {
|
} else {
|
||||||
switch (afatfs_getFilesystemState()) {
|
switch (afatfs_getFilesystemState()) {
|
||||||
case AFATFS_FILESYSTEM_STATE_READY:
|
case AFATFS_FILESYSTEM_STATE_READY:
|
||||||
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STATUS_LENGTH, "READY");
|
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STRING_LENGTH, "READY");
|
||||||
|
storageDeviceIsWorking = true;
|
||||||
break;
|
break;
|
||||||
case AFATFS_FILESYSTEM_STATE_INITIALIZATION:
|
case AFATFS_FILESYSTEM_STATE_INITIALIZATION:
|
||||||
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STATUS_LENGTH, "INIT");
|
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STRING_LENGTH, "INIT");
|
||||||
break;
|
break;
|
||||||
case AFATFS_FILESYSTEM_STATE_FATAL:
|
case AFATFS_FILESYSTEM_STATE_FATAL:
|
||||||
case AFATFS_FILESYSTEM_STATE_UNKNOWN:
|
case AFATFS_FILESYSTEM_STATE_UNKNOWN:
|
||||||
default:
|
default:
|
||||||
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STATUS_LENGTH, "FAULT");
|
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STRING_LENGTH, "FAULT");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Size in MB for SD card */
|
if (storageDeviceIsWorking) {
|
||||||
cmsx_BlackboxDeviceStorageTotal = sdcard_getMetadata()->numBlocks / 2000;
|
storageFree = afatfs_getContiguousFreeSpace() / 1024000;
|
||||||
cmsx_BlackboxDeviceStorageFree = afatfs_getContiguousFreeSpace() / 1024000;
|
storageUsed = (sdcard_getMetadata()->numBlocks / 2000) - storageFree;
|
||||||
cmsx_BlackboxDeviceStorageUsed = cmsx_BlackboxDeviceStorageTotal - cmsx_BlackboxDeviceStorageFree;
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_FLASHFS
|
#ifdef USE_FLASHFS
|
||||||
case BLACKBOX_DEVICE_FLASH:
|
case BLACKBOX_DEVICE_FLASH:
|
||||||
const flashGeometry_t *geometry = flashfsGetGeometry();
|
unit = "KB";
|
||||||
if (flashfsIsReady()) {
|
|
||||||
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STATUS_LENGTH, "READY");
|
|
||||||
|
|
||||||
/* Size in KB for flash */
|
const flashGeometry_t *geometry = flashfsGetGeometry();
|
||||||
cmsx_BlackboxDeviceStorageTotal = geometry->totalSize;
|
storageDeviceIsWorking = flashfsIsReady();
|
||||||
cmsx_BlackboxDeviceStorageUsed = flashfsGetOffset();
|
|
||||||
cmsx_BlackboxDeviceStorageFree = cmsx_BlackboxDeviceStorageTotal - cmsx_BlackboxDeviceStorageUsed;
|
if (storageDeviceIsWorking) {
|
||||||
|
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STRING_LENGTH, "READY");
|
||||||
|
|
||||||
|
storageUsed = flashfsGetOffset();
|
||||||
|
storageFree = geometry->totalSize - storageUsed;
|
||||||
} else {
|
} else {
|
||||||
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STATUS_LENGTH, "FAULT");
|
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STRING_LENGTH, "FAULT");
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STATUS_LENGTH, "---");
|
storageDeviceIsWorking = true;
|
||||||
|
snprintf(cmsx_BlackboxStatus, CMS_BLACKBOX_STRING_LENGTH, "---");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Storage counters */
|
||||||
|
snprintf(cmsx_BlackboxDeviceStorageUsed, CMS_BLACKBOX_STRING_LENGTH, "%d%s", storageUsed, unit);
|
||||||
|
snprintf(cmsx_BlackboxDeviceStorageFree, CMS_BLACKBOX_STRING_LENGTH, "%d%s", storageFree, unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
static long cmsx_Blackbox_onEnter(void)
|
static long cmsx_Blackbox_onEnter(void)
|
||||||
|
@ -167,8 +175,10 @@ static long cmsx_Blackbox_onExit(const OSD_Entry *self)
|
||||||
{
|
{
|
||||||
UNUSED(self);
|
UNUSED(self);
|
||||||
|
|
||||||
blackboxConfig()->device = cmsx_BlackboxDevice;
|
if (blackboxMayEditConfig()) {
|
||||||
validateBlackboxConfig();
|
blackboxConfig()->device = cmsx_BlackboxDevice;
|
||||||
|
validateBlackboxConfig();
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -188,16 +198,15 @@ static long cmsx_Blackbox_FeatureWriteback(void)
|
||||||
static OSD_Entry cmsx_menuBlackboxEntries[] =
|
static OSD_Entry cmsx_menuBlackboxEntries[] =
|
||||||
{
|
{
|
||||||
{ "-- BLACKBOX --", OME_Label, NULL, NULL, 0},
|
{ "-- BLACKBOX --", OME_Label, NULL, NULL, 0},
|
||||||
{ "ENABLED", OME_Bool, NULL, &cmsx_FeatureBlackbox, 0 },
|
{ "ENABLED", OME_Bool, NULL, &cmsx_FeatureBlackbox, 0 },
|
||||||
{ "DEVICE", OME_TAB, NULL, &cmsx_BlackboxDeviceTable, 0 },
|
{ "DEVICE", OME_TAB, NULL, &cmsx_BlackboxDeviceTable, 0 },
|
||||||
{ "(STATUS)", OME_String, NULL, &cmsx_BlackboxStatus, 0 },
|
{ "(STATUS)", OME_String, NULL, &cmsx_BlackboxStatus, 0 },
|
||||||
{ "(USED)", OME_UINT16, NULL, &(OSD_UINT16_t){ &cmsx_BlackboxDeviceStorageUsed, 0, 0, 0 }, DYNAMIC },
|
{ "(USED)", OME_String, NULL, &cmsx_BlackboxDeviceStorageUsed, 0 },
|
||||||
{ "(FREE)", OME_UINT16, NULL, &(OSD_UINT16_t){ &cmsx_BlackboxDeviceStorageFree, 0, 0, 0 }, DYNAMIC },
|
{ "(FREE)", OME_String, NULL, &cmsx_BlackboxDeviceStorageFree, 0 },
|
||||||
/* { "(TOTAL)", OME_UINT16, NULL, &(OSD_UINT16_t){ &cmsx_BlackboxDeviceStorageTotal, 0, 0, 0 }, DYNAMIC }, */
|
{ "RATE DENOM", OME_UINT8, NULL, &(OSD_UINT8_t){ &blackboxConfig()->rate_denom, 1, 32, 1 }, 0 },
|
||||||
{ "RATE DENOM", OME_UINT8, NULL, &(OSD_UINT8_t){ &blackboxConfig()->rate_denom, 1, 32, 1 }, 0 },
|
|
||||||
|
|
||||||
#ifdef USE_FLASHFS
|
#ifdef USE_FLASHFS
|
||||||
{ "ERASE FLASH", OME_Funcall, cmsx_EraseFlash, NULL, 0 },
|
{ "ERASE FLASH", OME_Funcall, cmsx_EraseFlash, NULL, 0 },
|
||||||
#endif // USE_FLASHFS
|
#endif // USE_FLASHFS
|
||||||
|
|
||||||
{ "BACK", OME_Back, NULL, NULL, 0 },
|
{ "BACK", OME_Back, NULL, NULL, 0 },
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue