int RAMPSXYStage::SetPositionSteps(long x, long y) { LogMessage("XYStage: SetPositionSteps"); RAMPSHub* pHub = static_cast<RAMPSHub*>(GetParentHub()); std::string status = pHub->GetState(); if (status == "Running") { return ERR_STAGE_MOVING; } double newPosX = x * stepSize_um_; double newPosY = y * stepSize_um_; double difX = newPosX - posX_um_; double difY = newPosY - posY_um_; double distance = sqrt( (difX * difX) + (difY * difY) ); posX_um_ = x * stepSize_um_; posY_um_ = y * stepSize_um_; // TODO(dek): if no position change, don't send new position. char buff[100]; sprintf(buff, "G0 X%f Y%f", posX_um_/1000., posY_um_/1000.); std::string buffAsStdStr = buff; int ret = pHub->SendCommand(buffAsStdStr); if (ret != DEVICE_OK) return ret; pHub->SetTargetXY(posX_um_, posY_um_); ret = OnXYStagePositionChanged(posX_um_, posY_um_); if (ret != DEVICE_OK) return ret; return DEVICE_OK; }
bool RAMPSXYStage::Busy() { LogMessage("XYStage: Busy called"); RAMPSHub* pHub = static_cast<RAMPSHub*>(GetParentHub()); std::string status = pHub->GetState(); LogMessage("Status is:"); LogMessage(status); status_ = status; if (status_ == "Idle") { LogMessage("idle, return false."); return false; } else if (status_ == "Running") { LogMessage("Running, return true."); return true; } else { LogMessage("Unexpected status."); return false; } }