1
0
Fork 0
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:
Dan Nixon 2017-01-28 09:45:34 +00:00 committed by borisbstyle
parent 8fb5ea5156
commit 7f8a6c24fa

View file

@ -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 },