void LX200_16::ISPoll () { int searchResult=0; double dx, dy; int err; LX200Autostar::ISPoll(); switch (HomeSearchSw.s) { case IPS_IDLE: break; case IPS_BUSY: if ( (err = getHomeSearchStatus(&searchResult)) < 0) { handleError(&HomeSearchSw, err, "Home search"); return; } if (searchResult == 0) { HomeSearchSw.s = IPS_IDLE; IDSetSwitch(&HomeSearchSw, "Home search failed."); } else if (searchResult == 1) { HomeSearchSw.s = IPS_OK; IDSetSwitch(&HomeSearchSw, "Home search successful."); } else if (searchResult == 2) IDSetSwitch(&HomeSearchSw, "Home search in progress..."); else { HomeSearchSw.s = IPS_IDLE; IDSetSwitch(&HomeSearchSw, "Home search error."); } break; case IPS_OK: break; case IPS_ALERT: break; } switch (horNum.s) { case IPS_IDLE: break; case IPS_BUSY: if ( (err = getLX200Az(¤tAz)) < 0 || (err = getLX200Alt(¤tAlt)) < 0) { IDSetNumber(&horNum, NULL); handleError(&horNum, err, "Get Alt/Az"); return; } dx = targetAz - currentAz; dy = targetAlt - currentAlt; horNum.np[0].value = currentAlt; horNum.np[1].value = currentAz; IDLog("targetAz is %g, currentAz is %g\n", targetAz, currentAz); IDLog("targetAlt is %g, currentAlt is %g\n**********************\n", targetAlt, currentAlt); // accuracy threshhold (3'), can be changed as desired. if ( fabs(dx) <= 0.05 && fabs(dy) <= 0.05) { horNum.s = IPS_OK; currentAz = targetAz; currentAlt = targetAlt; IDSetNumber (&horNum, "Slew is complete"); } else IDSetNumber (&horNum, NULL); break; case IPS_OK: break; case IPS_ALERT: break; } }
bool LX200_16::ReadScopeStatus() { int searchResult=0; double dx, dy; LX200Generic::ReadScopeStatus(); switch (HomeSearchSP.s) { case IPS_IDLE: break; case IPS_BUSY: if (isSimulation()) searchResult = 1; else if (getHomeSearchStatus(PortFD, &searchResult) < 0) { HomeSearchSP.s = IPS_ALERT; IDSetSwitch(&HomeSearchSP, "Error updating home search status."); return false; } if (searchResult == 0) { HomeSearchSP.s = IPS_ALERT; IDSetSwitch(&HomeSearchSP, "Home search failed."); } else if (searchResult == 1) { HomeSearchSP.s = IPS_OK; IDSetSwitch(&HomeSearchSP, "Home search successful."); } else if (searchResult == 2) IDSetSwitch(&HomeSearchSP, "Home search in progress..."); else { HomeSearchSP.s = IPS_ALERT; IDSetSwitch(&HomeSearchSP, "Home search error."); } break; case IPS_OK: break; case IPS_ALERT: break; } switch (HorizontalCoordsNP.s) { case IPS_IDLE: break; case IPS_BUSY: if (isSimulation()) { currentAZ = targetAZ; currentALT = targetALT; TrackState = SCOPE_TRACKING; return true; } if (getLX200Az(PortFD, ¤tAZ) < 0 || getLX200Alt(PortFD, ¤tALT) < 0) { HorizontalCoordsNP.s = IPS_ALERT; IDSetNumber(&HorizontalCoordsNP, "Error geting Alt/Az."); return false; } dx = targetAZ - currentAZ; dy = targetALT - currentALT; HorizontalCoordsNP.np[0].value = currentALT; HorizontalCoordsNP.np[1].value = currentAZ; // accuracy threshold (3'), can be changed as desired. if ( fabs(dx) <= 0.05 && fabs(dy) <= 0.05) { HorizontalCoordsNP.s = IPS_OK; currentAZ = targetAZ; currentALT = targetALT; IDSetNumber (&HorizontalCoordsNP, "Slew is complete."); } else IDSetNumber (&HorizontalCoordsNP, NULL); break; case IPS_OK: break; case IPS_ALERT: break; } return true; }