void ControllerPage::initializePage() { if (anyControllerConnected()) { SetupWizard::CONTROLLER_TYPE type = getControllerType(); setControllerType(type); } else { setControllerType(SetupWizard::CONTROLLER_UNKNOWN); } emit completeChanged(); }
bool Controller::ISNewText (const char * dev, const char * name, char * texts[], char * names[], int n) { if(strcmp(dev,device->getDeviceName())==0) { if (!strcmp(name, "JOYSTICKSETTINGS") && n <= JoystickSettingTP.ntp) { for (int i=0; i < JoystickSettingTP.ntp; i++) { IText * tp = IUFindText(&JoystickSettingTP, names[i]); if (tp) { ControllerType cType = getControllerType(texts[i]); ControllerType myType = *((ControllerType *) JoystickSettingT[i].aux0); if (cType != myType) { JoystickSettingTP.s = IPS_ALERT; IDSetText(&JoystickSettingTP, NULL); DEBUGFDEVICE(dev, INDI::Logger::DBG_ERROR, "Cannot change controller type to %s.", texts[i]); return false; } } } IUUpdateText(&JoystickSettingTP, texts, names, n); for (int i=0; i < n; i++) { if (strstr(JoystickSettingT[i].text, "JOYSTICK_")) IDSnoopDevice("Joystick", JoystickSettingT[i].text); } JoystickSettingTP.s = IPS_OK; IDSetText(&JoystickSettingTP, NULL); return true; } } return false; }
int SetupWizard::nextId() const { switch (currentId()) { case PAGE_START: if(canAutoUpdate()) { return PAGE_UPDATE; } else { return PAGE_CONTROLLER; } case PAGE_UPDATE: return PAGE_CONTROLLER; case PAGE_CONTROLLER: { switch(getControllerType()) { case CONTROLLER_CC: case CONTROLLER_CC3D: return PAGE_INPUT; case CONTROLLER_REVO: case CONTROLLER_PIPX: default: return PAGE_NOTYETIMPLEMENTED; } } case PAGE_VEHICLES: { switch(getVehicleType()) { case VEHICLE_MULTI: return PAGE_MULTI; case VEHICLE_FIXEDWING: return PAGE_FIXEDWING; case VEHICLE_HELI: return PAGE_HELI; case VEHICLE_SURFACE: return PAGE_SURFACE; default: return PAGE_NOTYETIMPLEMENTED; } } case PAGE_MULTI: return PAGE_OUTPUT; case PAGE_INPUT: if(isRestartNeeded()) { saveHardwareSettings(); return PAGE_REBOOT; } else { return PAGE_VEHICLES; } case PAGE_REBOOT: return PAGE_VEHICLES; case PAGE_OUTPUT: return PAGE_SUMMARY; case PAGE_LEVELLING: return PAGE_CALIBRATION; case PAGE_CALIBRATION: return PAGE_SAVE; case PAGE_SUMMARY: return PAGE_LEVELLING; case PAGE_SAVE: return PAGE_END; case PAGE_NOTYETIMPLEMENTED: return PAGE_END; default: return -1; } }
QString SetupWizard::getSummaryText() { QString summary = ""; summary.append("<b>").append(tr("Controller type: ")).append("</b>"); switch(getControllerType()) { case CONTROLLER_CC: summary.append(tr("OpenPilot CopterControl")); break; case CONTROLLER_CC3D: summary.append(tr("OpenPilot CopterControl 3D")); break; case CONTROLLER_REVO: summary.append(tr("OpenPilot Revolution")); break; case CONTROLLER_PIPX: summary.append(tr("OpenPilot PipX Radio Modem")); break; default: summary.append(tr("Unknown")); break; } summary.append("<br>"); summary.append("<b>").append(tr("Vehicle type: ")).append("</b>"); switch (getVehicleType()) { case VEHICLE_MULTI: summary.append(tr("Multirotor")); summary.append("<br>"); summary.append("<b>").append(tr("Vehicle sub type: ")).append("</b>"); switch (getVehicleSubType()) { case SetupWizard::MULTI_ROTOR_TRI_Y: summary.append(tr("Tricopter")); break; case SetupWizard::MULTI_ROTOR_QUAD_X: summary.append(tr("Quadcopter X")); break; case SetupWizard::MULTI_ROTOR_QUAD_PLUS: summary.append(tr("Quadcopter +")); break; case SetupWizard::MULTI_ROTOR_HEXA: summary.append(tr("Hexacopter")); break; case SetupWizard::MULTI_ROTOR_HEXA_COAX_Y: summary.append(tr("Hexacopter Coax (Y6)")); break; case SetupWizard::MULTI_ROTOR_HEXA_H: summary.append(tr("Hexacopter X")); break; case SetupWizard::MULTI_ROTOR_OCTO: summary.append(tr("Octocopter")); break; case SetupWizard::MULTI_ROTOR_OCTO_COAX_X: summary.append(tr("Octocopter Coax X")); break; case SetupWizard::MULTI_ROTOR_OCTO_COAX_PLUS: summary.append(tr("Octocopter Coax +")); break; case SetupWizard::MULTI_ROTOR_OCTO_V: summary.append(tr("Octocopter V")); break; default: summary.append(tr("Unknown")); break; } break; case VEHICLE_FIXEDWING: summary.append(tr("Fixed wing")); break; case VEHICLE_HELI: summary.append(tr("Helicopter")); break; case VEHICLE_SURFACE: summary.append(tr("Surface vehicle")); break; default: summary.append(tr("Unknown")); } summary.append("<br>"); summary.append("<b>").append(tr("Input type: ")).append("</b>"); switch (getInputType()) { case INPUT_PWM: summary.append(tr("PWM (One cable per channel)")); break; case INPUT_PPM: summary.append(tr("PPM (One cable for all channels)")); break; case INPUT_SBUS: summary.append(tr("Futaba S.Bus")); break; case INPUT_DSM2: summary.append(tr("Spektrum satellite (DSM2)")); break; case INPUT_DSMX10: summary.append(tr("Spektrum satellite (DSMX10BIT)")); break; case INPUT_DSMX11: summary.append(tr("Spektrum satellite (DSMX11BIT)")); break; default: summary.append(tr("Unknown")); } summary.append("<br>"); summary.append("<b>").append(tr("ESC type: ")).append("</b>"); switch (getESCType()) { case ESC_LEGACY: summary.append(tr("Legacy ESC (50 Hz)")); break; case ESC_RAPID: summary.append(tr("Rapid ESC (400 Hz)")); break; default: summary.append(tr("Unknown")); } /* summary.append("<br>"); summary.append("<b>").append(tr("Reboot required: ")).append("</b>"); summary.append(isRestartNeeded() ? tr("<font color='red'>Yes</font>") : tr("<font color='green'>No</font>")); */ return summary; }
int SetupWizard::nextId() const { switch (currentId()) { case PAGE_START: if (canAutoUpdate()) { return PAGE_UPDATE; } else { return PAGE_CONTROLLER; } case PAGE_UPDATE: return PAGE_CONTROLLER; case PAGE_CONTROLLER: { switch (getControllerType()) { case CONTROLLER_CC: case CONTROLLER_CC3D: case CONTROLLER_REVO: case CONTROLLER_DISCOVERYF4: return PAGE_INPUT; case CONTROLLER_NANO: if (isRestartNeeded()) { reboot(); } return PAGE_INPUT; case CONTROLLER_OPLINK: default: return PAGE_NOTYETIMPLEMENTED; } } case PAGE_VEHICLES: { switch (getVehicleType()) { case VEHICLE_MULTI: return PAGE_MULTI; case VEHICLE_FIXEDWING: return PAGE_FIXEDWING; case VEHICLE_HELI: return PAGE_HELI; case VEHICLE_SURFACE: return PAGE_SURFACE; default: return PAGE_NOTYETIMPLEMENTED; } } case PAGE_MULTI: return PAGE_ESC; case PAGE_FIXEDWING: case PAGE_SURFACE: if (getVehicleSubType() == GROUNDVEHICLE_DIFFERENTIAL) { return PAGE_ESC; } else { return PAGE_SERVO; } case PAGE_INPUT: if (isRestartNeeded()) { saveHardwareSettings(); reboot(); } return PAGE_VEHICLES; case PAGE_ESC: if (getVehicleSubType() == MULTI_ROTOR_TRI_Y) { return PAGE_SERVO; } else { switch (getControllerType()) { case CONTROLLER_REVO: case CONTROLLER_NANO: return PAGE_GPS; default: return PAGE_SUMMARY; } } case PAGE_SERVO: { switch (getControllerType()) { case CONTROLLER_REVO: case CONTROLLER_NANO: return PAGE_GPS; default: return PAGE_SUMMARY; } } case PAGE_BIAS_CALIBRATION: if (getVehicleType() == VEHICLE_MULTI) { return PAGE_ESC_CALIBRATION; } else { return PAGE_OUTPUT_CALIBRATION; } case PAGE_ESC_CALIBRATION: return PAGE_OUTPUT_CALIBRATION; case PAGE_OUTPUT_CALIBRATION: return PAGE_AIRFRAME_INITIAL_TUNING; case PAGE_AIRFRAME_INITIAL_TUNING: return PAGE_SAVE; case PAGE_GPS: switch (getVehicleType()) { case VEHICLE_FIXEDWING: if (getGpsType() != GPS_DISABLED) { return PAGE_AIRSPEED; } else { return PAGE_SUMMARY; } default: return PAGE_SUMMARY; } case PAGE_AIRSPEED: return PAGE_SUMMARY; case PAGE_SUMMARY: { switch (getControllerType()) { case CONTROLLER_CC: case CONTROLLER_CC3D: case CONTROLLER_REVO: case CONTROLLER_NANO: case CONTROLLER_DISCOVERYF4: switch (getVehicleType()) { case VEHICLE_FIXEDWING: return PAGE_OUTPUT_CALIBRATION; default: return PAGE_BIAS_CALIBRATION; } default: return PAGE_NOTYETIMPLEMENTED; } } case PAGE_SAVE: return PAGE_END; case PAGE_NOTYETIMPLEMENTED: return PAGE_END; default: return -1; } }
QString SetupWizard::getSummaryText() { QString summary = ""; summary.append("<b>").append(tr("Controller type: ")).append("</b>"); switch (getControllerType()) { case CONTROLLER_CC: summary.append(tr("OpenPilot CopterControl")); break; case CONTROLLER_CC3D: summary.append(tr("OpenPilot CopterControl 3D")); break; case CONTROLLER_REVO: summary.append(tr("OpenPilot Revolution")); break; case CONTROLLER_NANO: summary.append(tr("OpenPilot Nano")); break; case CONTROLLER_OPLINK: summary.append(tr("OpenPilot OPLink Radio Modem")); break; case CONTROLLER_DISCOVERYF4: summary.append(tr("OpenPilot DiscoveryF4 Development Board")); break; default: summary.append(tr("Unknown")); break; } summary.append("<br>"); summary.append("<b>").append(tr("Vehicle type: ")).append("</b>"); switch (getVehicleType()) { case VEHICLE_MULTI: summary.append(tr("Multirotor")); summary.append("<br>"); summary.append("<b>").append(tr("Vehicle sub type: ")).append("</b>"); switch (getVehicleSubType()) { case SetupWizard::MULTI_ROTOR_TRI_Y: summary.append(tr("Tricopter")); break; case SetupWizard::MULTI_ROTOR_QUAD_X: summary.append(tr("Quadcopter X")); break; case SetupWizard::MULTI_ROTOR_QUAD_PLUS: summary.append(tr("Quadcopter +")); break; case SetupWizard::MULTI_ROTOR_HEXA: summary.append(tr("Hexacopter")); break; case SetupWizard::MULTI_ROTOR_HEXA_COAX_Y: summary.append(tr("Hexacopter Coax (Y6)")); break; case SetupWizard::MULTI_ROTOR_HEXA_H: summary.append(tr("Hexacopter H")); break; case SetupWizard::MULTI_ROTOR_HEXA_X: summary.append(tr("Hexacopter X")); break; case SetupWizard::MULTI_ROTOR_OCTO: summary.append(tr("Octocopter")); break; case SetupWizard::MULTI_ROTOR_OCTO_COAX_X: summary.append(tr("Octocopter Coax X")); break; case SetupWizard::MULTI_ROTOR_OCTO_COAX_PLUS: summary.append(tr("Octocopter Coax +")); break; case SetupWizard::MULTI_ROTOR_OCTO_V: summary.append(tr("Octocopter V")); break; default: summary.append(tr("Unknown")); break; } break; case VEHICLE_FIXEDWING: summary.append(tr("Fixed wing")); summary.append("<br>"); summary.append("<b>").append(tr("Vehicle sub type: ")).append("</b>"); switch (getVehicleSubType()) { case SetupWizard::FIXED_WING_DUAL_AILERON: summary.append(tr("Dual Aileron")); break; case SetupWizard::FIXED_WING_AILERON: summary.append(tr("Aileron")); break; case SetupWizard::FIXED_WING_ELEVON: summary.append(tr("Elevon")); break; default: summary.append(tr("Unknown")); break; } break; case VEHICLE_HELI: summary.append(tr("Helicopter")); break; case VEHICLE_SURFACE: summary.append(tr("Surface vehicle")); summary.append("<br>"); summary.append("<b>").append(tr("Vehicle sub type: ")).append("</b>"); switch (getVehicleSubType()) { case SetupWizard::GROUNDVEHICLE_CAR: summary.append(tr("Car")); break; case SetupWizard::GROUNDVEHICLE_DIFFERENTIAL: summary.append(tr("Tank")); break; case SetupWizard::GROUNDVEHICLE_MOTORCYCLE: summary.append(tr("Motorcycle")); break; default: summary.append(tr("Unknown")); break; } break; default: summary.append(tr("Unknown")); } summary.append("<br>"); summary.append("<b>").append(tr("Input type: ")).append("</b>"); switch (getInputType()) { case INPUT_PWM: summary.append(tr("PWM (One cable per channel)")); break; case INPUT_PPM: summary.append(tr("PPM (One cable for all channels)")); break; case INPUT_SBUS: summary.append(tr("Futaba S.Bus")); break; case INPUT_DSM: summary.append(tr("Spektrum Satellite")); break; default: summary.append(tr("Unknown")); } summary.append("<br>"); summary.append("<b>").append(tr("Speed Controller (ESC) type: ")).append("</b>"); switch (getEscType()) { case ESC_STANDARD: summary.append(tr("Standard ESC (%1 Hz)").arg(VehicleConfigurationHelper::LEGACY_ESC_FREQUENCY)); break; case ESC_RAPID: summary.append(tr("Rapid ESC (%1 Hz)").arg(VehicleConfigurationHelper::RAPID_ESC_FREQUENCY)); break; case ESC_SYNCHED: summary.append(tr("Synched ESC")); break; case ESC_ONESHOT: summary.append(tr("Oneshot ESC")); break; default: summary.append(tr("Unknown")); } // If Tricopter show tail servo speed if (getVehicleSubType() == MULTI_ROTOR_TRI_Y || getVehicleType() == VEHICLE_FIXEDWING || getVehicleSubType() == GROUNDVEHICLE_MOTORCYCLE || getVehicleSubType() == GROUNDVEHICLE_CAR) { summary.append("<br>"); summary.append("<b>").append(tr("Servo type: ")).append("</b>"); switch (getServoType()) { case SERVO_ANALOG: summary.append(tr("Analog Servos (50 Hz)")); break; case SERVO_DIGITAL: summary.append(tr("Digital Servos (333 Hz)")); break; default: summary.append(tr("Unknown")); } } // Show GPS Type if (getControllerType() == CONTROLLER_REVO || getControllerType() == CONTROLLER_NANO) { summary.append("<br>"); summary.append("<b>").append(tr("GPS type: ")).append("</b>"); switch (getGpsType()) { case GPS_PLATINUM: summary.append(tr("OpenPilot Platinum")); break; case GPS_UBX: summary.append(tr("OpenPilot v8 or Generic UBLOX GPS")); break; case GPS_NMEA: summary.append(tr("Generic NMEA GPS")); break; default: summary.append(tr("None")); } } // Show Airspeed sensor type if ((getControllerType() == CONTROLLER_REVO || getControllerType() == CONTROLLER_NANO) && getVehicleType() == VEHICLE_FIXEDWING) { summary.append("<br>"); summary.append("<b>").append(tr("Airspeed Sensor: ")).append("</b>"); switch (getAirspeedType()) { case AIRSPEED_ESTIMATE: summary.append(tr("Software Estimated")); break; case AIRSPEED_EAGLETREE: summary.append(tr("EagleTree on Flexi-Port")); break; case AIRSPEED_MS4525: summary.append(tr("MS4525 based on Flexi-Port")); break; default: summary.append(tr("Unknown")); } } return summary; }