mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
Merged in f5soh/librepilot/LP-520_OPlink_RSSI_PPMoutput (pull request #428)
LP-520 OPlink RSSI PPMoutput Approved-by: Lalanne Laurent <f5soh@free.fr> Approved-by: Alessio Morale <alessiomorale@gmail.com> Approved-by: Vladimir Zidar <mr_w@mindnever.org> Approved-by: Brian Webb <webbbn@gmail.com> Approved-by: Philippe Renon <philippe_renon@yahoo.fr>
This commit is contained in:
commit
726c882aab
@ -35,7 +35,7 @@
|
||||
#include "pios_ppm_out_priv.h"
|
||||
|
||||
#define PIOS_PPM_OUT_MAX_DEVS 1
|
||||
#define PIOS_PPM_OUT_MAX_CHANNELS 8
|
||||
#define PIOS_PPM_OUT_MAX_CHANNELS 8 + 1 // 8 RC channels + Rssi
|
||||
#define PIOS_PPM_OUT_FRAME_PERIOD_US 22500 // microseconds
|
||||
#define PIOS_PPM_OUT_HIGH_PULSE_US 400 // microseconds
|
||||
#define PIOS_PPM_OUT_MIN_CHANNEL_PULSE_US 1000 // microseconds
|
||||
|
@ -57,6 +57,7 @@ uint32_t pios_com_gcs_id = 0;
|
||||
uint32_t pios_com_gcs_out_id = 0;
|
||||
#if defined(PIOS_INCLUDE_PPM_OUT)
|
||||
uint32_t pios_ppm_out_id = 0;
|
||||
bool ppm_rssi = false;
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_RFM22B)
|
||||
#include <pios_rfm22b_com.h>
|
||||
@ -142,6 +143,7 @@ void PIOS_Board_Init(void)
|
||||
bool ppm_only = (oplinkSettings.LinkType == OPLINKSETTINGS_LINKTYPE_CONTROL);
|
||||
bool ppm_mode = ((oplinkSettings.LinkType == OPLINKSETTINGS_LINKTYPE_CONTROL) ||
|
||||
(oplinkSettings.LinkType == OPLINKSETTINGS_LINKTYPE_DATAANDCONTROL));
|
||||
ppm_rssi = (oplinkSettings.PPMOutRSSI == OPLINKSETTINGS_PPMOUTRSSI_TRUE);
|
||||
bool servo_main = false;
|
||||
bool servo_flexi = false;
|
||||
|
||||
@ -251,7 +253,6 @@ void PIOS_Board_Init(void)
|
||||
if (is_coordinator) {
|
||||
PIOS_BOARD_IO_Configure_PPM_RCVR(&pios_ppm_main_cfg);
|
||||
}
|
||||
// For some reason, PPM output on the main port doesn't work.
|
||||
#if defined(PIOS_INCLUDE_PPM_OUT)
|
||||
else {
|
||||
PIOS_PPM_Out_Init(&pios_ppm_out_id, &pios_main_ppm_out_cfg);
|
||||
@ -305,7 +306,6 @@ void PIOS_Board_Init(void)
|
||||
if (is_coordinator) {
|
||||
PIOS_BOARD_IO_Configure_PPM_RCVR(&pios_ppm_flexi_cfg);
|
||||
}
|
||||
// For some reason, PPM output on the flexi port doesn't work.
|
||||
#if defined(PIOS_INCLUDE_PPM_OUT)
|
||||
else {
|
||||
PIOS_PPM_Out_Init(&pios_ppm_out_id, &pios_flexi_ppm_out_cfg);
|
||||
@ -437,14 +437,23 @@ static void PIOS_Board_PPM_callback(__attribute__((unused)) uint32_t context, co
|
||||
#if defined(PIOS_INCLUDE_PPM) && defined(PIOS_INCLUDE_PPM_OUT)
|
||||
if (pios_ppm_out_id) {
|
||||
for (uint8_t i = 0; i < RFM22B_PPM_NUM_CHANNELS; ++i) {
|
||||
if (channels[i] != PIOS_RCVR_INVALID) {
|
||||
if ((channels[i] != PIOS_RCVR_INVALID) && (channels[i] != PIOS_RCVR_TIMEOUT)) {
|
||||
PIOS_PPM_OUT_Set(PIOS_PPM_OUTPUT, i, channels[i]);
|
||||
}
|
||||
}
|
||||
// Rssi channel output is added after RC channels
|
||||
// Output Rssi from 1000µs to 2000µs (-127dBm to -16dBm range)
|
||||
if (ppm_rssi) {
|
||||
int8_t rssi;
|
||||
int16_t ppm_value;
|
||||
OPLinkStatusRSSIGet(&rssi);
|
||||
ppm_value = 1000 + ((rssi + 127) * 9);
|
||||
PIOS_PPM_OUT_Set(PIOS_PPM_OUTPUT, RFM22B_PPM_NUM_CHANNELS, ppm_value);
|
||||
}
|
||||
}
|
||||
#if defined(PIOS_INCLUDE_SERVO)
|
||||
for (uint8_t i = 0; i < servo_count; ++i) {
|
||||
uint16_t val = (channels[i] == PIOS_RCVR_INVALID) ? 0 : channels[i];
|
||||
uint16_t val = ((channels[i] == PIOS_RCVR_INVALID) || (channels[i] == PIOS_RCVR_TIMEOUT)) ? 0 : channels[i];
|
||||
PIOS_Servo_Set(i, val);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_SERVO */
|
||||
|
@ -82,6 +82,7 @@ ConfigOPLinkWidget::ConfigOPLinkWidget(QWidget *parent) : ConfigTaskWidget(paren
|
||||
addWidgetBinding("OPLinkSettings", "MaxRFPower", m_oplink->MaxRFTxPower);
|
||||
addWidgetBinding("OPLinkSettings", "MainPort", m_oplink->MainPort);
|
||||
addWidgetBinding("OPLinkSettings", "FlexiPort", m_oplink->FlexiPort);
|
||||
addWidgetBinding("OPLinkSettings", "PPMOutRSSI", m_oplink->PPMoutRssi);
|
||||
addWidgetBinding("OPLinkSettings", "RadioPriStream", m_oplink->RadioPriStream);
|
||||
addWidgetBinding("OPLinkSettings", "RadioAuxStream", m_oplink->RadioAuxStream);
|
||||
addWidgetBinding("OPLinkSettings", "VCPBridge", m_oplink->VCPBridge);
|
||||
@ -263,6 +264,7 @@ void ConfigOPLinkWidget::updateSettings()
|
||||
bool is_receiver = isComboboxOptionSelected(m_oplink->Protocol, OPLinkSettings::PROTOCOL_OPLINKRECEIVER);
|
||||
bool is_oplink = (is_receiver || is_coordinator);
|
||||
bool is_ppm_only = isComboboxOptionSelected(m_oplink->LinkType, OPLinkSettings::LINKTYPE_CONTROL);
|
||||
bool is_ppm = isComboboxOptionSelected(m_oplink->LinkType, OPLinkSettings::LINKTYPE_DATAANDCONTROL);
|
||||
bool is_main_serial = isComboboxOptionSelected(m_oplink->MainPort, OPLinkSettings::MAINPORT_SERIAL);
|
||||
bool is_main_telem = isComboboxOptionSelected(m_oplink->MainPort, OPLinkSettings::MAINPORT_TELEMETRY);
|
||||
bool is_flexi_serial = isComboboxOptionSelected(m_oplink->FlexiPort, OPLinkSettings::FLEXIPORT_SERIAL);
|
||||
@ -277,6 +279,9 @@ void ConfigOPLinkWidget::updateSettings()
|
||||
bool is_stream_flexi = isComboboxOptionSelected(m_oplink->RadioPriStream, OPLinkSettings::RADIOPRISTREAM_FLEXI) ||
|
||||
isComboboxOptionSelected(m_oplink->RadioAuxStream, OPLinkSettings::RADIOAUXSTREAM_FLEXI);
|
||||
|
||||
bool is_flexi_ppm = isComboboxOptionSelected(m_oplink->FlexiPort, OPLinkSettings::FLEXIPORT_PPM);
|
||||
bool is_main_ppm = isComboboxOptionSelected(m_oplink->MainPort, OPLinkSettings::MAINPORT_PPM);
|
||||
|
||||
if (!is_stream_main && !is_vcp_main && (is_main_serial || is_main_telem)) {
|
||||
setComboboxSelectedOption(m_oplink->MainPort, OPLinkSettings::MAINPORT_DISABLED);
|
||||
is_main_serial = false;
|
||||
@ -295,6 +300,9 @@ void ConfigOPLinkWidget::updateSettings()
|
||||
|
||||
m_oplink->MainPort->setEnabled(is_oplink || is_vcp_main);
|
||||
m_oplink->FlexiPort->setEnabled(is_oplink || is_vcp_flexi);
|
||||
|
||||
m_oplink->PPMoutRssi->setEnabled(is_receiver && (is_ppm || is_ppm_only) && (is_flexi_ppm || is_main_ppm));
|
||||
|
||||
m_oplink->MainComSpeed->setEnabled(is_oplink && !is_ppm_only && !is_vcp_main && (is_main_serial || is_main_telem));
|
||||
m_oplink->FlexiComSpeed->setEnabled(is_oplink && !is_ppm_only && !is_vcp_flexi && (is_flexi_serial || is_flexi_telem));
|
||||
m_oplink->CoordID->setEnabled(is_receiver || is_openlrs);
|
||||
@ -416,6 +424,9 @@ void ConfigOPLinkWidget::mainPortChanged()
|
||||
{
|
||||
switch (getComboboxSelectedOption(m_oplink->MainPort)) {
|
||||
case OPLinkSettings::MAINPORT_PPM:
|
||||
if (isComboboxOptionSelected(m_oplink->FlexiPort, OPLinkSettings::FLEXIPORT_PPM)) {
|
||||
setComboboxSelectedOption(m_oplink->FlexiPort, OPLinkSettings::FLEXIPORT_DISABLED);
|
||||
}
|
||||
case OPLinkSettings::MAINPORT_PWM:
|
||||
case OPLinkSettings::MAINPORT_DISABLED:
|
||||
if (isComboboxOptionSelected(m_oplink->RadioPriStream, OPLinkSettings::RADIOPRISTREAM_MAIN)) {
|
||||
@ -439,12 +450,16 @@ void ConfigOPLinkWidget::mainPortChanged()
|
||||
default:
|
||||
break;
|
||||
}
|
||||
updateSettings();
|
||||
}
|
||||
|
||||
void ConfigOPLinkWidget::flexiPortChanged()
|
||||
{
|
||||
switch (getComboboxSelectedOption(m_oplink->FlexiPort)) {
|
||||
case OPLinkSettings::FLEXIPORT_PPM:
|
||||
if (isComboboxOptionSelected(m_oplink->MainPort, OPLinkSettings::MAINPORT_PPM)) {
|
||||
setComboboxSelectedOption(m_oplink->MainPort, OPLinkSettings::MAINPORT_DISABLED);
|
||||
}
|
||||
case OPLinkSettings::FLEXIPORT_PWM:
|
||||
case OPLinkSettings::FLEXIPORT_DISABLED:
|
||||
if (isComboboxOptionSelected(m_oplink->RadioPriStream, OPLinkSettings::RADIOPRISTREAM_FLEXI)) {
|
||||
@ -462,14 +477,13 @@ void ConfigOPLinkWidget::flexiPortChanged()
|
||||
if (isComboboxOptionSelected(m_oplink->MainPort, OPLinkSettings::MAINPORT_TELEMETRY)) {
|
||||
setComboboxSelectedOption(m_oplink->MainPort, OPLinkSettings::MAINPORT_SERIAL);
|
||||
}
|
||||
m_oplink->FlexiComSpeed->setEnabled(true);
|
||||
break;
|
||||
case OPLinkSettings::FLEXIPORT_SERIAL:
|
||||
m_oplink->FlexiComSpeed->setEnabled(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
updateSettings();
|
||||
}
|
||||
|
||||
void ConfigOPLinkWidget::radioPriStreamChanged()
|
||||
|
@ -2143,6 +2143,22 @@ Leave blank to use autogenerated Device ID.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="3">
|
||||
<widget class="QCheckBox" name="PPMoutRssi">
|
||||
<property name="toolTip">
|
||||
<string>Add RSSI to the PPM output stream (Ch9)</string>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Send RSSI over PPM (Ch9)</string>
|
||||
</property>
|
||||
<property name="tristate">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -1,22 +1,23 @@
|
||||
<xml>
|
||||
<object name="OPLinkSettings" singleinstance="true" settings="true" category="System">
|
||||
<description>OPLink configurations options.</description>
|
||||
<field name="Protocol" units="" type="enum" elements="1" options="Disabled,OPLinkReceiver,OPLinkCoordinator,OpenLRS" defaultvalue="Disabled"/>
|
||||
<field name="LinkType" units="" type="enum" elements="1" options="Data,Control,DataAndControl" defaultvalue="Data"/>
|
||||
<field name="CoordID" units="hex" type="uint32" elements="1" defaultvalue="0"/>
|
||||
<field name="Protocol" units="" type="enum" elements="1" options="Disabled,OPLinkReceiver,OPLinkCoordinator,OpenLRS" defaultvalue="Disabled"/>
|
||||
<field name="LinkType" units="" type="enum" elements="1" options="Data,Control,DataAndControl" defaultvalue="Data"/>
|
||||
<field name="CoordID" units="hex" type="uint32" elements="1" defaultvalue="0"/>
|
||||
<field name="CustomDeviceID" units="hex" type="uint32" elements="1" defaultvalue="0"/>
|
||||
|
||||
<!-- port options -->
|
||||
<!-- port options -->
|
||||
<field name="MainPort" units="" type="enum" elements="1" options="Disabled,Telemetry,Serial,PPM,PWM" defaultvalue="Disabled"/>
|
||||
<field name="FlexiPort" units="" type="enum" elements="1" options="Disabled,Telemetry,Serial,PPM,PWM" defaultvalue="Disabled"/>
|
||||
<field name="PPMOutRSSI" units="" type="enum" elements="1" options="False,True" defaultvalue="False" description="Add RSSI to the PPM output stream (Ch9)"/>
|
||||
<field name="RadioPriStream" units="connection" type="enum" elements="1" options="Disabled,HID,Main,Flexi,VCP" defaultvalue="HID"/>
|
||||
<field name="RadioAuxStream" units="connection" type="enum" elements="1" options="Disabled,HID,Main,Flexi,VCP" defaultvalue="Disabled"/>
|
||||
<field name="VCPBridge" units="connection" type="enum" elements="1" options="Disabled,Main,Flexi" defaultvalue="Disabled"/>
|
||||
<field name="MainComSpeed" units="bps" type="enum" elements="1" options="Disabled,4800,9600,19200,38400,57600,115200" defaultvalue="38400"/>
|
||||
<field name="FlexiComSpeed" units="bps" type="enum" elements="1" options="Disabled,4800,9600,19200,38400,57600,115200" defaultvalue="38400"/>
|
||||
<field name="AirDataRate" units="bps" type="enum" elements="1" options="9600,19200,32000,57600,64000,100000,128000,192000,256000" defaultvalue="64000"/>
|
||||
<field name="RadioAuxStream" units="connection" type="enum" elements="1" options="Disabled,HID,Main,Flexi,VCP" defaultvalue="Disabled"/>
|
||||
<field name="VCPBridge" units="connection" type="enum" elements="1" options="Disabled,Main,Flexi" defaultvalue="Disabled"/>
|
||||
<field name="MainComSpeed" units="bps" type="enum" elements="1" options="Disabled,4800,9600,19200,38400,57600,115200" defaultvalue="38400"/>
|
||||
<field name="FlexiComSpeed" units="bps" type="enum" elements="1" options="Disabled,4800,9600,19200,38400,57600,115200" defaultvalue="38400"/>
|
||||
<field name="AirDataRate" units="bps" type="enum" elements="1" options="9600,19200,32000,57600,64000,100000,128000,192000,256000" defaultvalue="64000"/>
|
||||
|
||||
<!-- OpenLRS options -->
|
||||
<!-- OpenLRS options -->
|
||||
<field name="Version" units="" type="uint8" elements="1" defaultvalue="0"/>
|
||||
<field name="SerialBaudrate" units="bps" type="uint32" elements="1" defaultvalue="0"/>
|
||||
<field name="RFFrequency" units="Hz" type="uint32" elements="1" defaultvalue="0"/>
|
||||
@ -24,7 +25,7 @@
|
||||
<field name="RSSIType" units="function" type="enum" elements="1" options="Combined,RSSI,LinkQuality" defaultvalue="Combined"/>
|
||||
<field name="RFPower" units="" type="uint8" elements="1" defaultvalue="0"/>
|
||||
|
||||
<!-- RF options -->
|
||||
<!-- RF options -->
|
||||
<field name="RFXtalCap" units="" type="uint8" elements="1" defaultvalue="127" limits="%BE:0:171" description="0 to 171 range, default 127"/>
|
||||
<field name="MinChannel" units="" type="uint8" elements="1" defaultvalue="0"/>
|
||||
<field name="MaxChannel" units="" type="uint8" elements="1" defaultvalue="250"/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user