reHDD/src/reHDD.cpp

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