Skip to content

Commit 7668d12

Browse files
committed
solve problems with bossac commandline
Former-commit-id: 6eb2c83e200c72e96125d5e4e5c50ba9df792f2f [formerly fa679262aa45fb2526907bcff381c24d3b319a38] Former-commit-id: b13c0f6b25254075d58c57a80b18d7ea50675b06
1 parent 6c1fb11 commit 7668d12

File tree

2 files changed

+39
-6
lines changed

2 files changed

+39
-6
lines changed

serial.go

+38-5
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,15 @@ func formatCmdline(cmdline string, boardOptions map[string]string) (string, bool
674674
return cmdline, true
675675
}
676676

677+
func containsStr(s []string, e string) bool {
678+
for _, a := range s {
679+
if a == e {
680+
return true
681+
}
682+
}
683+
return false
684+
}
685+
677686
func assembleCompilerCommand(boardname string, portname string, filePath string) (bool, string, []string) {
678687

679688
// get executable (self)path and use it as base for all other paths
@@ -706,6 +715,7 @@ func assembleCompilerCommand(boardname string, portname string, filePath string)
706715
}
707716

708717
boardOptions["serial.port"] = portname
718+
boardOptions["serial.port.file"] = portname
709719

710720
// filepath need special care; the project_name var is the filename minus its extension (hex or bin)
711721
// if we are going to modify standard IDE files we also could pass ALL filename
@@ -734,6 +744,10 @@ func assembleCompilerCommand(boardname string, portname string, filePath string)
734744
uploadOptions[arr[0]] = arr[1]
735745
arr[0] = strings.Replace(arr[0], "tools."+tool+".", "", 1)
736746
boardOptions[arr[0]] = arr[1]
747+
// we have a "=" in command line
748+
if len(arr) > 2 {
749+
boardOptions[arr[0]] = arr[1] + "=" + arr[2]
750+
}
737751
}
738752
}
739753
file.Close()
@@ -747,11 +761,12 @@ func assembleCompilerCommand(boardname string, portname string, filePath string)
747761
return false, "", nil
748762
}
749763

750-
boardOptions["runtime.tools.avrdude.path"] = path
764+
boardOptions["runtime.tools."+tool+".path"] = path
751765

752-
cmdline := uploadOptions["tools."+tool+".upload.pattern"]
766+
cmdline := boardOptions["upload.pattern"]
753767
// remove cmd.path as it is handled differently
754768
cmdline = strings.Replace(cmdline, "\"{cmd.path}\"", " ", 1)
769+
cmdline = strings.Replace(cmdline, "\"{path}/{cmd}\"", " ", 1)
755770
cmdline = strings.Replace(cmdline, "\"", "", -1)
756771

757772
// split the commandline in substrings and recursively replace mapped strings
@@ -772,15 +787,25 @@ func assembleCompilerCommand(boardname string, portname string, filePath string)
772787

773788
mode := &serial.Mode{
774789
BaudRate: 1200,
790+
Vmin: 1,
791+
Vtimeout: 0,
775792
}
776793
port, err := serial.OpenPort(portname, mode)
777794
if err != nil {
778795
log.Println(err)
779796
return false, "", nil
780797
}
781-
time.Sleep(time.Second / 2)
798+
port.SetDTR(false)
782799
port.Close()
783-
time.Sleep(time.Second * 2)
800+
time.Sleep(time.Second / 4 * 10)
801+
// time.Sleep(time.Second / 4)
802+
// wait for port to reappear
803+
if boardOptions["upload.wait_for_upload_port"] == "true" {
804+
ports, _ := serial.GetPortsList()
805+
for !(containsStr(ports, portname)) {
806+
ports, _ = serial.GetPortsList()
807+
}
808+
}
784809
}
785810

786811
tool = (filepath.Dir(execPath) + "/" + boardFields[0] + "/tools/" + tool + "/bin/" + tool)
@@ -791,7 +816,15 @@ func assembleCompilerCommand(boardname string, portname string, filePath string)
791816
tool = strings.Replace(tool, "/", "\\", -1)
792817
}
793818

794-
return (tool != ""), tool, cmdlineSlice
819+
// remove blanks from cmdlineSlice
820+
var cmdlineSliceOut []string
821+
for _, element := range cmdlineSlice {
822+
if element != "" {
823+
cmdlineSliceOut = append(cmdlineSliceOut, element)
824+
}
825+
}
826+
827+
return (tool != ""), tool, cmdlineSliceOut
795828
}
796829

797830
func findPortByName(portname string) (*serport, bool) {

0 commit comments

Comments
 (0)