Skip to content

Commit 5ecc581

Browse files
committed
Allow submenu properties to override monitor settings
1 parent 6499950 commit 5ecc581

File tree

4 files changed

+58
-8
lines changed

4 files changed

+58
-8
lines changed

arduino/cores/board.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ func (b *Board) IsBoardMatchingIDProperties(query *properties.Map) bool {
175175
}
176176

177177
// GetMonitorSettings returns the settings for the pluggable monitor of the given protocol
178-
func (b *Board) GetMonitorSettings(protocol string) *properties.Map {
179-
return b.Properties.SubTree("monitor_port." + protocol)
178+
// and set of board properties.
179+
func GetMonitorSettings(protocol string, boardProperties *properties.Map) *properties.Map {
180+
return boardProperties.SubTree("monitor_port." + protocol)
180181
}

arduino/cores/packagemanager/loader.go

+22-4
Original file line numberDiff line numberDiff line change
@@ -534,11 +534,29 @@ func (pm *Builder) loadBoards(platform *cores.PlatformRelease) error {
534534
// - xxx.monitor_port.serial.rts=off
535535
// - xxx.monitor_port.serial.dtr=off
536536
func convertLegacySerialPortRTSDTRSettingsToPluggableMonitor(boardProperties *properties.Map) {
537-
if boardProperties.GetBoolean("serial.disableDTR") {
538-
boardProperties.Set("monitor_port.serial.dtr", "off")
537+
disabledToOnOff := func(k string) string {
538+
if boardProperties.GetBoolean(k) {
539+
return "off" // Disabled
540+
}
541+
return "on" // Not disabled
542+
}
543+
if boardProperties.ContainsKey("serial.disableDTR") {
544+
boardProperties.Set("monitor_port.serial.dtr", disabledToOnOff("serial.disableDTR"))
545+
}
546+
if boardProperties.ContainsKey("serial.disableRTS") {
547+
boardProperties.Set("monitor_port.serial.rts", disabledToOnOff("serial.disableRTS"))
539548
}
540-
if boardProperties.GetBoolean("serial.disableRTS") {
541-
boardProperties.Set("monitor_port.serial.rts", "off")
549+
for _, k := range boardProperties.Keys() {
550+
if strings.HasSuffix(k, ".serial.disableDTR") {
551+
boardProperties.Set(
552+
strings.TrimSuffix(k, ".serial.disableDTR")+".monitor_port.serial.dtr",
553+
disabledToOnOff(k))
554+
}
555+
if strings.HasSuffix(k, ".serial.disableRTS") {
556+
boardProperties.Set(
557+
strings.TrimSuffix(k, ".serial.disableRTS")+".monitor_port.serial.rts",
558+
disabledToOnOff(k))
559+
}
542560
}
543561
}
544562

arduino/cores/packagemanager/loader_test.go

+31
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,20 @@ arduino_zero_native.pid.3=0x024d
108108

109109
func TestDisableDTRRTSConversionToPluggableMonitor(t *testing.T) {
110110
m, err := properties.LoadFromBytes([]byte(`
111+
menu.rts=RTS
112+
menu.dtr=DTR
113+
foo.menu.rts.on=On
114+
foo.menu.rts.on.serial.disableRTS=false
115+
foo.menu.rts.off=Off
116+
foo.menu.rts.off.serial.disableRTS=true
117+
foo.menu.dtr.on=On
118+
foo.menu.dtr.on.serial.disableDTR=false
119+
foo.menu.dtr.off=Off
120+
foo.menu.dtr.off.serial.disableDTR=true
121+
111122
arduino_zero.serial.disableDTR=true
112123
arduino_zero.serial.disableRTS=true
124+
113125
arduino_zero_edbg.serial.disableDTR=false
114126
arduino_zero_edbg.serial.disableRTS=true
115127
`))
@@ -131,9 +143,28 @@ arduino_zero_edbg.serial.disableRTS=true
131143
require.Equal(t, `properties.Map{
132144
"serial.disableDTR": "false",
133145
"serial.disableRTS": "true",
146+
"monitor_port.serial.dtr": "on",
134147
"monitor_port.serial.rts": "off",
135148
}`, zeroEdbg.Dump())
136149
}
150+
{
151+
foo := m.SubTree("foo")
152+
convertLegacySerialPortRTSDTRSettingsToPluggableMonitor(foo)
153+
require.Equal(t, `properties.Map{
154+
"menu.rts.on": "On",
155+
"menu.rts.on.serial.disableRTS": "false",
156+
"menu.rts.off": "Off",
157+
"menu.rts.off.serial.disableRTS": "true",
158+
"menu.dtr.on": "On",
159+
"menu.dtr.on.serial.disableDTR": "false",
160+
"menu.dtr.off": "Off",
161+
"menu.dtr.off.serial.disableDTR": "true",
162+
"menu.rts.on.monitor_port.serial.rts": "on",
163+
"menu.rts.off.monitor_port.serial.rts": "off",
164+
"menu.dtr.on.monitor_port.serial.dtr": "on",
165+
"menu.dtr.off.monitor_port.serial.dtr": "off",
166+
}`, foo.Dump())
167+
}
137168
}
138169

139170
func TestLoadDiscoveries(t *testing.T) {

commands/monitor/monitor.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,12 @@ func findMonitorAndSettingsForProtocolAndBoard(pme *packagemanager.Explorer, pro
128128
return nil, nil, &arduino.InvalidFQBNError{Cause: err}
129129
}
130130

131-
_, boardPlatform, board, boardProperties, _, err := pme.ResolveFQBN(fqbn)
131+
_, boardPlatform, _, boardProperties, _, err := pme.ResolveFQBN(fqbn)
132132
if err != nil {
133133
return nil, nil, &arduino.UnknownFQBNError{Cause: err}
134134
}
135135

136-
boardSettings = board.GetMonitorSettings(protocol)
136+
boardSettings = cores.GetMonitorSettings(protocol, boardProperties)
137137

138138
if mon, ok := boardPlatform.Monitors[protocol]; ok {
139139
monitorDepOrRecipe = mon

0 commit comments

Comments
 (0)