92 lines
2.5 KiB
C++
92 lines
2.5 KiB
C++
/**
|
|
* @file reHDD.cpp
|
|
* @brief app logic
|
|
* @author hendrik schutter
|
|
* @date 01.05.2020
|
|
*/
|
|
|
|
#include "../include/reHDD.h"
|
|
|
|
static int fdNewDrivesInformPipe[2];//File descriptor for pipe that informs if new drives are found
|
|
|
|
static int fdShredInformPipe[2];//File descriptor for pipe that informs if a wipe thread signals
|
|
|
|
static Drive* pDummyDrive;
|
|
|
|
static uint8_t u8SelectedEntry;
|
|
|
|
static fd_set selectSet;
|
|
|
|
/**
|
|
* \brief app constructor
|
|
* \param void
|
|
* \return instance of App
|
|
*/
|
|
reHDD::reHDD(void)
|
|
{
|
|
u8SelectedEntry = 0U;
|
|
}
|
|
|
|
/**
|
|
* \brief app logic
|
|
* \param void
|
|
* \return void
|
|
*/
|
|
void reHDD::app_logic(void)
|
|
{
|
|
pDummyDrive = new Drive("/dev/sdc");
|
|
pDummyDrive->state = Drive::NONE;
|
|
pDummyDrive->bIsOffline = false;
|
|
|
|
pipe(fdNewDrivesInformPipe);
|
|
pipe(fdShredInformPipe);
|
|
|
|
getSelectedDrive()->state = Drive::TaskState::SHRED_ACTIVE;
|
|
thread(ThreadShred).detach();
|
|
|
|
while(1)
|
|
{
|
|
FD_ZERO(&selectSet);
|
|
FD_SET(fdNewDrivesInformPipe[0], &selectSet);
|
|
FD_SET(fdShredInformPipe[0], &selectSet);
|
|
|
|
select(FD_SETSIZE, &selectSet, NULL, NULL, NULL);
|
|
|
|
if(FD_ISSET(fdShredInformPipe[0], &selectSet))
|
|
{
|
|
char dummy;
|
|
read (fdShredInformPipe[0],&dummy,1);
|
|
|
|
stringstream stream;
|
|
stream << fixed << setprecision(3) << (getSelectedDrive()->getTaskPercentage());
|
|
string sState = "Shredding: " + stream.str() + "%";
|
|
|
|
std::ostringstream out;
|
|
double dDeltaSec = ((double)((getSelectedDrive()->sShredSpeed.u32ShredTimeDelta)/1000000000.0)); //convert nano in sec
|
|
double speed = ((getSelectedDrive()->sShredSpeed.ulWrittenBytes/1000000.0)/dDeltaSec);
|
|
char s[25];
|
|
sprintf(s, "%0.2lf MB/s", speed);
|
|
out << s;
|
|
Logger::logThis()->info(sState + " - " + out.str());
|
|
}
|
|
} //endless loop
|
|
}
|
|
|
|
Drive* reHDD::getSelectedDrive()
|
|
{
|
|
return pDummyDrive;
|
|
}
|
|
|
|
void reHDD::ThreadShred()
|
|
{
|
|
if (getSelectedDrive() != nullptr)
|
|
{
|
|
Logger::logThis()->info("Starting Shred Thread");
|
|
getSelectedDrive()->setActionStartTimestamp(); //save timestamp at start of shredding
|
|
Shred* pShredTask = new Shred(); //create new shred task
|
|
pShredTask->shredDrive(getSelectedDrive(), &fdShredInformPipe[1]); //start new shred task
|
|
delete pShredTask; //delete shred task
|
|
}
|
|
}
|
|
|