bool INDI::Focuser::initProperties() { DefaultDevice::initProperties(); // let the base class flesh in what it wants initFocuserProperties(getDeviceName(), MAIN_CONTROL_TAB); /* Port */ IUFillText(&PortT[0], "PORT", "Port", "/dev/ttyUSB0"); IUFillTextVector(&PortTP, PortT, 1, getDeviceName(), "DEVICE_PORT", "Ports", OPTIONS_TAB, IP_RW, 0, IPS_IDLE); // Presets IUFillNumber(&PresetN[0], "Preset 1", "", "%6.2f", 0, 60000, 1000, 0); IUFillNumber(&PresetN[1], "Preset 2", "", "%6.2f", 0, 60000, 1000, 0); IUFillNumber(&PresetN[2], "Preset 3", "", "%6.2f", 0, 60000, 1000, 0); IUFillNumberVector(&PresetNP, PresetN, 3, getDeviceName(), "Presets", "", "Presets", IP_RW, 0, IPS_IDLE); //Preset GOTO IUFillSwitch(&PresetGotoS[0], "Preset 1", "", ISS_OFF); IUFillSwitch(&PresetGotoS[1], "Preset 2", "", ISS_OFF); IUFillSwitch(&PresetGotoS[2], "Preset 3", "", ISS_OFF); IUFillSwitchVector(&PresetGotoSP, PresetGotoS, 3, getDeviceName(), "Goto", "", "Presets", IP_RW, ISR_1OFMANY, 0, IPS_IDLE); addDebugControl(); controller->mapController("Focus In", "Focus In", INDI::Controller::CONTROLLER_BUTTON, "BUTTON_1"); controller->mapController("Focus Out", "Focus Out", INDI::Controller::CONTROLLER_BUTTON, "BUTTON_2"); controller->mapController("Abort Focus", "Abort Focus", INDI::Controller::CONTROLLER_BUTTON, "BUTTON_3"); controller->initProperties(); setDriverInterface(FOCUSER_INTERFACE); return true; }
bool WatchDog::initProperties() { INDI::DefaultDevice::initProperties(); IUFillNumber(&HeartBeatN[0], "WATCHDOG_HEARTBEAT_VALUE", "Threshold (min)", "%g", 0, 180, 10, 0); IUFillNumberVector(&HeartBeatNP, HeartBeatN, 1, getDeviceName(), "WATCHDOG_HEARTBEAT", "Heart beat", MAIN_CONTROL_TAB, IP_RW, 60, IPS_IDLE); IUFillText(&SettingsT[0], "INDISERVER_HOST", "indiserver host", "localhost"); IUFillText(&SettingsT[1], "INDISERVER_PORT", "indiserver port", "7624"); IUFillText(&SettingsT[2], "SHUTDOWN_SCRIPT", "shutdown script", nullptr); IUFillTextVector(&SettingsTP, SettingsT, 3, getDeviceName(), "WATCHDOG_SETTINGS", "Settings", MAIN_CONTROL_TAB, IP_RW, 60, IPS_IDLE); IUFillSwitch(&ShutdownProcedureS[PARK_MOUNT], "PARK_MOUNT", "Park Mount", ISS_OFF); IUFillSwitch(&ShutdownProcedureS[PARK_DOME], "PARK_DOME", "Park Dome", ISS_OFF); IUFillSwitch(&ShutdownProcedureS[EXECUTE_SCRIPT], "EXECUTE_SCRIPT", "Execute Script", ISS_OFF); IUFillSwitchVector(&ShutdownProcedureSP, ShutdownProcedureS, 3, getDeviceName(), "WATCHDOG_SHUTDOWN", "Shutdown", MAIN_CONTROL_TAB, IP_RW, ISR_NOFMANY, 60, IPS_IDLE); IUFillText(&ActiveDeviceT[ACTIVE_TELESCOPE], "ACTIVE_TELESCOPE", "Telescope", "Telescope Simulator"); IUFillText(&ActiveDeviceT[ACTIVE_DOME], "ACTIVE_DOME", "Dome", "Dome Simulator"); IUFillTextVector(&ActiveDeviceTP, ActiveDeviceT, 2, getDeviceName(), "ACTIVE_DEVICES", "Active devices", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); addDebugControl(); return true; }
bool Vantage::initProperties() { INDI::Weather::initProperties(); IUFillText(&PortT[0],"PORT","Port","/dev/vantage"); IUFillTextVector(&PortTP,PortT,1,getDeviceName(),"DEVICE_PORT","Ports",OPTIONS_TAB,IP_RW,60,IPS_IDLE); IUFillSwitch(&BaudRateS[0], "1200", "", ISS_OFF); IUFillSwitch(&BaudRateS[1], "2400", "", ISS_OFF); IUFillSwitch(&BaudRateS[2], "4800", "", ISS_OFF); IUFillSwitch(&BaudRateS[3], "9600", "", ISS_OFF); IUFillSwitch(&BaudRateS[4], "14400", "", ISS_OFF); IUFillSwitch(&BaudRateS[5], "19200", "", ISS_ON); IUFillSwitchVector(&BaudRateSP, BaudRateS, 6, getDeviceName(),"DEVICE_BAUD_RATE", "Baud Rate", OPTIONS_TAB, IP_RW, ISR_1OFMANY, 60, IPS_IDLE); addParameter("WEATHER_FORECAST", "Forecast", 0, 0, 0, 1); addParameter("WEATHER_TEMPERATURE", "Temperature (C)", -10, 30, -20, 40); addParameter("WEATHER_BAROMETER", "Barometer (mbar)", 20, 32.5, 20, 32.5); addParameter("WEATHER_WIND_SPEED", "Wind (kph)", 0, 20, 0, 40); addParameter("WEAHTER_WIND_DIRECTION", "Wind Direction", 0, 360, 0, 360); addParameter("WEATHER_HUMIDITY", "Humidity %", 0, 100, 0, 100); addParameter("WEATHER_RAIN_RATE", "Rain (mm/h)", 0, 0, 0, 0); addParameter("WEATHER_SOLAR_RADIATION", "Solar Radiation (w/m^2)", 0, 10000, 0, 10000); setCriticalParameter("WEATHER_FORECAST"); setCriticalParameter("WEATHER_TEMPERATURE"); setCriticalParameter("WEATHER_WIND_SPEED"); setCriticalParameter("WEATHER_RAIN_RATE"); addDebugControl(); return true; }
bool IpFocus::initProperties() { INDI::Focuser::initProperties(); IUFillText(&FocuserEndpointT[0], "API_ENDPOINT", "API Endpoint", "http://192.168.1.203/focuser"); IUFillTextVector(&FocuserEndpointTP, FocuserEndpointT, 1, getDeviceName(), "FOCUSER_API_ENDPOINT", "Focuser", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); IUFillText(&AlwaysApproachDirection[0], "ALWAYS_APPROACH_DIR", "Always approach CW/CCW/blank", "CCW"); IUFillTextVector(&AlwaysApproachDirectionP, AlwaysApproachDirection, 1, getDeviceName(), "BACKLASH_APPROACH_SETTINGS", "Backlash Direction", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); IUFillText(&BacklashSteps[0],"BACKLASH_STEPS","Backlash steps","300"); IUFillTextVector(&BacklashStepsP,BacklashSteps,1,getDeviceName(),"BACKLASH_STEPS_SETTINGS","Backlash Steps",OPTIONS_TAB,IP_RW,60,IPS_IDLE); IUFillNumber(&SeeingN[0],"SIM_SEEING","arcseconds","%4.2f",0,60,0,3.5); IUFillNumberVector(&SeeingNP,SeeingN,1,getDeviceName(),"SEEING_SETTINGS","Seeing",MAIN_CONTROL_TAB,IP_RW,60,IPS_IDLE); IUFillNumber(&FWHMN[0],"SIM_FWHM","arcseconds","%4.2f",0,60,0,7.5); IUFillNumberVector(&FWHMNP,FWHMN,1,getDeviceName(), "FWHM","FWHM",MAIN_CONTROL_TAB,IP_RO,60,IPS_IDLE); ticks = initTicks = sqrt(FWHMN[0].value - SeeingN[0].value) / 0.75; /* Relative and absolute movement settings which are not set on connect*/ FocusRelPosN[0].min = 0.; FocusRelPosN[0].max = 5000.; FocusRelPosN[0].value = 0; FocusRelPosN[0].step = 1000; FocusAbsPosN[0].step = 1000; addDebugControl(); return true; }
bool StarbookDriver::initProperties() { Telescope::initProperties(); IUFillText(&VersionT[0], "Version", "Version", ""); IUFillTextVector(&VersionTP, VersionT, 1, getDeviceName(), "Firmware", "Firmware", INFO_TAB, IP_RO, 0, IPS_IDLE); IUFillText(&StateT[0], "State", "State", ""); IUFillTextVector(&StateTP, StateT, 1, getDeviceName(), "Status", "Status", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); IUFillSwitch(&StartS[0], "Initialize", "Initialize", ISS_OFF); IUFillSwitchVector(&StartSP, StartS, 1, getDeviceName(), "Basic", "Basic control", MAIN_CONTROL_TAB, IP_RW, ISR_ATMOST1, 60, IPS_IDLE); curlConnection = new Connection::Curl(this); curlConnection->registerHandshake([&]() { return callHandshake(); }); registerConnection(curlConnection); curlConnection->setDefaultHost(DEFAULT_STARBOOK_ADDRESS); curlConnection->setDefaultPort(DEFAULT_STARBOOK_PORT); cmd_interface = std::unique_ptr<starbook::CommandInterface>( new starbook::CommandInterface(curlConnection) ); addDebugControl(); last_known_state = starbook::UNKNOWN; return true; }
bool WeatherSafetyProxy::initProperties() { INDI::Weather::initProperties(); IUFillText(&keywordT[0], "WEATHER_CONDITION", "Weather Condition", "condition"); IUFillTextVector(&keywordTP, keywordT, 1, getDeviceName(), "KEYWORD", "Keywords", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); IUFillText(&ScriptsT[WSP_SCRIPT], "WEATHER_SAFETY_SCRIPT", "Weather safety script", "/usr/local/share/indi/scripts/weather_status.py"); IUFillTextVector(&ScriptsTP, ScriptsT, WSP_SCRIPT_COUNT, getDefaultName(), "WEATHER_SAFETY_SCRIPTS", "Script", OPTIONS_TAB, IP_RW, 100, IPS_IDLE); IUFillText(&UrlT[WSP_URL], "WEATHER_SAFETY_URL", "Weather safety URL", "http://0.0.0.0:5000/weather/safety"); IUFillTextVector(&UrlTP, UrlT, WSP_URL_COUNT, getDefaultName(), "WEATHER_SAFETY_URLS", "Url", OPTIONS_TAB, IP_RW, 100, IPS_IDLE); IUFillSwitch(&ScriptOrCurlS[WSP_USE_SCRIPT], "Use script", "", ISS_ON); IUFillSwitch(&ScriptOrCurlS[WSP_USE_CURL], "Use url", "", ISS_OFF); IUFillSwitchVector(&ScriptOrCurlSP, ScriptOrCurlS, WSP_USE_COUNT, getDeviceName(), "SCRIPT_OR_CURL", "Script or url", OPTIONS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); IUFillNumber(&softErrorHysteresisN[WSP_SOFT_ERROR_MAX], "SOFT_ERROR_MAX", "Max soft errors", "%g", 0.0, 1000.0, 1.0, 30.0); IUFillNumber(&softErrorHysteresisN[WSP_SOFT_ERROR_RECOVERY], "SOFT_ERROR_RECOVERY", "Minumum soft error for recovery", "%g", 0.0, 1000.0, 1.0, 7.0); IUFillNumberVector(&softErrorHysteresisNP, softErrorHysteresisN, 2, getDeviceName(), "SOFT_ERROR_HYSTERESIS", "Soft error hysterese", OPTIONS_TAB, IP_RW, 0, IPS_IDLE); addParameter("WEATHER_SAFETY", "Weather Safety", 0.9, 1.1, 0); // 0 is unsafe, 1 is safe setCriticalParameter("WEATHER_SAFETY"); IUFillText(&reasonsT[0], "Reasons", "", nullptr); IUFillTextVector(&reasonsTP, reasonsT, 1, getDeviceName(), "WEATHER_SAFETY_REASONS", "Weather Safety Reasons", MAIN_CONTROL_TAB, IP_RO, 120, IPS_IDLE); addDebugControl(); return true; }
bool FlipFlat::initProperties() { INDI::DefaultDevice::initProperties(); // Device port IUFillText(&PortT[0],"PORT","Port","/dev/ttyUSB0"); IUFillTextVector(&PortTP,PortT,1,getDeviceName(),"DEVICE_PORT","Ports",OPTIONS_TAB,IP_RW,60,IPS_IDLE); // Status IUFillText(&StatusT[0],"Cover","",NULL); IUFillText(&StatusT[1],"Light","",NULL); IUFillText(&StatusT[2],"Motor","",NULL); IUFillTextVector(&StatusTP,StatusT,3,getDeviceName(),"Status","",MAIN_CONTROL_TAB,IP_RO,60,IPS_IDLE); // Firmware version IUFillText(&FirmwareT[0],"Version","",NULL); IUFillTextVector(&FirmwareTP,FirmwareT,1,getDeviceName(),"Firmware","",MAIN_CONTROL_TAB,IP_RO,60,IPS_IDLE); initDustCapProperties(getDeviceName(), MAIN_CONTROL_TAB); initLightBoxProperties(getDeviceName(), MAIN_CONTROL_TAB); LightIntensityN[0].min = 0; LightIntensityN[0].max = 255; LightIntensityN[0].step = 10; // Set DUSTCAP_INTEFACE later on connect after we verify whether it's flip-flat (dust cover + light) or just flip-man (light only) setDriverInterface(AUX_INTERFACE | LIGHTBOX_INTERFACE); addDebugControl(); return true; }
bool ASIEAF::initProperties() { INDI::Focuser::initProperties(); // Focuser temperature IUFillNumber(&TemperatureN[0], "TEMPERATURE", "Celsius", "%6.2f", -50, 70., 0., 0.); IUFillNumberVector(&TemperatureNP, TemperatureN, 1, getDeviceName(), "FOCUS_TEMPERATURE", "Temperature", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); // Focus motion beep IUFillSwitch(&BeepS[BEEP_ON], "ON", "On", ISS_ON); IUFillSwitch(&BeepS[BEEL_OFF], "OFF", "Off", ISS_OFF); IUFillSwitchVector(&BeepSP, BeepS, 2, getDeviceName(), "FOCUS_BEEP", "Beep", OPTIONS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); FocusRelPosN[0].min = 0.; FocusRelPosN[0].max = m_MaxSteps / 2.0; FocusRelPosN[0].value = 0; FocusRelPosN[0].step = FocusRelPosN[0].max / 20; FocusAbsPosN[0].min = 0.; FocusAbsPosN[0].max = m_MaxSteps; FocusAbsPosN[0].value = 0; FocusAbsPosN[0].step = m_MaxSteps / 20.0; setDefaultPollingPeriod(500); addDebugControl(); return true; }
bool WeatherMeta::initProperties() { INDI::DefaultDevice::initProperties(); // Active Devices IUFillText(&ActiveDeviceT[0], "ACTIVE_WEATHER_1", "Station #1", nullptr); IUFillText(&ActiveDeviceT[1], "ACTIVE_WEATHER_2", "Station #2", nullptr); IUFillText(&ActiveDeviceT[2], "ACTIVE_WEATHER_3", "Station #3", nullptr); IUFillText(&ActiveDeviceT[3], "ACTIVE_WEATHER_4", "Station #4", nullptr); IUFillTextVector(&ActiveDeviceTP, ActiveDeviceT, 4, getDeviceName(), "ACTIVE_DEVICES", "Stations", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); // Station Status IUFillLight(&StationL[0], "STATION_STATUS_1", "Station #1", IPS_IDLE); IUFillLight(&StationL[1], "STATION_STATUS_2", "Station #2", IPS_IDLE); IUFillLight(&StationL[2], "STATION_STATUS_3", "Station #3", IPS_IDLE); IUFillLight(&StationL[3], "STATION_STATUS_4", "Station #4", IPS_IDLE); IUFillLightVector(&StationLP, StationL, 4, getDeviceName(), "WEATHER_STATUS", "Status", MAIN_CONTROL_TAB, IPS_IDLE); // Update Period IUFillNumber(&UpdatePeriodN[0], "PERIOD", "Period (secs)", "%4.2f", 0, 3600, 60, 60); IUFillNumberVector(&UpdatePeriodNP, UpdatePeriodN, 1, getDeviceName(), "WEATHER_UPDATE", "Update", MAIN_CONTROL_TAB, IP_RO, 60, IPS_IDLE); addDebugControl(); setDriverInterface(AUX_INTERFACE); return true; }
/************************************************************************************** ** We init our properties here. The only thing we want to init are the Debug controls ***************************************************************************************/ bool SimpleScope::initProperties() { // ALWAYS call initProperties() of parent first INDI::Telescope::initProperties(); addDebugControl(); }
bool ScopeScript::initProperties() { INDI::Telescope::initProperties(); #if defined(__APPLE__) IUFillText(&ScriptsT[0], "FOLDER", "Folder", "/usr/local/share/indi/scripts"); #else IUFillText(&ScriptsT[0], "FOLDER", "Folder", "/usr/share/indi/scripts"); #endif IUFillText(&ScriptsT[SCRIPT_CONNECT], "SCRIPT_CONNECT", "Connect script", "connect.py"); IUFillText(&ScriptsT[SCRIPT_DISCONNECT], "SCRIPT_DISCONNECT", "Disconnect script", "disconnect.py"); IUFillText(&ScriptsT[SCRIPT_STATUS], "SCRIPT_STATUS", "Get status script", "status.py"); IUFillText(&ScriptsT[SCRIPT_GOTO], "SCRIPT_GOTO", "Goto script", "goto.py"); IUFillText(&ScriptsT[SCRIPT_SYNC], "SCRIPT_SYNC", "Sync script", "sync.py"); IUFillText(&ScriptsT[SCRIPT_PARK], "SCRIPT_PARK", "Park script", "park.py"); IUFillText(&ScriptsT[SCRIPT_UNPARK], "SCRIPT_UNPARK", "Unpark script", "unpark.py"); IUFillText(&ScriptsT[SCRIPT_MOVE_NORTH], "SCRIPT_MOVE_NORTH", "Move north script", "move_north.py"); IUFillText(&ScriptsT[SCRIPT_MOVE_EAST], "SCRIPT_MOVE_EAST", "Move east script", "move_east.py"); IUFillText(&ScriptsT[SCRIPT_MOVE_SOUTH], "SCRIPT_MOVE_SOUTH", "Move south script", "move_south.py"); IUFillText(&ScriptsT[SCRIPT_MOVE_WEST], "SCRIPT_MOVE_WEST", "Move west script", "move_west.py"); IUFillText(&ScriptsT[SCRIPT_ABORT], "SCRIPT_ABORT", "Abort motion script", "abort.py"); IUFillTextVector(&ScriptsTP, ScriptsT, SCRIPT_COUNT, getDefaultName(), "SCRIPTS", "Scripts", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); addDebugControl(); setDriverInterface(getDriverInterface()); return true; }
bool GPUSB::initProperties() { initGuiderProperties(getDeviceName(), MAIN_CONTROL_TAB); addDebugControl(); return INDI::DefaultDevice::initProperties(); }
bool RoboFocus::initProperties() { INDI::Focuser::initProperties(); /* Focuser temperature */ IUFillNumber(&TemperatureN[0], "TEMPERATURE", "Celsius", "%6.2f", 0, 65000., 0., 10000.); IUFillNumberVector(&TemperatureNP, TemperatureN, 1, getDeviceName(), "FOCUS_TEMPERATURE", "Temperature", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); /* Settings of the Robofocus */ IUFillNumber(&SettingsN[0], "Duty cycle", "Duty cycle", "%6.0f", 0., 255., 0., 1.0); IUFillNumber(&SettingsN[1], "Step Delay", "Step delay", "%6.0f", 0., 255., 0., 1.0); IUFillNumber(&SettingsN[2], "Motor Steps", "Motor steps per tick", "%6.0f", 0., 255., 0., 1.0); IUFillNumberVector(&SettingsNP, SettingsN, 3, getDeviceName(), "FOCUS_SETTINGS", "Settings", SETTINGS_TAB, IP_RW, 0, IPS_IDLE); /* Power Switches of the Robofocus */ IUFillSwitch(&PowerSwitchesS[0], "1", "Switch 1", ISS_OFF); IUFillSwitch(&PowerSwitchesS[1], "2", "Switch 2", ISS_OFF); IUFillSwitch(&PowerSwitchesS[2], "3", "Switch 3", ISS_OFF); IUFillSwitch(&PowerSwitchesS[3], "4", "Switch 4", ISS_ON); IUFillSwitchVector(&PowerSwitchesSP, PowerSwitchesS, 4, getDeviceName(), "SWTICHES", "Power", SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); /* Robofocus should stay within these limits */ IUFillNumber(&MinMaxPositionN[0], "MINPOS", "Minimum Tick", "%6.0f", 1., 65000., 0., 100. ); IUFillNumber(&MinMaxPositionN[1], "MAXPOS", "Maximum Tick", "%6.0f", 1., 65000., 0., 55000.); IUFillNumberVector(&MinMaxPositionNP, MinMaxPositionN, 2, getDeviceName(), "FOCUS_MINMAXPOSITION", "Extrema", SETTINGS_TAB, IP_RW, 0, IPS_IDLE); IUFillNumber(&MaxTravelN[0], "MAXTRAVEL", "Maximum travel", "%6.0f", 1., 64000., 0., 10000.); IUFillNumberVector(&MaxTravelNP, MaxTravelN, 1, getDeviceName(), "FOCUS_MAXTRAVEL", "Max. travel", SETTINGS_TAB, IP_RW, 0, IPS_IDLE ); /* Set Robofocus position register to this position */ IUFillNumber(&SetRegisterPositionN[0], "SETPOS", "Position", "%6.0f", 0, 64000., 0., 0. ); IUFillNumberVector(&SetRegisterPositionNP, SetRegisterPositionN, 1, getDeviceName(), "FOCUS_REGISTERPOSITION", "Sync", SETTINGS_TAB, IP_RW, 0, IPS_IDLE); /* Backlash */ IUFillNumber(&SetBacklashN[0], "SETBACKLASH", "Backlash", "%6.0f", -255., 255., 0., 0.); IUFillNumberVector(&SetBacklashNP, SetBacklashN, 1, getDeviceName(), "FOCUS_BACKLASH", "Set Register", SETTINGS_TAB, IP_RW, 0, IPS_IDLE); /* Relative and absolute movement */ FocusRelPosN[0].min = -5000.; FocusRelPosN[0].max = 5000.; FocusRelPosN[0].value = 100; FocusRelPosN[0].step = 100; FocusAbsPosN[0].min = 0.; FocusAbsPosN[0].max = 64000.; FocusAbsPosN[0].value = 0; FocusAbsPosN[0].step = 1000; simulatedTemperature=600.0; simulatedPosition=20000; addDebugControl(); addSimulationControl(); return true; }
bool MoonLite::initProperties() { INDI::Focuser::initProperties(); FocusSpeedN[0].min = 1; FocusSpeedN[0].max = 5; FocusSpeedN[0].value = 1; /* Step Mode */ IUFillSwitch(&StepModeS[0], "Half Step", "", ISS_OFF); IUFillSwitch(&StepModeS[1], "Full Step", "", ISS_ON); IUFillSwitchVector(&StepModeSP, StepModeS, 2, getDeviceName(), "Step Mode", "", OPTIONS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); /* Focuser temperature */ IUFillNumber(&TemperatureN[0], "TEMPERATURE", "Celsius", "%6.2f", -50, 70., 0., 0.); IUFillNumberVector(&TemperatureNP, TemperatureN, 1, getDeviceName(), "FOCUS_TEMPERATURE", "Temperature", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); // Maximum Travel IUFillNumber(&MaxTravelN[0], "MAXTRAVEL", "Maximum travel", "%6.0f", 1., 60000., 0., 10000.); IUFillNumberVector(&MaxTravelNP, MaxTravelN, 1, getDeviceName(), "FOCUS_MAXTRAVEL", "Max. travel", OPTIONS_TAB, IP_RW, 0, IPS_IDLE); // Temperature Settings IUFillNumber(&TemperatureSettingN[0], "Calibration", "", "%6.2f", -20, 20, 0.5, 0); IUFillNumber(&TemperatureSettingN[1], "Coefficient", "", "%6.2f", -20, 20, 0.5, 0); IUFillNumberVector(&TemperatureSettingNP, TemperatureSettingN, 2, getDeviceName(), "Temperature Settings", "", OPTIONS_TAB, IP_RW, 0, IPS_IDLE); // Compensate for temperature IUFillSwitch(&TemperatureCompensateS[0], "Enable", "", ISS_OFF); IUFillSwitch(&TemperatureCompensateS[1], "Disable", "", ISS_ON); IUFillSwitchVector(&TemperatureCompensateSP, TemperatureCompensateS, 2, getDeviceName(), "Temperature Compensate", "", MAIN_CONTROL_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); // Sync IUFillNumber(&SyncN[0], "FOCUS_SYNC_OFFSET", "Offset", "%6.0f", 0, 60000., 0., 0.); IUFillNumberVector(&SyncNP, SyncN, 1, getDeviceName(), "FOCUS_SYNC", "Sync", MAIN_CONTROL_TAB, IP_RW, 0, IPS_IDLE); /* Relative and absolute movement */ FocusRelPosN[0].min = 0.; FocusRelPosN[0].max = 30000.; FocusRelPosN[0].value = 0; FocusRelPosN[0].step = 1000; FocusAbsPosN[0].min = 0.; FocusAbsPosN[0].max = 60000.; FocusAbsPosN[0].value = 0; FocusAbsPosN[0].step = 1000; setDefaultPollingPeriod(500); addDebugControl(); return true; }
bool MoonLiteDRO::initProperties() { INDI::Focuser::initProperties(); FocusSpeedN[0].min = 1; FocusSpeedN[0].max = 5; FocusSpeedN[0].value = 1; // Step Delay IUFillNumber(&StepDelayN[0], "STEP_DELAY", "Delay", "%.f", 1, 5, 1., 1.); IUFillNumberVector(&StepDelayNP, StepDelayN, 1, getDeviceName(), "FOCUS_STEP_DELAY", "Step", SETTINGS_TAB, IP_RW, 0, IPS_IDLE); // Step Mode IUFillSwitch(&StepModeS[FOCUS_HALF_STEP], "HALF_STEP", "Half Step", ISS_OFF); IUFillSwitch(&StepModeS[FOCUS_FULL_STEP], "FULL_STEP", "Full Step", ISS_ON); IUFillSwitchVector(&StepModeSP, StepModeS, 2, getDeviceName(), "FOCUS_STEP_MODE", "Step Mode", SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); // Temperature Settings IUFillNumber(&TemperatureSettingN[0], "Calibration", "Calibration", "%6.2f", -20, 20, 0.5, 0); IUFillNumber(&TemperatureSettingN[1], "Coefficient", "Coefficient", "%6.2f", -20, 20, 0.5, 0); IUFillNumberVector(&TemperatureSettingNP, TemperatureSettingN, 2, getDeviceName(), "FOCUS_TEMPERATURE_SETTINGS", "T. Settings", SETTINGS_TAB, IP_RW, 0, IPS_IDLE); // Compensate for temperature IUFillSwitch(&TemperatureCompensateS[0], "Enable", "Enable", ISS_OFF); IUFillSwitch(&TemperatureCompensateS[1], "Disable", "Disable", ISS_ON); IUFillSwitchVector(&TemperatureCompensateSP, TemperatureCompensateS, 2, getDeviceName(), "FOCUS_TEMPERATURE_COMPENSATION", "T. Compensate", SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); // Focuser temperature IUFillNumber(&TemperatureN[0], "TEMPERATURE", "Celsius", "%6.2f", -50, 70., 0., 0.); IUFillNumberVector(&TemperatureNP, TemperatureN, 1, getDeviceName(), "FOCUS_TEMPERATURE", "Temperature", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); // Relative and absolute movement FocusRelPosN[0].min = 0.; FocusRelPosN[0].max = 50000.; FocusRelPosN[0].value = 0; FocusRelPosN[0].step = 1000; FocusAbsPosN[0].min = 0.; FocusAbsPosN[0].max = 100000.; FocusAbsPosN[0].value = 0; FocusAbsPosN[0].step = 1000; setDefaultPollingPeriod(500); addDebugControl(); return true; }
bool QSICCD::initProperties() { // Init parent properties first INDI::CCD::initProperties(); IUFillSwitch(&CoolerS[0], "COOLER_ON", "ON", ISS_OFF); IUFillSwitch(&CoolerS[1], "COOLER_OFF", "OFF", ISS_ON); IUFillSwitchVector(&CoolerSP, CoolerS, 2, getDeviceName(), "CCD_COOLER", "Cooler", MAIN_CONTROL_TAB, IP_WO, ISR_1OFMANY, 0, IPS_IDLE); IUFillSwitch(&ShutterS[0], "SHUTTER_ON", "Manual open", ISS_OFF); IUFillSwitch(&ShutterS[1], "SHUTTER_OFF", "Manual close", ISS_OFF); IUFillSwitchVector(&ShutterSP, ShutterS, 2, getDeviceName(), "CCD_SHUTTER", "Shutter", MAIN_CONTROL_TAB, IP_WO, ISR_1OFMANY, 0, IPS_IDLE); IUFillNumber(&CoolerN[0], "CCD_COOLER_VALUE", "Cooling Power (%)", "%+06.2f", 0., 1., .2, 0.0); IUFillNumberVector(&CoolerNP, CoolerN, 1, getDeviceName(), "CCD_COOLER_POWER", "Cooling Power", MAIN_CONTROL_TAB, IP_RO, 60, IPS_IDLE); IUFillSwitch(&ReadOutS[0], "QUALITY_HIGH", "High Quality", ISS_ON); IUFillSwitch(&ReadOutS[1], "QUALITY_LOW", "Fast", ISS_OFF); IUFillSwitchVector(&ReadOutSP, ReadOutS, 2, getDeviceName(), "READOUT_QUALITY", "Readout Speed", OPTIONS_TAB, IP_WO, ISR_1OFMANY, 0, IPS_IDLE); IUFillSwitch(&FilterS[0], "FILTER_CW", "+", ISS_OFF); IUFillSwitch(&FilterS[1], "FILTER_CCW", "-", ISS_OFF); IUFillSwitchVector(&FilterSP, FilterS, 2, getDeviceName(), "FILTER_WHEEL_MOTION", "Turn Wheel", FILTER_TAB, IP_RW, ISR_1OFMANY, 60, IPS_IDLE); IUFillSwitch(&GainS[GAIN_HIGH], "High", "", ISS_ON); IUFillSwitch(&GainS[GAIN_LOW], "Low", "", ISS_OFF); IUFillSwitch(&GainS[GAIN_AUTO], "Auto", "", ISS_OFF); IUFillSwitchVector(&GainSP, GainS, 3, getDeviceName(), "Gain", "", OPTIONS_TAB, IP_RW, ISR_1OFMANY, 60, IPS_IDLE); IUFillSwitch(&FanS[0], "Off", "", ISS_OFF); IUFillSwitch(&FanS[1], "Quiet", "", ISS_OFF); IUFillSwitch(&FanS[2], "Full", "", ISS_ON); IUFillSwitchVector(&FanSP, FanS, 3, getDeviceName(), "Fan", "", MAIN_CONTROL_TAB, IP_RW, ISR_1OFMANY, 60, IPS_IDLE); IUFillSwitch(&ABS[0], "Normal", "", ISS_ON); IUFillSwitch(&ABS[1], "High", "", ISS_OFF); IUFillSwitchVector(&ABSP, ABS, 2, getDeviceName(), "AntiBlooming", "", OPTIONS_TAB, IP_RW, ISR_1OFMANY, 60, IPS_IDLE); INDI::FilterInterface::initProperties(FILTER_TAB); addDebugControl(); setDriverInterface(getDriverInterface() | FILTER_INTERFACE); return true; }
/******************************************************************************* ** INDI is asking us to init our properties. *******************************************************************************/ bool DSICCD::initProperties() { // Must init parent properties first! INDI::CCD::initProperties(); // Add Debug Control. addDebugControl(); /* Add Gain number property (gs) */ IUFillNumber(GainN, "GAIN", "Gain", "%g", 0, 100, 1, 100); IUFillNumberVector(&GainNP, GainN, 1, getDeviceName(),"GAIN", "Gain", IMAGE_SETTINGS_TAB, IP_RW, 0, IPS_IDLE); /* Add Offset number property (gs) */ IUFillNumber(OffsetN, "OFFSET", "Offset", "%g", -50, 50, 1, 0); IUFillNumberVector(&OffsetNP, OffsetN, 1, getDeviceName(),"OFFSET", "Offset", IMAGE_SETTINGS_TAB, IP_RW, 0, IPS_IDLE); /* Vdd on during exposure property (gs) Actually, Meade envisage leaves Vdd always on for DSI III during exposure. However, this results in a significant amount of amp glow. Vdd auto mode also seems not to work properly for the DSI III. Experimentally, it turned out that swiching Vdd off manually during exposure significantly reduces amp glow and also noise by some amount. Hence this strategy is used by default but can be changed to envisage default mode by setting the following switch to ON. */ IUFillSwitch(&VddExpS[0], "Vdd On", "", ISS_OFF); IUFillSwitch(&VddExpS[1], "Vdd Off", "", ISS_ON); IUFillSwitchVector(&VddExpSP, VddExpS, 2, getDeviceName(), "DSI III exposure", "", IMAGE_SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); /* Add Temp number property (gs) */ IUFillNumber(CCDTempN, "CCDTEMP", "CCD Temperature [°C]", "%.1f", -128.5,128.5,0.1,-128.5); IUFillNumberVector(&CCDTempNP, CCDTempN, 1, getDeviceName(), "CCDTemp", "CCD Temp", IMAGE_INFO_TAB, IP_RO, 0, IPS_IDLE); /* Set exposure times according to Meade datasheets (gs) Ekos probably may limit minimum exposure time to 1/1000 s, but setting the lower limit to 1/10000 s might be useful e.g. for taking bias frames. */ PrimaryCCD.setMinMaxStep("CCD_EXPOSURE", "CCD_EXPOSURE_VALUE", 0.0001, 3600, 1, false); return true; }
bool QFW::initProperties() { INDI::FilterWheel::initProperties(); addDebugControl(); addSimulationControl(); serialConnection->setDefaultPort("/dev/ttyACM0"); FilterSlotN[0].min = 1; FilterSlotN[0].max = 7; CurrentFilter = 1; return true; }
bool JoyStick::initProperties() { INDI::DefaultDevice::initProperties(); IUFillText(&PortT[0],"PORT","Port","/dev/input/js0"); IUFillTextVector(&PortTP,PortT,1,getDeviceName(),"DEVICE_PORT","Ports",OPTIONS_TAB,IP_RW,60,IPS_IDLE); IUFillText(&JoystickInfoT[0],"JOYSTICK_NAME","Name",""); IUFillText(&JoystickInfoT[1],"JOYSTICK_VERSION","Version",""); IUFillText(&JoystickInfoT[2],"JOYSTICK_NJOYSTICKS","# Joysticks",""); IUFillText(&JoystickInfoT[3],"JOYSTICK_NAXES","# Axes",""); IUFillText(&JoystickInfoT[4],"JOYSTICK_NBUTTONS","# Buttons",""); IUFillTextVector(&JoystickInfoTP,JoystickInfoT,5,getDeviceName(),"JOYSTICK_INFO","Joystick Info",MAIN_CONTROL_TAB,IP_RO,60,IPS_IDLE); addDebugControl(); return true; }
bool Starbook::initProperties() { Telescope::initProperties(); IUFillText(&VersionT[0], "Version", "Version", ""); IUFillTextVector(&VersionInfo, VersionT, 1, getDeviceName(), "Firmware", "Firmware", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); if (getTelescopeConnection() & CONNECTION_TCP) { tcpConnection->setDefaultHost("127.0.0.1"); tcpConnection->setDefaultPort(5000); } addDebugControl(); state = starbook::UNKNOWN; return true; }
bool QikFlat::initProperties() { INDI::DefaultDevice::initProperties(); // Device port //IUFillText(&PortT[0],"PORT","Port","/dev/ttyUSB0"); //IUFillTextVector(&PortTP,PortT,1,getDeviceName(),"DEVICE_PORT","Ports",OPTIONS_TAB,IP_RW,60,IPS_IDLE); // Firmware version IUFillText(&FirmwareT[0],"Version","",NULL); IUFillTextVector(&FirmwareTP,FirmwareT,1,getDeviceName(),"Firmware","",MAIN_CONTROL_TAB,IP_RO,60,IPS_IDLE); initLightBoxProperties(getDeviceName(), MAIN_CONTROL_TAB); LightIntensityN[0].min = 0; LightIntensityN[0].max = 255; LightIntensityN[0].step = 10; setDriverInterface(AUX_INTERFACE | LIGHTBOX_INTERFACE); addDebugControl(); return true; }
bool WunderGround::initProperties() { INDI::Weather::initProperties(); IUFillText(&wunderAPIKeyT[0], "API_KEY", "API Key", NULL); IUFillTextVector(&wunderAPIKeyTP, wunderAPIKeyT, 1, getDeviceName(), "WUNDER_API_KEY", "Wunder", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); addParameter("WEATHER_FORECAST", "Weather", 0, 0, 0, 1); addParameter("WEATHER_TEMPERATURE", "Temperature (C)", -10, 30, -20, 40); addParameter("WEATHER_WIND_SPEED", "Wind (kph)", 0, 20, 0, 40); addParameter("WEATHER_WIND_GUST", "Gust (kph)", 0, 20, 0, 50); addParameter("WEATHER_RAIN_HOUR", "Precip (mm)", 0, 0, 0, 0); setCriticalParameter("WEATHER_FORECAST"); setCriticalParameter("WEATHER_TEMPERATURE"); setCriticalParameter("WEATHER_WIND_SPEED"); setCriticalParameter("WEATHER_RAIN_HOUR"); addDebugControl(); return true; }
bool WeatherWatcher::initProperties() { INDI::Weather::initProperties(); IUFillText(&keywordT[0], "RAIN", "Rain", "precip"); IUFillText(&keywordT[1], "TEMP", "Temperature", "temperature"); IUFillText(&keywordT[2], "WIND", "Wind", "wind"); IUFillText(&keywordT[3], "GUST", "Gust", "gust"); IUFillText(&keywordT[4], "FORECAST", "Forecast", "forecast"); IUFillTextVector(&keywordTP, keywordT, 5, getDeviceName(), "KEYWORD", "Keywords", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); IUFillText(&watchFileT[0], "URL", "File", nullptr); IUFillTextVector(&watchFileTP, watchFileT, 1, getDeviceName(), "WATCH_SOURCE", "Source", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); IUFillText(&separatorT[0], "SEPARATOR", "Separator", "="); IUFillTextVector(&separatorTP, separatorT, 1, getDeviceName(), "SEPARATOR_KEYWORD", "Separator", OPTIONS_TAB, IP_RW, 60, IPS_IDLE); addDebugControl(); return true; }
bool ArmPlat::initProperties() { INDI::Focuser::initProperties(); // Focuser temperature IUFillNumber(&TemperatureN[0], "TEMPERATURE", "Celsius", "%6.2f", -50, 70., 0., 0.); IUFillNumberVector(&TemperatureNP, TemperatureN, 1, getDeviceName(), "FOCUS_TEMPERATURE", "Temperature", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); // Internal/external temperature sensor backlash IUFillSwitch(&IntExtTempSensorS[INT_TEMP_SENSOR], "Internal", "", ISS_ON); IUFillSwitch(&IntExtTempSensorS[EXT_TEMP_SENSOR], "External", "", ISS_OFF); IUFillSwitchVector(&IntExtTempSensorSP, IntExtTempSensorS, 2, getDeviceName(), "Temperature sensor in use", "", FOCUS_SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); // Peripheral Port IUFillSwitch(&PerPortS[PORT_MAIN], "Main", "", ISS_ON ); IUFillSwitch(&PerPortS[PORT_EXP], "Exp", "", ISS_OFF ); # ifdef PLATYPUS IUFillSwitch(&PerPortS[PORT_THIRD], "Third", "", ISS_OFF ); IUFillSwitchVector(&PerPortSP, PerPortS, 3, getDeviceName(), "Port in use", "", FOCUS_SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); # else IUFillSwitchVector(&PerPortSP, PerPortS, 2, getDeviceName(), "Port in use", "", FOCUS_SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); # endif // HalfStep IUFillSwitch(&HalfStepS[HALFSTEP_OFF], "Off", "", ISS_ON); IUFillSwitch(&HalfStepS[HALFSTEP_ON], "On", "", ISS_OFF); IUFillSwitchVector(&HalfStepSP, HalfStepS, 2, getDeviceName(), "Half step", "", FOCUS_SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); // Wiring IUFillSwitch(&WiringS[WIRING_LUNATICO_NORMAL], "Lunatico Normal", "", ISS_ON); IUFillSwitch(&WiringS[WIRING_LUNATICO_REVERSED], "Lunatico Reverse", "", ISS_OFF); IUFillSwitch(&WiringS[WIRING_RFMOONLITE_NORMAL], "RF/Moonlite Normal", "", ISS_OFF); IUFillSwitch(&WiringS[WIRING_RFMOONLITE_REVERSED], "RF/Moonlite Reverse", "", ISS_OFF); IUFillSwitchVector(&WiringSP, WiringS, 4, getDeviceName(), "Wiring", "", FOCUS_SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); // Max Speed // our internal speed is in usec/step, with a reasonable range from 500.000.usec for dc motors simulating steps to // 50 usec optimistic speed for very small steppers // So our range is 10.000.- // and the conversion is usec/step = 500000 - ((INDISpeed - 1) * 50) // with our default and standard 10.000usec being 9800 (9801 actually) IUFillNumber(&MaxSpeedN[0], "Value", "", "%6.0f", 1., 10000., 100., 9800.); // min, max, step, value IUFillNumberVector(&MaxSpeedNP, MaxSpeedN, 1, getDeviceName(), "MaxSpeed", "", FOCUS_SETTINGS_TAB, IP_RW, 0, IPS_OK); // Enable/Disable backlash IUFillSwitch(&BacklashCompensationS[BACKLASH_ENABLED], "Enable", "", ISS_OFF); IUFillSwitch(&BacklashCompensationS[BACKLASH_DISABLED], "Disable", "", ISS_ON); IUFillSwitchVector(&BacklashCompensationSP, BacklashCompensationS, 2, getDeviceName(), "Backlash Compensation", "", FOCUS_SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); // Backlash Value IUFillNumber(&BacklashN[0], "Value", "", "%.f", 0, 200, 1., 0.); IUFillNumberVector(&BacklashNP, BacklashN, 1, getDeviceName(), "Backlash", "", FOCUS_SETTINGS_TAB, IP_RW, 0, IPS_IDLE); // Motor Types IUFillSwitch(&MotorTypeS[MOTOR_UNIPOLAR], "Unipolar", "", ISS_ON); IUFillSwitch(&MotorTypeS[MOTOR_BIPOLAR], "Bipolar", "", ISS_OFF); IUFillSwitch(&MotorTypeS[MOTOR_DC], "DC", "", ISS_OFF); IUFillSwitch(&MotorTypeS[MOTOR_STEPDIR], "Step-Dir", "", ISS_OFF); IUFillSwitchVector(&MotorTypeSP, MotorTypeS, 4, getDeviceName(), "Motor Type", "", FOCUS_SETTINGS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); // Firmware Version IUFillText(&FirmwareVersionT[0], "Version", "Version", ""); IUFillTextVector(&FirmwareVersionTP, FirmwareVersionT, 1, getDeviceName(), "Firmware", "Firmware", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); // Relative and absolute movement FocusRelPosN[0].min = 0.; FocusRelPosN[0].max = 5000.; FocusRelPosN[0].value = 0; FocusRelPosN[0].step = 100; FocusAbsPosN[0].min = 0.; FocusAbsPosN[0].max = 100000.; FocusAbsPosN[0].value = 50000; FocusAbsPosN[0].step = 5000; // Focus Sync // IUFillNumber(&SyncN[0], "SYNC", "Ticks", "%.f", 0, 100000., 0., 0.); // IUFillNumberVector(&SyncNP, SyncN, 1, getDeviceName(), "Sync", "", MAIN_CONTROL_TAB, IP_RW, 0, IPS_IDLE ); addDebugControl(); serialConnection->setDefaultBaudRate(Connection::Serial::B_115200); return true; }
bool NFocus::initProperties() { INDI::Focuser::initProperties(); // No speed for nfocus FocusSpeedN[0].min = FocusSpeedN[0].max = FocusSpeedN[0].value = 1; IUUpdateMinMax(&FocusSpeedNP); /* Port */ IUFillText(&PortT[0], "PORT", "Port", "/dev/ttyACM0"); IUFillTextVector(&PortTP, PortT, 1, getDeviceName(), "DEVICE_PORT", "Ports", MAIN_CONTROL_TAB, IP_RW, 0, IPS_IDLE); /* Focuser temperature */ IUFillNumber(&TemperatureN[0], "TEMPERATURE", "Celsius", "%6.2f", 0, 65000., 0., 10000.); IUFillNumberVector(&TemperatureNP, TemperatureN, 1, getDeviceName(), "FOCUS_TEMPERATURE", "Temperature", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); /* Timed move Settings */ IUFillNumber(&FocusTimerN[0],"FOCUS_TIMER_VALUE","Focus Timer","%5.0f",0.0,10000.0,10.0,10000.0); IUFillNumberVector(&FocusTimerNP,FocusTimerN,1,getDeviceName(),"FOCUS_TIMER","Timer",MAIN_CONTROL_TAB,IP_RW,60,IPS_OK); /* Settings of the Nfocus */ IUFillNumber(&SettingsN[0], "ON time", "ON waiting time", "%6.0f", 10., 250., 0., 73.); IUFillNumber(&SettingsN[1], "OFF time", "OFF waiting time", "%6.0f", 1., 250., 0., 15.); IUFillNumber(&SettingsN[2], "Fast Mode Delay", "Fast Mode Delay", "%6.0f", 0., 255., 0., 9.); IUFillNumberVector(&SettingsNP, SettingsN, 3, getDeviceName(), "FOCUS_SETTINGS", "Settings", OPTIONS_TAB, IP_RW, 0, IPS_IDLE); /* tick scaling factor. Inward dir ticks times this factor is considered to be the same as outward dir tick numbers. This is to compensate for DC motor incapabilities with regards to exact positioning at least a bit on the mass dependent path.... */ IUFillNumber(&InOutScalarN[0], "In/Out Scalar", "In/Out Scalar", "%1.2f", 0., 2., 1., 1.0); IUFillNumberVector(&InOutScalarNP, InOutScalarN, 1, getDeviceName(), "FOCUS_DIRSCALAR", "Direction scaling factor", OPTIONS_TAB, IP_RW, 0, IPS_IDLE ); /* Nfocus should stay within these limits */ IUFillNumber(&MinMaxPositionN[0], "MINPOS", "Minimum Tick", "%6.0f", -65000., 65000., 0., -65000. ); IUFillNumber(&MinMaxPositionN[1], "MAXPOS", "Maximum Tick", "%6.0f", 1., 65000., 0., 65000.); IUFillNumberVector(&MinMaxPositionNP, MinMaxPositionN, 2, getDeviceName(), "FOCUS_MINMAXPOSITION", "Extrema", OPTIONS_TAB, IP_RW, 0, IPS_IDLE); IUFillNumber(&MaxTravelN[0], "MAXTRAVEL", "Maximum travel", "%6.0f", 1., 64000., 0., 10000.); IUFillNumberVector(&MaxTravelNP, MaxTravelN, 1, getDeviceName(), "FOCUS_MAXTRAVEL", "Max. travel", OPTIONS_TAB, IP_RW, 0, IPS_IDLE ); /* Set Nfocus position register to this position */ IUFillNumber(&SetRegisterPositionN[0], "SETPOS", "Position", "%6.0f", 0, 64000., 0., 0. ); IUFillNumberVector(&SetRegisterPositionNP, SetRegisterPositionN, 1, getDeviceName(), "FOCUS_REGISTERPOSITION", "Set register", OPTIONS_TAB, IP_RW, 0, IPS_IDLE); /* Backlash */ IUFillNumber(&SetBacklashN[0], "SETBACKLASH", "Backlash", "%6.0f", -255., 255., 0., 0.); IUFillNumberVector(&SetBacklashNP, SetBacklashN, 1, getDeviceName(), "FOCUS_BACKLASH", "Set Register", OPTIONS_TAB, IP_RW, 0, IPS_IDLE); /* Relative and absolute movement */ FocusRelPosN[0].min = -65000.; FocusRelPosN[0].max = 65000.; FocusRelPosN[0].value = 0; FocusRelPosN[0].step = 100; FocusAbsPosN[0].min = 0.; FocusAbsPosN[0].max = 65000.; FocusAbsPosN[0].value = 0; FocusAbsPosN[0].step = 10000; addDebugControl(); return true; }
bool NStep::initProperties() { INDI::Focuser::initProperties(); // Focuser temperature IUFillNumber(&TemperatureN[0], "TEMPERATURE", "Celsius", "%6.2f", -100, 100, 0, 0); IUFillNumberVector(&TemperatureNP, TemperatureN, 1, getDeviceName(), "FOCUS_TEMPERATURE", "Temperature", MAIN_CONTROL_TAB, IP_RO, 0, IPS_IDLE); // Compensation Modes IUFillSwitch(&CompensationModeS[COMPENSATION_MODE_OFF], "COMPENSATION_MODE_OFF", "Off", ISS_ON); IUFillSwitch(&CompensationModeS[COMPENSATION_MODE_ONE_SHOT], "COMPENSATION_MODE_ONE_SHOT", "One shot", ISS_OFF); IUFillSwitch(&CompensationModeS[COMPENSATION_MODE_AUTO], "COMPENSATION_MODE_AUTO", "Auto", ISS_OFF); IUFillSwitchVector(&CompensationModeSP, CompensationModeS, 3, getDeviceName(), "COMPENSATION_MODE", "Mode", COMPENSATION_TAB, IP_RW, ISR_1OFMANY, 0, IPS_OK); // Prime for Manual IUFillSwitch(&PrimeManualS[0], "MANUAL_MODE_PRIME", "Prime Manual Mode", ISS_OFF); IUFillSwitchVector(&PrimeManualSP, PrimeManualS, 1, getDeviceName(), "COMPENSATION_PRIME", "Prime", COMPENSATION_TAB, IP_RW, ISR_1OFMANY, 0, IPS_OK); // Compensation Settings IUFillNumber(&CompensationSettingsN[COMPENSATION_SETTING_CHANGE], "COMPENSATION_SETTING_CHANGE", "Delta T. (C)", "%.1f", -99, 99, 0.1, 0); IUFillNumber(&CompensationSettingsN[COMPENSATION_SETTING_STEP], "COMPENSATION_SETTING_STEP", "Steps per Delta", "%.0f", 0, 999, 1, 0); IUFillNumber(&CompensationSettingsN[COMPENSATION_SETTING_BACKLASH], "COMPENSATION_SETTING_BACKLASH", "Backlash steps", "%.0f", 0, 999, 1, 0); IUFillNumber(&CompensationSettingsN[COMPENSATION_SETTING_TIMER], "COMPENSATION_SETTING_TIMER", "Averaged Time (s)", "%.0f", 0, 75, 1, 0); IUFillNumberVector(&CompensationSettingsNP, CompensationSettingsN, 4, getDeviceName(), "COMPENSATION_SETTING", "Settings", COMPENSATION_TAB, IP_RW, 0, IPS_OK); // Stepping Modes IUFillSwitch(&SteppingModeS[STEPPING_WAVE], "STEPPING_WAVE", "Wave", ISS_OFF); IUFillSwitch(&SteppingModeS[STEPPING_HALF], "STEPPING_HALF", "Half", ISS_OFF); IUFillSwitch(&SteppingModeS[STEPPING_FULL], "STEPPING_FULL", "Full", ISS_ON); IUFillSwitchVector(&SteppingModeSP, SteppingModeS, 3, getDeviceName(), "STEPPING_MODE", "Mode", STEPPING_TAB, IP_RW, ISR_1OFMANY, 0, IPS_OK); // Stepping Phase IUFillNumber(&SteppingPhaseN[0], "PHASES", "Wiring", "%.f", 0, 2, 1, 0); IUFillNumberVector(&SteppingPhaseNP, SteppingPhaseN, 1, getDeviceName(), "STEPPING_PHASE", "Phase", STEPPING_TAB, IP_RW, 0, IPS_OK); // Max Speed IUFillNumber(&MaxSpeedN[0], "RATE", "Rate", "%.f", 1, 254, 10, 0); IUFillNumberVector(&MaxSpeedNP, MaxSpeedN, 1, getDeviceName(), "MAX_SPEED", "Max Speed", MAIN_CONTROL_TAB, IP_RW, 0, IPS_OK); // Coil Energized Status IUFillSwitch(&CoilStatusS[COIL_ENERGIZED_OFF], "COIL_ENERGIZED_OFF", "De-energized", ISS_OFF); IUFillSwitch(&CoilStatusS[COIL_ENERGIZED_ON], "COIL_ENERGIZED_OFF", "Energized", ISS_OFF); IUFillSwitchVector(&CoilStatusSP, CoilStatusS, 2, getDeviceName(), "COIL_MODE", "Coil After Move", OPTIONS_TAB, IP_RW, ISR_1OFMANY, 0, IPS_OK); addDebugControl(); // Set limits as per documentation FocusAbsPosN[0].min = 0; FocusAbsPosN[0].max = 999999; FocusAbsPosN[0].step = 1000; FocusRelPosN[0].min = 0; FocusRelPosN[0].max = 999; FocusRelPosN[0].step = 100; FocusSpeedN[0].min = 1; FocusSpeedN[0].max = 254; FocusSpeedN[0].step = 10; return true; }
bool ScopeSim::initProperties() { /* Make sure to init parent properties first */ INDI::Telescope::initProperties(); /* Simulated periodic error in RA, DEC */ IUFillNumber(&EqPEN[RA_AXIS], "RA_PE", "RA (hh:mm:ss)", "%010.6m", 0, 24, 0, 15.); IUFillNumber(&EqPEN[DEC_AXIS], "DEC_PE", "DEC (dd:mm:ss)", "%010.6m", -90, 90, 0, 15.); IUFillNumberVector(&EqPENV, EqPEN, 2, getDeviceName(), "EQUATORIAL_PE", "Periodic Error", MOTION_TAB, IP_RO, 60, IPS_IDLE); /* Enable client to manually add periodic error northward or southward for simulation purposes */ IUFillSwitch(&PEErrNSS[DIRECTION_NORTH], "PE_N", "North", ISS_OFF); IUFillSwitch(&PEErrNSS[DIRECTION_SOUTH], "PE_S", "South", ISS_OFF); IUFillSwitchVector(&PEErrNSSP, PEErrNSS, 2, getDeviceName(), "PE_NS", "PE N/S", MOTION_TAB, IP_RW, ISR_ATMOST1, 60, IPS_IDLE); /* Enable client to manually add periodic error westward or easthward for simulation purposes */ IUFillSwitch(&PEErrWES[DIRECTION_WEST], "PE_W", "West", ISS_OFF); IUFillSwitch(&PEErrWES[DIRECTION_EAST], "PE_E", "East", ISS_OFF); IUFillSwitchVector(&PEErrWESP, PEErrWES, 2, getDeviceName(), "PE_WE", "PE W/E", MOTION_TAB, IP_RW, ISR_ATMOST1, 60, IPS_IDLE); /* How fast do we guide compared to sidereal rate */ IUFillNumber(&GuideRateN[RA_AXIS], "GUIDE_RATE_WE", "W/E Rate", "%g", 0, 1, 0.1, 0.3); IUFillNumber(&GuideRateN[DEC_AXIS], "GUIDE_RATE_NS", "N/S Rate", "%g", 0, 1, 0.1, 0.3); IUFillNumberVector(&GuideRateNP, GuideRateN, 2, getDeviceName(), "GUIDE_RATE", "Guiding Rate", MOTION_TAB, IP_RW, 0, IPS_IDLE); IUFillSwitch(&SlewRateS[SLEW_GUIDE], "SLEW_GUIDE", "Guide", ISS_OFF); IUFillSwitch(&SlewRateS[SLEW_CENTERING], "SLEW_CENTERING", "Centering", ISS_OFF); IUFillSwitch(&SlewRateS[SLEW_FIND], "SLEW_FIND", "Find", ISS_OFF); IUFillSwitch(&SlewRateS[SLEW_MAX], "SLEW_MAX", "Max", ISS_ON); IUFillSwitchVector(&SlewRateSP, SlewRateS, 4, getDeviceName(), "TELESCOPE_SLEW_RATE", "Slew Rate", MOTION_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); // Add Tracking Modes AddTrackMode("TRACK_SIDEREAL", "Sidereal", true); AddTrackMode("TRACK_CUSTOM", "Custom"); // Let's simulate it to be an F/7.5 120mm telescope ScopeParametersN[0].value = 120; ScopeParametersN[1].value = 900; ScopeParametersN[2].value = 120; ScopeParametersN[3].value = 900; TrackState = SCOPE_IDLE; SetParkDataType(PARK_RA_DEC); initGuiderProperties(getDeviceName(), MOTION_TAB); /* Add debug controls so we may debug driver if necessary */ addDebugControl(); setDriverInterface(getDriverInterface() | GUIDER_INTERFACE); double longitude=0, latitude=90; // Get value from config file if it exists. IUGetConfigNumber(getDeviceName(), "GEOGRAPHIC_COORD", "LONG", &longitude); currentRA = get_local_sidereal_time(longitude); IUGetConfigNumber(getDeviceName(), "GEOGRAPHIC_COORD", "LAT", &latitude); currentDEC = latitude > 0 ? 90 : -90; return true; }