bool INDI::FilterWheel::updateProperties() { // Define more properties after we are connected // first we want to update the values to reflect our actual wheel if(isConnected()) { //initFilterProperties(getDeviceName(), FILTER_TAB); defineNumber(&FilterSlotNP); if (FilterNameT == NULL) GetFilterNames(FILTER_TAB); if (FilterNameT) defineText(FilterNameTP); } else { deleteProperty(FilterSlotNP.name); deleteProperty(FilterNameTP->name); } controller->updateProperties(); return true; }
void INDI::FilterWheel::ISGetProperties (const char * dev) { // First we let our parent populate //IDLog("INDI::FilterWheel::ISGetProperties %s\n",dev); DefaultDevice::ISGetProperties(dev); if(isConnected()) { defineNumber(&FilterSlotNP); if (FilterNameT == NULL) GetFilterNames(FILTER_TAB); if (FilterNameT) defineText(FilterNameTP); } controller->ISGetProperties(dev); return; }
bool CCDSim::SetupParms() { int nbuf; SetCCDParams(SimulatorSettingsN[0].value,SimulatorSettingsN[1].value,16,SimulatorSettingsN[2].value,SimulatorSettingsN[3].value); // Kwiq maxnoise=SimulatorSettingsN[8].value; skyglow=SimulatorSettingsN[9].value; maxval=SimulatorSettingsN[4].value; bias=SimulatorSettingsN[5].value; limitingmag=SimulatorSettingsN[7].value; saturationmag=SimulatorSettingsN[6].value; OAGoffset=SimulatorSettingsN[10].value; // An oag is offset this much from center of scope position (arcminutes); nbuf = PrimaryCCD.getXRes() * PrimaryCCD.getYRes() * PrimaryCCD.getBPP()/8; nbuf += 512; PrimaryCCD.setFrameBufferSize(nbuf); GetFilterNames(FILTER_TAB); return true; }
bool MICCD::updateProperties() { INDI::CCD::updateProperties(); if (isConnected()) { if (HasCooler()) { defineNumber(&TemperatureRampNP); defineNumber(&CoolerNP); temperatureID = IEAddTimer(POLLMS, MICCD::updateTemperatureHelper, this); } defineSwitch(&NoiseSP); if (maxFanValue > 0) defineNumber(&FanNP); if (maxHeatingValue > 0) defineNumber(&WindowHeatingNP); if (hasGain) defineNumber(&GainNP); if (numFilters > 0) { //Define the Filter Slot and name properties defineNumber(&FilterSlotNP); GetFilterNames(FILTER_TAB); defineText(FilterNameTP); } // Let's get parameters now from CCD setupParams(); timerID = SetTimer(POLLMS); } else { if (HasCooler()) { deleteProperty(TemperatureRampNP.name); deleteProperty(CoolerNP.name); RemoveTimer(temperatureID); } deleteProperty(NoiseSP.name); if (maxFanValue > 0) deleteProperty(FanNP.name); if (maxHeatingValue > 0) deleteProperty(WindowHeatingNP.name); if (hasGain) deleteProperty(GainNP.name); if (numFilters > 0) { deleteProperty(FilterSlotNP.name); deleteProperty(FilterNameTP->name); } RemoveTimer(timerID); } return true; }
bool QSICCD::setupParams() { string name,model; double temperature; double pixel_size_x,pixel_size_y; long sub_frame_x,sub_frame_y; try { QSICam.get_Name(name); QSICam.get_ModelNumber(model); QSICam.get_PixelSizeX(&pixel_size_x); QSICam.get_PixelSizeY(&pixel_size_y); QSICam.get_NumX(&sub_frame_x); QSICam.get_NumY(&sub_frame_y); QSICam.get_CCDTemperature(&temperature); } catch (std::runtime_error err) { DEBUGF(INDI::Logger::DBG_ERROR, "Setup Params failed. %s.", err.what()); return false; } DEBUGF(INDI::Logger::DBG_SESSION, "The CCD Temperature is %f.", temperature); TemperatureN[0].value = temperature; /* CCD chip temperatre (degrees C) */ IDSetNumber(&TemperatureNP, NULL); SetCCDParams(sub_frame_x, sub_frame_y, 16, pixel_size_x, pixel_size_y); imageWidth = PrimaryCCD.getSubW(); imageHeight = PrimaryCCD.getSubH(); int nbuf; nbuf=PrimaryCCD.getXRes()*PrimaryCCD.getYRes() * PrimaryCCD.getBPP()/8; // this is pixel count nbuf+=512; // leave a little extra at the end PrimaryCCD.setFrameBufferSize(nbuf); try { QSICam.get_Name(name); } catch (std::runtime_error& err) { DEBUGF(INDI::Logger::DBG_ERROR, "get_Name() failed. %s.", err.what()); return false; } DEBUGF(INDI::Logger::DBG_SESSION, "%s", name.c_str()); int filter_count; try { QSICam.get_FilterCount(filter_count); } catch (std::runtime_error err) { DEBUGF(INDI::Logger::DBG_SESSION, "get_FilterCount() failed. %s.", err.what()); return false; } DEBUGF(INDI::Logger::DBG_SESSION,"The filter count is %d", filter_count); FilterSlotN[0].max = filter_count; FilterSlotNP.s = IPS_OK; IUUpdateMinMax(&FilterSlotNP); IDSetNumber(&FilterSlotNP, NULL); FilterSP.s = IPS_OK; IDSetSwitch(&FilterSP,NULL); GetFilterNames(FILTER_TAB); double minDuration=0; try { QSICam.get_MinExposureTime(&minDuration); } catch (std::runtime_error err) { DEBUGF(INDI::Logger::DBG_ERROR, "get_MinExposureTime() failed. %s.", err.what()); return false; } PrimaryCCD.setMinMaxStep("CCD_EXPOSURE", "CCD_EXPOSURE_VALUE", minDuration, 3600, 1, true); bool coolerOn=false; try { QSICam.get_CoolerOn(&coolerOn); } catch (std::runtime_error err) { CoolerSP.s = IPS_IDLE; CoolerS[0].s = ISS_OFF; CoolerS[1].s = ISS_ON; DEBUGF(INDI::Logger::DBG_ERROR, "Error: CoolerOn() failed. %s.", err.what()); IDSetSwitch(&CoolerSP, NULL); return false; } CoolerS[0].s = coolerOn ? ISS_ON : ISS_OFF; CoolerS[1].s = coolerOn ? ISS_OFF : ISS_ON; CoolerSP.s = IPS_OK; IDSetSwitch(&CoolerSP, NULL); QSICamera::CameraGain cGain = QSICamera::CameraGainAuto; canSetGain = false; QSICam.get_CanSetGain(&canSetGain); if (canSetGain) { try { QSICam.get_CameraGain(&cGain); } catch (std::runtime_error err) { DEBUGF(INDI::Logger::DBG_DEBUG, "Camera does not support gain. %s.", err.what()); canSetGain = false; } if (canSetGain) { IUResetSwitch(&GainSP); GainS[cGain].s = ISS_ON; defineSwitch(&GainSP); } } QSICamera::AntiBloom cAB = QSICamera::AntiBloomNormal; canSetAB = true; try { QSICam.get_AntiBlooming(&cAB); } catch (std::runtime_error err) { DEBUGF(INDI::Logger::DBG_DEBUG, "Camera does not support AntiBlooming control. %s.", err.what()); canSetAB = false; } if (canSetAB) { IUResetSwitch(&ABSP); ABS[cAB].s = ISS_ON; defineSwitch(&ABSP); } QSICamera::FanMode fMode = QSICamera::fanOff; canControlFan = true; try { QSICam.get_FanMode(fMode); } catch (std::runtime_error err) { DEBUGF(INDI::Logger::DBG_DEBUG, "Camera does not support fan control. %s.", err.what()); canControlFan = false; } if (canControlFan) { IUResetSwitch(&FanSP); FanS[fMode].s = ISS_ON; defineSwitch(&FanSP); } canChangeReadoutSpeed = true; QSICamera::ReadoutSpeed cReadoutSpeed; try { QSICam.get_ReadoutSpeed(cReadoutSpeed); } catch (std::runtime_error err) { DEBUGF(INDI::Logger::DBG_DEBUG, "Camera does not support changing readout speed. %s.", err.what()); canChangeReadoutSpeed = false; } if (canChangeReadoutSpeed) { // get_ReadoutSpeed succeeds even if the camera does not support that, so the only way to make sure is to set it try { QSICam.put_ReadoutSpeed(cReadoutSpeed); } catch (std::runtime_error err) { DEBUGF(INDI::Logger::DBG_DEBUG, "Camera does not support changing readout speed. %s.", err.what()); canChangeReadoutSpeed = false; } if (canChangeReadoutSpeed) { IUResetSwitch(&ReadOutSP); ReadOutS[cReadoutSpeed].s = ISS_ON; defineSwitch(&ReadOutSP); } } // Can flush canFlush = false; try { QSICam.put_PreExposureFlush(QSICamera::FlushNormal); canFlush = true; } catch (std::runtime_error err) { DEBUGF(INDI::Logger::DBG_DEBUG, "Camera does not pre-exposure flushing %s.", err.what()); canFlush = false; } return true; }
bool QHYCCD::updateProperties() { INDI::CCD::updateProperties(); double min,max,step; if (isConnected()) { if (HasCooler()) { defineSwitch(&CoolerSP); defineNumber(&CoolerNP); temperatureID = IEAddTimer(POLLMS, QHYCCD::updateTemperatureHelper, this); } if(HasUSBSpeed) { if (sim) { SpeedN[0].min = 1; SpeedN[0].max = 5; SpeedN[0].step = 1; SpeedN[0].value = 1; } else { int ret = GetQHYCCDParamMinMaxStep(camhandle,CONTROL_SPEED,&min,&max,&step); if(ret == QHYCCD_SUCCESS) { SpeedN[0].min = min; SpeedN[0].max = max; SpeedN[0].step = step; } SpeedN[0].value = GetQHYCCDParam(camhandle,CONTROL_SPEED); DEBUGF(INDI::Logger::DBG_DEBUG, "USB Speed. Value: %g Min: %g Max: %g Step %g", SpeedN[0].value, SpeedN[0].min, SpeedN[0].max, SpeedN[0].step); } defineNumber(&SpeedNP); } if(HasGain) { if (sim) { GainN[0].min = 0; GainN[0].max = 100; GainN[0].step = 10; GainN[0].value = 50; } else { int ret = GetQHYCCDParamMinMaxStep(camhandle,CONTROL_GAIN,&min,&max,&step); if(ret == QHYCCD_SUCCESS) { GainN[0].min = min; GainN[0].max = max; GainN[0].step = step; } GainN[0].value = GetQHYCCDParam(camhandle,CONTROL_GAIN); DEBUGF(INDI::Logger::DBG_DEBUG, "Gain. Value: %g Min: %g Max: %g Step %g", GainN[0].value, GainN[0].min, GainN[0].max, GainN[0].step); } defineNumber(&GainNP); } if(HasOffset) { if (sim) { OffsetN[0].min = 1; OffsetN[0].max = 10; OffsetN[0].step = 1; OffsetN[0].value = 1; } else { int ret = GetQHYCCDParamMinMaxStep(camhandle,CONTROL_OFFSET,&min,&max,&step); if(ret == QHYCCD_SUCCESS) { OffsetN[0].min = min; OffsetN[0].max = max; OffsetN[0].step = step; } OffsetN[0].value = GetQHYCCDParam(camhandle,CONTROL_OFFSET); DEBUGF(INDI::Logger::DBG_DEBUG, "Offset. Value: %g Min: %g Max: %g Step %g", OffsetN[0].value, OffsetN[0].min, OffsetN[0].max, OffsetN[0].step); } //Define the Offset defineNumber(&OffsetNP); } if(HasFilters) { //Define the Filter Slot and name properties defineNumber(&FilterSlotNP); GetFilterNames(FILTER_TAB); defineText(FilterNameTP); } if (HasUSBTraffic) { if (sim) { USBTrafficN[0].min = 1; USBTrafficN[0].max = 100; USBTrafficN[0].step = 5; USBTrafficN[0].value = 20; } else { int ret = GetQHYCCDParamMinMaxStep(camhandle,CONTROL_USBTRAFFIC,&min,&max,&step); if(ret == QHYCCD_SUCCESS) { USBTrafficN[0].min = min; USBTrafficN[0].max = max; USBTrafficN[0].step = step; } USBTrafficN[0].value = GetQHYCCDParam(camhandle,CONTROL_USBTRAFFIC); DEBUGF(INDI::Logger::DBG_DEBUG, "USB Traffic. Value: %g Min: %g Max: %g Step %g", USBTrafficN[0].value, USBTrafficN[0].min, USBTrafficN[0].max, USBTrafficN[0].step); } defineNumber(&USBTrafficNP); } // Let's get parameters now from CCD setupParams(); //timerID = SetTimer(POLLMS); } else { if (HasCooler()) { deleteProperty(CoolerSP.name); deleteProperty(CoolerNP.name); } if(HasUSBSpeed) { deleteProperty(SpeedNP.name); } if(HasGain) { deleteProperty(GainNP.name); } if(HasOffset) { deleteProperty(OffsetNP.name); } if(HasFilters) { deleteProperty(FilterSlotNP.name); deleteProperty(FilterNameTP->name); } if (HasUSBTraffic) deleteProperty(USBTrafficNP.name); RemoveTimer(timerID); } return true; }