6import QGroundControl.Controls
9 property var linkManager: QGroundControl.linkManager
13 function saveSettings() {
14 if (baudCombo.isCustomBaud) {
15 var baud = parseInt(customBaudField.text)
17 subEditConfig.baud = baud
24 rowSpacing: _rowSpacing
25 columnSpacing: _colSpacing
27 QGCLabel { text: qsTr("Serial Port") }
30 Layout.preferredWidth: _secondColumnWidth
31 objectName: "serialPortCombo"
32 enabled: linkManager.serialPorts.length > 0
36 function refreshPorts() {
37 const paths = linkManager.serialPorts
38 const labels = linkManager.serialPortStrings
40 let selectedPath = subEditConfig.portName
41 if (!selectedPath && paths.length > 0) {
42 selectedPath = paths[0]
43 subEditConfig.portName = selectedPath
45 for (let i = 0; i < paths.length; ++i) {
46 entries.push({ label: labels[i] || paths[i], path: paths[i] })
48 let selectedIndex = paths.indexOf(selectedPath)
49 if (selectedIndex < 0 && selectedPath) {
50 entries.push({ label: selectedPath, path: selectedPath })
51 selectedIndex = entries.length - 1
53 if (entries.length === 0) {
54 entries.push({ label: qsTr("None Available"), path: "" })
58 currentIndex = selectedIndex
61 onActivated: (index) => {
62 if (index >= 0 && index < model.length && model[index].path) {
63 subEditConfig.portName = model[index].path
67 Component.onCompleted: refreshPorts()
71 function onCommPortsChanged() { commPortCombo.refreshPorts() }
72 function onCommPortStringsChanged() { commPortCombo.refreshPorts() }
76 function onPortNameChanged() { commPortCombo.refreshPorts() }
80 QGCLabel { text: qsTr("Baud Rate") }
83 Layout.preferredWidth: _secondColumnWidth
85 readonly property string _customLabel: qsTr("Custom")
86 readonly property bool isCustomBaud: currentText === _customLabel
88 onActivated: (index) => {
89 if (index !== -1 && !isCustomBaud) {
90 subEditConfig.baud = parseInt(currentText)
94 Component.onCompleted: {
95 var rates = linkManager.serialBaudRates.slice()
96 rates.push(_customLabel)
99 var baud = subEditConfig ? subEditConfig.baud.toString() : "57600"
100 var index = baudCombo.find(baud)
102 baudCombo.currentIndex = baudCombo.count - 1
103 customBaudField.text = baud
105 baudCombo.currentIndex = index
111 text: qsTr("Custom Baud Rate")
112 visible: baudCombo.isCustomBaud
116 Layout.preferredWidth: _secondColumnWidth
117 visible: baudCombo.isCustomBaud
118 numericValuesOnly: true
119 validator: IntValidator { bottom: 1 }
121 if (!baudCombo.isCustomBaud) return
122 var baud = parseInt(text)
124 subEditConfig.baud = baud
132 text: qsTr("Advanced Settings")
138 rowSpacing: _rowSpacing
139 columnSpacing: _colSpacing
140 visible: advancedSettings.checked
144 text: qsTr("Enable Flow Control")
145 checked: subEditConfig.flowControl !== 0
146 onCheckedChanged: subEditConfig.flowControl = checked ? 1 : 0
151 text: qsTr("Force DTR Low")
152 checked: subEditConfig ? subEditConfig.dtrForceLow : false
153 onCheckedChanged: { if (subEditConfig) subEditConfig.dtrForceLow = checked }
156 QGCLabel { text: qsTr("Parity") }
158 Layout.preferredWidth: _secondColumnWidth
159 model: [qsTr("None"), qsTr("Even"), qsTr("Odd")]
161 onActivated: (index) => {
162 // Hard coded values from qserialport.h
165 subEditConfig.parity = 0
168 subEditConfig.parity = 2
171 subEditConfig.parity = 3
176 Component.onCompleted: {
177 switch (subEditConfig.parity) {
188 console.warn("Unknown parity", subEditConfig.parity)
194 QGCLabel { text: qsTr("Data Bits") }
196 Layout.preferredWidth: _secondColumnWidth
197 model: [ "5", "6", "7", "8" ]
198 currentIndex: Math.max(Math.min(subEditConfig.dataBits - 5, 3), 0)
199 onActivated: (index) => { subEditConfig.dataBits = index + 5 }
202 QGCLabel { text: qsTr("Stop Bits") }
204 Layout.preferredWidth: _secondColumnWidth
206 currentIndex: Math.max(Math.min(subEditConfig.stopBits - 1, 1), 0)
207 onActivated: (index) => { subEditConfig.stopBits = index + 1 }