/************************************************************************************ * * ***********************************************************************************/ bool ScopeDome::UpdateShutterStatus() { int rc = readBuffer(GetAllDigitalExt, 5, digitalSensorState); if (rc != 0) { LOGF_ERROR("Error reading input state: %d", rc); return false; } // LOGF_INFO("digitalext %x %x %x %x %x", digitalSensorState[0], // digitalSensorState[1], digitalSensorState[2], digitalSensorState[3], // digitalSensorState[4]); SensorsS[0].s = getInputState(IN_ENCODER); SensorsS[1].s = ISS_OFF; // ? SensorsS[2].s = getInputState(IN_HOME); SensorsS[3].s = getInputState(IN_OPEN1); SensorsS[4].s = getInputState(IN_CLOSED1); SensorsS[5].s = getInputState(IN_OPEN2); SensorsS[6].s = getInputState(IN_CLOSED2); SensorsS[7].s = getInputState(IN_S_HOME); SensorsS[8].s = getInputState(IN_CLOUDS); SensorsS[9].s = getInputState(IN_CLOUD); SensorsS[10].s = getInputState(IN_SAFE); SensorsS[11].s = getInputState(IN_ROT_LINK); SensorsS[12].s = getInputState(IN_FREE); SensorsSP.s = IPS_OK; IDSetSwitch(&SensorsSP, nullptr); DomeShutterSP.s = IPS_OK; IUResetSwitch(&DomeShutterSP); if (getInputState(IN_OPEN1) == ISS_ON) // shutter open switch triggered { if (shutterState == SHUTTER_MOVING && targetShutter == SHUTTER_OPEN) { LOGF_INFO("%s", GetShutterStatusString(SHUTTER_OPENED)); setOutputState(OUT_OPEN1, ISS_OFF); shutterState = SHUTTER_OPENED; if (getDomeState() == DOME_UNPARKING) SetParked(false); } DomeShutterS[SHUTTER_OPEN].s = ISS_ON; } else if (getInputState(IN_CLOSED1) == ISS_ON) // shutter closed switch triggered { if (shutterState == SHUTTER_MOVING && targetShutter == SHUTTER_CLOSE) { LOGF_INFO("%s", GetShutterStatusString(SHUTTER_CLOSED)); setOutputState(OUT_CLOSE1, ISS_OFF); shutterState = SHUTTER_CLOSED; if (getDomeState() == DOME_PARKING && DomeAbsPosNP.s != IPS_BUSY) { SetParked(true); } } DomeShutterS[SHUTTER_CLOSE].s = ISS_ON; } else { shutterState = SHUTTER_MOVING; DomeShutterSP.s = IPS_BUSY; } return true; }
/************************************************************************************ * * ***********************************************************************************/ bool BaaderDome::UpdateShutterStatus() { int nbytes_written = 0, nbytes_read = 0, rc = -1; char errstr[MAXRBUF]; char resp[DOME_BUF]; char status[DOME_BUF]; tcflush(PortFD, TCIOFLUSH); if (!sim && (rc = tty_write(PortFD, "d#getshut", DOME_CMD, &nbytes_written)) != TTY_OK) { tty_error_msg(rc, errstr, MAXRBUF); DEBUGF(INDI::Logger::DBG_ERROR, "d#getshut UpdateShutterStatus error: %s.", errstr); return false; } DEBUG(INDI::Logger::DBG_DEBUG, "CMD (d#getshut)"); if (sim) { if (simShutterStatus == SHUTTER_CLOSED) strncpy(resp, "d#shutclo", DOME_CMD); else if (simShutterStatus == SHUTTER_OPENED) strncpy(resp, "d#shutope", DOME_CMD); else if (simShutterStatus == SHUTTER_MOVING) strncpy(resp, "d#shutrun", DOME_CMD); nbytes_read = DOME_CMD; } else if ((rc = tty_read(PortFD, resp, DOME_CMD, DOME_TIMEOUT, &nbytes_read)) != TTY_OK) { tty_error_msg(rc, errstr, MAXRBUF); DEBUGF(INDI::Logger::DBG_ERROR, "UpdateShutterStatus error: %s.", errstr); return false; } resp[nbytes_read] = '\0'; DEBUGF(INDI::Logger::DBG_DEBUG, "RES (%s)", resp); rc = sscanf(resp, "d#shut%s", status); if (rc > 0) { DomeShutterSP.s = IPS_OK; IUResetSwitch(&DomeShutterSP); if (strcmp(status, "ope") == 0) { if (shutterState == SHUTTER_MOVING && targetShutter == SHUTTER_OPEN) DEBUGF(INDI::Logger::DBG_SESSION, "%s", GetShutterStatusString(SHUTTER_OPENED)); shutterState = SHUTTER_OPENED; DomeShutterS[SHUTTER_OPEN].s = ISS_ON; } else if (strcmp(status, "clo") == 0) { if (shutterState == SHUTTER_MOVING && targetShutter == SHUTTER_CLOSE) DEBUGF(INDI::Logger::DBG_SESSION, "%s", GetShutterStatusString(SHUTTER_CLOSED)); shutterState = SHUTTER_CLOSED; DomeShutterS[SHUTTER_CLOSE].s = ISS_ON; } else if (strcmp(status, "run") == 0) { shutterState = SHUTTER_MOVING; DomeShutterSP.s = IPS_BUSY; } else { shutterState = SHUTTER_UNKNOWN; DomeShutterSP.s = IPS_ALERT; DEBUGF(INDI::Logger::DBG_ERROR, "Unknown Shutter status: %s.", resp); } return true; } return false; }