/** * @file reHDD.h * @brief app logic header * @author hendrik schutter * @date 01.05.2020 */ #ifndef REHDD_H_ #define REHDD_H_ #define REHDD_VERSION "bV0.3.0" // Drive handling Settings #define WORSE_HOURS 19200 //mark drive if at this limit or beyond #define WORSE_POWERUP 10000 //mark drive if at this limit or beyond #define WORSE_TEMPERATURE 55 //mark drive if at this limit or beyond #define SHRED_ITERATIONS 3U #define FROZEN_TIMEOUT 20 //After this timeout (minutes) the drive will be marked as frozen, if no progress #define METRIC_THRESHOLD 3L*1000L*1000L*1000L //calc shred speed with this minimum of time delta // Logger Settings #define LOG_PATH "./reHDD.log" #define DESCRIPTION "reHDD - Copyright Hendrik Schutter 2022" #define DEVICE_ID "generic" #define SOFTWARE_VERSION "alpha" #define HARDWARE_VERSION "generic" //#define LOG_LEVEL_HIGH //log everything, like drive scan thread #ifndef LOG_LEVEL_HIGH #define LOG_LEVEL_LOW //log only user actions and tasks #endif // Logic //#define DRYRUN //donĀ“t touch the drives #define FROZEN_ALERT //show alert if drive is frozen #define ZERO_CHECK_ALERT //check drive after shred if all bytes are zero, show alert if this fails //IPC pipes #define READ 0 #define WRITE 1 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #include "drive.h" #include "smart.h" #include "shred.h" #include "delete.h" #include "tui.h" #include "logger/logger.h" extern Logger* logging; template T* iterator_to_pointer(I i) { return (&(*i)); } class reHDD { protected: public: reHDD(void); static void app_logic(); private: static void searchDrives(list * plistDrives); static void printDrives(list * plistDrives); static void startShredAllDrives(list * plistDrives); static void updateShredMetrics(list * plistDrives); static void filterIgnoredDrives(list * plistDrives); static void filterNewDrives(list * plistOldDrives, list * plistNewDrives); static void addSMARTData(list * plistDrives); static void ThreadScannDevices(); static void ThreadUserInput(); static void ThreadShred(Drive* const pDrive); static void ThreadDelete(); static void ThreadCheckFrozenDrives(); static void handleArrowKey(TUI::UserInput userInput); static void handleEnter(); static void handleESC(); static void handleAbort(); static Drive* getSelectedDrive(); }; #endif // REHDD_H_