diff --git a/flight/targets/boards/sparky2/firmware/pios_board.c b/flight/targets/boards/sparky2/firmware/pios_board.c index d5b0d99ef..ff63d3a83 100644 --- a/flight/targets/boards/sparky2/firmware/pios_board.c +++ b/flight/targets/boards/sparky2/firmware/pios_board.c @@ -206,6 +206,9 @@ uint32_t pios_rcvr_group_map[MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE]; #define PIOS_COM_HKOSD_RX_BUF_LEN 22 #define PIOS_COM_HKOSD_TX_BUF_LEN 22 +#define PIOS_COM_MSP_TX_BUF_LEN 128 +#define PIOS_COM_MSP_RX_BUF_LEN 64 + #if defined(PIOS_INCLUDE_DEBUG_CONSOLE) #define PIOS_COM_DEBUGCONSOLE_TX_BUF_LEN 40 uint32_t pios_com_debug_id; @@ -218,6 +221,7 @@ uint32_t pios_com_rf_id = 0; uint32_t pios_com_bridge_id = 0; uint32_t pios_com_overo_id = 0; uint32_t pios_com_hkosd_id = 0; +uint32_t pios_com_msp_id = 0; uint32_t pios_com_vcp_id = 0; @@ -436,12 +440,12 @@ void PIOS_Board_Init(void) uint8_t hwsettings_flexiport; HwSettingsRM_FlexiPortGet(&hwsettings_flexiport); switch (hwsettings_flexiport) { - case HWSETTINGS_RM_FLEXIPORT_DISABLED: + case HWSETTINGS_SPK2_FLEXIPORT_DISABLED: break; - case HWSETTINGS_RM_FLEXIPORT_TELEMETRY: + case HWSETTINGS_SPK2_FLEXIPORT_TELEMETRY: PIOS_Board_configure_com(&pios_usart_flexi_cfg, PIOS_COM_TELEM_RF_RX_BUF_LEN, PIOS_COM_TELEM_RF_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_telem_rf_id); break; - case HWSETTINGS_RM_FLEXIPORT_I2C: + case HWSETTINGS_SPK2_FLEXIPORT_I2C: #if defined(PIOS_INCLUDE_I2C) #if defined(PIOS_INCLUDE_HMC5X83) { @@ -480,28 +484,31 @@ void PIOS_Board_Init(void) #endif /* PIOS_INCLUDE_HMC5X83 */ #endif /* PIOS_INCLUDE_I2C */ break; - case HWSETTINGS_RM_FLEXIPORT_GPS: + case HWSETTINGS_SPK2_FLEXIPORT_GPS: PIOS_Board_configure_com(&pios_usart_flexi_cfg, PIOS_COM_GPS_RX_BUF_LEN, PIOS_COM_GPS_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_gps_id); break; - case HWSETTINGS_RM_FLEXIPORT_DSM: + case HWSETTINGS_SPK2_FLEXIPORT_DSM: // TODO: Define the various Channelgroup for Sparky2 dsm inputs and handle here PIOS_Board_configure_dsm(&pios_usart_dsm_flexi_cfg, &pios_dsm_flexi_cfg, &pios_usart_com_driver, MANUALCONTROLSETTINGS_CHANNELGROUPS_DSMFLEXIPORT, &hwsettings_DSMxBind); break; - case HWSETTINGS_RM_FLEXIPORT_DEBUGCONSOLE: + case HWSETTINGS_SPK2_FLEXIPORT_DEBUGCONSOLE: #if defined(PIOS_INCLUDE_DEBUG_CONSOLE) { PIOS_Board_configure_com(&pios_usart_flexi_cfg, 0, PIOS_COM_DEBUGCONSOLE_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_debug_id); } #endif /* PIOS_INCLUDE_DEBUG_CONSOLE */ break; - case HWSETTINGS_RM_FLEXIPORT_COMBRIDGE: + case HWSETTINGS_SPK2_FLEXIPORT_COMBRIDGE: PIOS_Board_configure_com(&pios_usart_flexi_cfg, PIOS_COM_BRIDGE_RX_BUF_LEN, PIOS_COM_BRIDGE_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_bridge_id); break; - case HWSETTINGS_RM_FLEXIPORT_OSDHK: + case HWSETTINGS_SPK2_FLEXIPORT_MSP: + PIOS_Board_configure_com(&pios_usart_flexi_cfg, PIOS_COM_MSP_RX_BUF_LEN, PIOS_COM_MSP_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_msp_id); + break; + case HWSETTINGS_SPK2_FLEXIPORT_OSDHK: PIOS_Board_configure_com(&pios_usart_hkosd_flexi_cfg, PIOS_COM_HKOSD_RX_BUF_LEN, PIOS_COM_HKOSD_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_hkosd_id); break; - case HWSETTINGS_RM_FLEXIPORT_SRXL: + case HWSETTINGS_SPK2_FLEXIPORT_SRXL: #if defined(PIOS_INCLUDE_SRXL) { uint32_t pios_usart_srxl_id; @@ -523,8 +530,8 @@ void PIOS_Board_Init(void) #endif /* PIOS_INCLUDE_SRXL */ break; - case HWSETTINGS_RM_FLEXIPORT_HOTTSUMD: - case HWSETTINGS_RM_FLEXIPORT_HOTTSUMH: + case HWSETTINGS_SPK2_FLEXIPORT_HOTTSUMD: + case HWSETTINGS_SPK2_FLEXIPORT_HOTTSUMH: #if defined(PIOS_INCLUDE_HOTT) { uint32_t pios_usart_hott_id; @@ -534,7 +541,7 @@ void PIOS_Board_Init(void) uint32_t pios_hott_id; if (PIOS_HOTT_Init(&pios_hott_id, &pios_usart_com_driver, pios_usart_hott_id, - hwsettings_flexiport == HWSETTINGS_RM_FLEXIPORT_HOTTSUMD ? PIOS_HOTT_PROTO_SUMD : PIOS_HOTT_PROTO_SUMH)) { + hwsettings_flexiport == HWSETTINGS_SPK2_FLEXIPORT_HOTTSUMD ? PIOS_HOTT_PROTO_SUMD : PIOS_HOTT_PROTO_SUMH)) { PIOS_Assert(0); } @@ -547,7 +554,7 @@ void PIOS_Board_Init(void) #endif /* PIOS_INCLUDE_HOTT */ break; - case HWSETTINGS_RM_FLEXIPORT_EXBUS: + case HWSETTINGS_SPK2_FLEXIPORT_EXBUS: #if defined(PIOS_INCLUDE_EXBUS) { uint32_t pios_usart_exbus_id; @@ -741,6 +748,9 @@ void PIOS_Board_Init(void) case HWSETTINGS_SPK2_MAINPORT_COMBRIDGE: PIOS_Board_configure_com(&pios_usart_main_cfg, PIOS_COM_BRIDGE_RX_BUF_LEN, PIOS_COM_BRIDGE_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_bridge_id); break; + case HWSETTINGS_RM_MAINPORT_MSP: + PIOS_Board_configure_com(&pios_usart_main_cfg, PIOS_COM_MSP_RX_BUF_LEN, PIOS_COM_MSP_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_msp_id); + break; case HWSETTINGS_SPK2_MAINPORT_OSDHK: PIOS_Board_configure_com(&pios_usart_hkosd_main_cfg, PIOS_COM_HKOSD_RX_BUF_LEN, PIOS_COM_HKOSD_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_hkosd_id); break; diff --git a/ground/gcs/src/plugins/setupwizard/pages/gpspage.cpp b/ground/gcs/src/plugins/setupwizard/pages/gpspage.cpp index 094322c5a..e9f34e116 100644 --- a/ground/gcs/src/plugins/setupwizard/pages/gpspage.cpp +++ b/ground/gcs/src/plugins/setupwizard/pages/gpspage.cpp @@ -39,7 +39,9 @@ void GpsPage::initializePage(VehicleConfigurationSource *settings) { // Enable all setItemDisabled(-1, false); - if (settings->getInputType() == VehicleConfigurationSource::INPUT_SBUS || + // sbus is on rcvrport for sparky2, that leaves mainport/flexiport available for gps/auxmag + // it is not even possible to put sbus on mainport on sparky2 because hardware inverter is on rcvrport + if ((settings->getInputType() == VehicleConfigurationSource::INPUT_SBUS && settings->getControllerType() != VehicleConfigurationSource::CONTROLLER_SPARKY2) || settings->getInputType() == VehicleConfigurationSource::INPUT_DSM || settings->getInputType() == VehicleConfigurationSource::INPUT_HOTT_SUMD || settings->getInputType() == VehicleConfigurationSource::INPUT_EXBUS || diff --git a/ground/gcs/src/plugins/setupwizard/pages/inputpage.cpp b/ground/gcs/src/plugins/setupwizard/pages/inputpage.cpp index 8bcfe1513..284d3a091 100644 --- a/ground/gcs/src/plugins/setupwizard/pages/inputpage.cpp +++ b/ground/gcs/src/plugins/setupwizard/pages/inputpage.cpp @@ -112,7 +112,6 @@ bool InputPage::restartNeeded(VehicleConfigurationSource::INPUT_TYPE selectedTyp case SetupWizard::CONTROLLER_REVO: case SetupWizard::CONTROLLER_DISCOVERYF4: case SetupWizard::CONTROLLER_NANO: - case SetupWizard::CONTROLLER_SPARKY2: { switch (selectedType) { case VehicleConfigurationSource::INPUT_PWM: @@ -141,6 +140,32 @@ bool InputPage::restartNeeded(VehicleConfigurationSource::INPUT_TYPE selectedTyp } break; } + case SetupWizard::CONTROLLER_SPARKY2: + { + switch (selectedType) { + case VehicleConfigurationSource::INPUT_PPM: + return data.SPK2_RcvrPort != HwSettings::SPK2_RCVRPORT_PPM; + + case VehicleConfigurationSource::INPUT_SBUS: + return data.SPK2_RcvrPort != HwSettings::SPK2_RCVRPORT_SBUS; + + case VehicleConfigurationSource::INPUT_HOTT_SUMD: + return data.SPK2_FlexiPort != HwSettings::SPK2_FLEXIPORT_HOTTSUMD; + + case VehicleConfigurationSource::INPUT_EXBUS: + return data.SPK2_FlexiPort != HwSettings::SPK2_FLEXIPORT_EXBUS; + + case VehicleConfigurationSource::INPUT_SRXL: + return data.SPK2_FlexiPort != HwSettings::SPK2_FLEXIPORT_SRXL; + + case VehicleConfigurationSource::INPUT_DSM: + // TODO: Handle all of the DSM types ?? Which is most common? + return data.SPK2_MainPort != HwSettings::SPK2_MAINPORT_DSM; + + default: return true; + } + break; + } default: return true; } } diff --git a/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp b/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp index f95665f75..93847c930 100644 --- a/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp +++ b/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp @@ -164,7 +164,7 @@ void VehicleConfigurationHelper::applyHardwareConfiguration() } break; case VehicleConfigurationSource::INPUT_SBUS: - // We have to set teletry on flexiport since s.bus needs the mainport. + // We have to set telemetry on flexiport since s.bus needs the mainport. data.CC_MainPort = HwSettings::CC_MAINPORT_SBUS; data.CC_FlexiPort = HwSettings::CC_FLEXIPORT_TELEMETRY; break; @@ -191,11 +191,14 @@ void VehicleConfigurationHelper::applyHardwareConfiguration() // Reset all ports to their defaults data.RM_RcvrPort = HwSettings::RM_RCVRPORT_DISABLED; data.RM_FlexiPort = HwSettings::RM_FLEXIPORT_DISABLED; + data.SPK2_RcvrPort = HwSettings::SPK2_RCVRPORT_DISABLED; + data.SPK2_FlexiPort = HwSettings::SPK2_FLEXIPORT_DISABLED; // Revo/Sparky2 uses inbuilt Modem do not set mainport to be active telemetry link for Revo/Sparky2 if (m_configSource->getControllerType() == VehicleConfigurationSource::CONTROLLER_REVO || m_configSource->getControllerType() == VehicleConfigurationSource::CONTROLLER_SPARKY2) { data.RM_MainPort = HwSettings::RM_MAINPORT_DISABLED; + data.RM_MainPort = HwSettings::SPK2_MAINPORT_DISABLED; } else { data.RM_MainPort = HwSettings::RM_MAINPORT_TELEMETRY; } @@ -203,9 +206,12 @@ void VehicleConfigurationHelper::applyHardwareConfiguration() switch (m_configSource->getInputType()) { case VehicleConfigurationSource::INPUT_PWM: data.RM_RcvrPort = HwSettings::RM_RCVRPORT_PWM; + // this should not happen, sparky2 does not allow pwm + data.SPK2_RcvrPort = HwSettings::SPK2_RCVRPORT_DISABLED; break; case VehicleConfigurationSource::INPUT_PPM: data.RM_RcvrPort = HwSettings::RM_RCVRPORT_PPM; + data.SPK2_RcvrPort = HwSettings::SPK2_RCVRPORT_PPM; break; case VehicleConfigurationSource::INPUT_SBUS: if (m_configSource->getControllerType() == VehicleConfigurationSource::CONTROLLER_SPARKY2) { @@ -220,15 +226,19 @@ void VehicleConfigurationHelper::applyHardwareConfiguration() break; case VehicleConfigurationSource::INPUT_DSM: data.RM_FlexiPort = HwSettings::RM_FLEXIPORT_DSM; + data.SPK2_FlexiPort = HwSettings::SPK2_FLEXIPORT_DSM; break; case VehicleConfigurationSource::INPUT_SRXL: data.RM_FlexiPort = HwSettings::RM_FLEXIPORT_SRXL; + data.SPK2_FlexiPort = HwSettings::SPK2_FLEXIPORT_SRXL; break; case VehicleConfigurationSource::INPUT_HOTT_SUMD: data.RM_FlexiPort = HwSettings::RM_FLEXIPORT_HOTTSUMD; + data.SPK2_FlexiPort = HwSettings::SPK2_FLEXIPORT_HOTTSUMD; break; case VehicleConfigurationSource::INPUT_EXBUS: data.RM_FlexiPort = HwSettings::RM_FLEXIPORT_EXBUS; + data.SPK2_FlexiPort = HwSettings::SPK2_FLEXIPORT_EXBUS; break; default: break; @@ -245,6 +255,7 @@ void VehicleConfigurationHelper::applyHardwareConfiguration() data.RM_FlexiPort = HwSettings::RM_FLEXIPORT_GPS; } else { data.RM_MainPort = HwSettings::RM_MAINPORT_GPS; + data.SPK2_MainPort = HwSettings::SPK2_MAINPORT_GPS; } GPSSettings *gpsSettings = GPSSettings::GetInstance(m_uavoManager); @@ -291,6 +302,7 @@ void VehicleConfigurationHelper::applyHardwareConfiguration() gpsData.DataProtocol = GPSSettings::DATAPROTOCOL_UBX; gpsData.UbxAutoConfig = GPSSettings::UBXAUTOCONFIG_AUTOBAUDANDCONFIGURE; data.RM_FlexiPort = HwSettings::RM_FLEXIPORT_I2C; + data.SPK2_FlexiPort = HwSettings::SPK2_FLEXIPORT_I2C; AuxMagSettings *magSettings = AuxMagSettings::GetInstance(m_uavoManager); Q_ASSERT(magSettings); AuxMagSettings::DataFields magsData = magSettings->getData(); @@ -325,11 +337,15 @@ void VehicleConfigurationHelper::applyHardwareConfiguration() case VehicleConfigurationSource::AIRSPEED_EAGLETREE: data.OptionalModules[HwSettings::OPTIONALMODULES_AIRSPEED] = 1; data.RM_FlexiPort = HwSettings::RM_FLEXIPORT_I2C; + // sparky2: put I2C airspeed on flexiport, but it could be put on i2cport + data.SPK2_FlexiPort = HwSettings::SPK2_FLEXIPORT_I2C; airspeedData.AirspeedSensorType = AirspeedSettings::AIRSPEEDSENSORTYPE_EAGLETREEAIRSPEEDV3; break; case VehicleConfigurationSource::AIRSPEED_MS4525: data.OptionalModules[HwSettings::OPTIONALMODULES_AIRSPEED] = 1; data.RM_FlexiPort = HwSettings::RM_FLEXIPORT_I2C; + // sparky2: put I2C airspeed on flexiport, but it could be put on i2cport + data.SPK2_FlexiPort = HwSettings::SPK2_FLEXIPORT_I2C; airspeedData.AirspeedSensorType = AirspeedSettings::AIRSPEEDSENSORTYPE_PIXHAWKAIRSPEEDMS4525DO; break; default: diff --git a/ground/gcs/src/plugins/usagetracker/usagetrackerplugin.cpp b/ground/gcs/src/plugins/usagetracker/usagetrackerplugin.cpp index b157566d6..78f1ce979 100644 --- a/ground/gcs/src/plugins/usagetracker/usagetrackerplugin.cpp +++ b/ground/gcs/src/plugins/usagetracker/usagetrackerplugin.cpp @@ -194,6 +194,12 @@ void UsageTrackerPlugin::collectUsageParameters(QMap ¶mete parameters["conf_mport"] = getUAVFieldValue(objManager, "HwSettings", "RM_MainPort"); parameters["conf_fport"] = getUAVFieldValue(objManager, "HwSettings", "RM_FlexiPort"); parameters["conf_fusion"] = getUAVFieldValue(objManager, "RevoSettings", "FusionAlgorithm"); + } else if ((boardModel & 0xff00) == 0x0b00) { + // Sparky2 + parameters["conf_rport"] = getUAVFieldValue(objManager, "HwSettings", "SPK2_RcvrPort"); + parameters["conf_mport"] = getUAVFieldValue(objManager, "HwSettings", "SPK2_MainPort"); + parameters["conf_fport"] = getUAVFieldValue(objManager, "HwSettings", "SPK2_FlexiPort"); + parameters["conf_fusion"] = getUAVFieldValue(objManager, "RevoSettings", "FusionAlgorithm"); } parameters["conf_uport"] = getUAVFieldValue(objManager, "HwSettings", "USB_HIDPort"); diff --git a/shared/uavobjectdefinition/hwsettings.xml b/shared/uavobjectdefinition/hwsettings.xml index 061be8c78..f2cc5eb22 100644 --- a/shared/uavobjectdefinition/hwsettings.xml +++ b/shared/uavobjectdefinition/hwsettings.xml @@ -17,11 +17,10 @@ - - + + +