diff --git a/flight/modules/System/systemmod.c b/flight/modules/System/systemmod.c index ef92a326e..b218876be 100644 --- a/flight/modules/System/systemmod.c +++ b/flight/modules/System/systemmod.c @@ -53,6 +53,7 @@ #include #include #include +#include // Flight Libraries #include @@ -94,7 +95,7 @@ static xQueueHandle objectPersistenceQueue; static bool stackOverflow; static bool mallocFailed; static HwSettingsData bootHwSettings; - +static struct PIOS_FLASHFS_Stats fsStats; // Private functions static void objectUpdatedCb(UAVObjEvent *ev); static void hwSettingsUpdatedCb(UAVObjEvent *ev); @@ -108,6 +109,10 @@ static void systemTask(void *parameters); static void updateI2Cstats(); static void updateWDGstats(); #endif + +extern uintptr_t pios_uavo_settings_fs_id; +extern uintptr_t pios_user_fs_id; + /** * Create the module task. * \returns 0 on success or -1 if initialization failed @@ -462,7 +467,18 @@ static void updateStats() if (idleCounterClear) { idleCounter = 0; } - +#if !defined(ARCH_POSIX) && !defined(ARCH_WIN32) + if(pios_uavo_settings_fs_id){ + PIOS_FLASHFS_GetStats(pios_uavo_settings_fs_id, &fsStats); + stats.SysSlotsFree = fsStats.num_free_slots; + stats.SysSlotsActive = fsStats.num_active_slots; + } + if(pios_user_fs_id){ + PIOS_FLASHFS_GetStats(pios_user_fs_id, &fsStats); + stats.UsrSlotsFree = fsStats.num_free_slots; + stats.UsrSlotsActive = fsStats.num_active_slots; + } +#endif portTickType now = xTaskGetTickCount(); if (now > lastTickCount) { uint32_t dT = (xTaskGetTickCount() - lastTickCount) * portTICK_RATE_MS; // in ms diff --git a/flight/pios/common/pios_flashfs_logfs.c b/flight/pios/common/pios_flashfs_logfs.c index fe626b7d0..6dfea60b6 100644 --- a/flight/pios/common/pios_flashfs_logfs.c +++ b/flight/pios/common/pios_flashfs_logfs.c @@ -1158,7 +1158,23 @@ out_end_trans: out_exit: return rc; } +/** + * @brief Returs stats for the filesystems + * @param[in] fs_id The filesystem to use for this action + * @return 0 if success or error code + * @retval -1 if fs_id is not a valid filesystem instance + */ +int32_t PIOS_FLASHFS_GetStats(uintptr_t fs_id, struct PIOS_FLASHFS_Stats *stats){ + PIOS_Assert(stats); + struct logfs_state *logfs = (struct logfs_state *)fs_id; + if (!PIOS_FLASHFS_Logfs_validate(logfs)) { + return -1; + } + stats->num_active_slots = logfs->num_active_slots; + stats->num_free_slots = logfs->num_free_slots; + return 0; +} #endif /* PIOS_INCLUDE_FLASH */ /** diff --git a/flight/pios/inc/pios_flashfs.h b/flight/pios/inc/pios_flashfs.h index beb4c1e63..a37a5333c 100644 --- a/flight/pios/inc/pios_flashfs.h +++ b/flight/pios/inc/pios_flashfs.h @@ -29,9 +29,14 @@ #include +struct PIOS_FLASHFS_Stats{ + uint16_t num_free_slots; /* slots in free state */ + uint16_t num_active_slots; /* slots in active state */ +}; + int32_t PIOS_FLASHFS_Format(uintptr_t fs_id); int32_t PIOS_FLASHFS_ObjSave(uintptr_t fs_id, uint32_t obj_id, uint16_t obj_inst_id, uint8_t *obj_data, uint16_t obj_size); int32_t PIOS_FLASHFS_ObjLoad(uintptr_t fs_id, uint32_t obj_id, uint16_t obj_inst_id, uint8_t *obj_data, uint16_t obj_size); int32_t PIOS_FLASHFS_ObjDelete(uintptr_t fs_id, uint32_t obj_id, uint16_t obj_inst_id); - +int32_t PIOS_FLASHFS_GetStats(uintptr_t fs_id, struct PIOS_FLASHFS_Stats *stats); #endif /* PIOS_FLASHFS_H */ diff --git a/flight/targets/boards/coptercontrol/firmware/pios_board.c b/flight/targets/boards/coptercontrol/firmware/pios_board.c index 4ac37f26b..476331a34 100644 --- a/flight/targets/boards/coptercontrol/firmware/pios_board.c +++ b/flight/targets/boards/coptercontrol/firmware/pios_board.c @@ -77,7 +77,7 @@ uint32_t pios_com_hkosd_id; uint32_t pios_usb_rctx_id; uintptr_t pios_uavo_settings_fs_id; - +uintptr_t pios_user_fs_id = 0; /** * Configuration for MPU6000 chip */ diff --git a/flight/targets/boards/osd/firmware/pios_board.c b/flight/targets/boards/osd/firmware/pios_board.c index e725908c0..f6d1a94c9 100644 --- a/flight/targets/boards/osd/firmware/pios_board.c +++ b/flight/targets/boards/osd/firmware/pios_board.c @@ -105,6 +105,7 @@ uint32_t pios_com_telem_usb_id; uint32_t pios_com_telem_rf_id; uintptr_t pios_uavo_settings_fs_id; +uintptr_t pios_user_fs_id = 0; /** * TIM3 is triggered by the HSYNC signal into its ETR line and will divide the diff --git a/shared/uavobjectdefinition/systemstats.xml b/shared/uavobjectdefinition/systemstats.xml index 572b32396..d271c6517 100644 --- a/shared/uavobjectdefinition/systemstats.xml +++ b/shared/uavobjectdefinition/systemstats.xml @@ -9,9 +9,13 @@ + + + + - + \ No newline at end of file