void Thermocycler::ProcessCommand(SCommand& command) { if (command.command == SCommand::EStart) { //find display cycle Cycle* pProgram = command.pProgram; Cycle* pDisplayCycle = pProgram; int largestCycleCount = 0; for (int i = 0; i < pProgram->GetNumComponents(); i++) { ProgramComponent* pComp = pProgram->GetComponent(i); if (pComp->GetType() == ProgramComponent::ECycle) { Cycle* pCycle = (Cycle*)pComp; if (pCycle->GetNumCycles() > largestCycleCount) { largestCycleCount = pCycle->GetNumCycles(); pDisplayCycle = pCycle; } } } GetThermocycler().SetProgram(pProgram, pDisplayCycle, command.name, command.lidTemp); GetThermocycler().Start(); } else if (command.command == SCommand::EStop) { GetThermocycler().Stop(); //redundant as we already stopped during parsing } else if (command.command == SCommand::EConfig) { //update displayed ipDisplay->SetContrast(command.contrast); //update stored contrast ProgramStore::StoreContrast(command.contrast); } }
void Thermocycler::PrepareStep() { //update eta calc params if (ipPreviousStep == NULL || ipPreviousStep->GetTemp() != ipCurrentStep->GetTemp()) { iRamping = true; iRampElapsedTimeMs = 0; iRampStartTemp = GetPlateTemp(); } else { iCycleElapsedTimeMs = 0; //next step starts immediately } // Switch cycle to display ProgramComponent *pComp = ipProgram->GetComponent(ipProgram->GetCurrentComponentIndex()); if (pComp->GetType() == ProgramComponent::ECycle) { ipDisplayCycle = (Cycle*) pComp; } CalcPlateTarget(); SetPlateControlStrategy(); }