@@ -8,44 +8,30 @@ import (
8
8
log "github.com/Sirupsen/logrus"
9
9
"github.com/facchinm/go-serial"
10
10
"github.com/kardianos/osext"
11
+ "github.com/mattn/go-shellwords"
11
12
"io"
12
13
"mime/multipart"
13
14
"net/http"
14
15
"os"
15
16
"os/exec"
16
17
"path/filepath"
17
- "strconv"
18
18
"strings"
19
19
"time"
20
20
)
21
21
22
22
var compiling = false
23
23
24
- // Download the file from URL first, store in tmp folder, then pass to spProgram
25
- func spProgramFromUrl (portname string , boardname string , url string ) {
26
- mapB , _ := json .Marshal (map [string ]string {"ProgrammerStatus" : "DownloadStart" , "Url" : url })
27
- h .broadcastSys <- mapB
28
- filename , err := downloadFromUrl (url )
29
- mapB , _ = json .Marshal (map [string ]string {"ProgrammerStatus" : "DownloadDone" , "Filename" : filename , "Url" : url })
30
- h .broadcastSys <- mapB
31
-
32
- if err != nil {
33
- spErr (err .Error ())
34
- return
35
- } else {
36
- spProgram (portname , boardname , filename )
37
- }
38
-
39
- // delete file
40
-
41
- }
42
-
43
24
func colonToUnderscore (input string ) string {
44
25
output := strings .Replace (input , ":" , "_" , - 1 )
45
26
return output
46
27
}
47
28
48
- func spProgramNetwork (portname string , boardname string , filePath string ) error {
29
+ type basicAuthData struct {
30
+ UserName string
31
+ Password string
32
+ }
33
+
34
+ func spProgramNetwork (portname string , boardname string , filePath string , authdata basicAuthData ) error {
49
35
50
36
log .Println ("Starting network upload" )
51
37
log .Println ("Board Name: " + boardname )
@@ -91,7 +77,9 @@ func spProgramNetwork(portname string, boardname string, filePath string) error
91
77
}
92
78
// Don't forget to set the content type, this will contain the boundary.
93
79
req .Header .Set ("Content-Type" , w .FormDataContentType ())
94
- req .SetBasicAuth ("root" , "arduino" )
80
+ if authdata .UserName != "" {
81
+ req .SetBasicAuth (authdata .UserName , authdata .Password )
82
+ }
95
83
96
84
//h.broadcastSys <- []byte("Start flashing with command " + cmdString)
97
85
log .Printf ("Network flashing on " + portname )
@@ -128,61 +116,40 @@ func spProgramNetwork(portname string, boardname string, filePath string) error
128
116
return err
129
117
}
130
118
131
- func spProgramLocal (portname string , boardname string , filePath string ) {
132
- isFound , flasher , mycmd := assembleCompilerCommand (boardname , portname , filePath )
133
- mapD := map [string ]string {"ProgrammerStatus" : "CommandReady" , "IsFound" : strconv .FormatBool (isFound ), "Flasher" : flasher , "Cmd" : strings .Join (mycmd , " " )}
134
- mapB , _ := json .Marshal (mapD )
135
- h .broadcastSys <- mapB
119
+ func spProgramLocal (portname string , boardname string , filePath string , commandline string ) {
136
120
137
- if isFound {
138
- spHandlerProgram (flasher , mycmd )
139
- } else {
140
- spErr ("Could not find the board " + boardname + " that you were trying to program." )
141
- mapD := map [string ]string {"ProgrammerStatus" : "Failed" , "IsFound" : strconv .FormatBool (isFound ), "Flasher" : flasher , "Cmd" : strings .Join (mycmd , " " ), "Err" : "Could not find the board " + boardname + " that you were trying to program." }
142
- mapB , _ := json .Marshal (mapD )
143
- h .broadcastSys <- mapB
144
- return
145
- }
121
+ z , _ := shellwords .Parse (commandline )
122
+ spHandlerProgram (z [0 ], z [1 :])
146
123
}
147
124
148
- func spProgram (portname string , boardname string , filePath string ) {
125
+ func spProgram (portname string , boardname string , filePath string , commandline string , networkPort bool , authdata basicAuthData ) {
149
126
150
- spProgramRW (portname , boardname , "" , filePath )
127
+ spProgramRW (portname , boardname , "" , filePath , commandline , networkPort , authdata )
151
128
}
152
129
153
- func spProgramRW (portname string , boardname string , boardname_rewrite string , filePath string ) {
130
+ func spProgramRW (portname string , boardname string , boardname_rewrite string , filePath string , commandline string , networkPort bool , authdata basicAuthData ) {
154
131
compiling = true
155
132
156
133
defer func () {
157
134
time .Sleep (1500 * time .Millisecond )
158
135
compiling = false
159
136
}()
160
137
161
- // check if the port is physical or network
162
- var networkPort bool
163
- myport , exist := findPortByNameRerun (portname , false )
164
- if ! exist {
165
- // it could be a network port that has not been found at the second lap
166
- networkPort = true
167
- } else {
168
- networkPort = myport .NetworkPort
169
- }
170
-
171
138
var err error
172
139
173
140
if networkPort {
174
141
if boardname_rewrite == "" {
175
- err = spProgramNetwork (portname , boardname_rewrite , filePath )
142
+ err = spProgramNetwork (portname , boardname_rewrite , filePath , authdata )
176
143
} else {
177
- err = spProgramNetwork (portname , boardname , filePath )
144
+ err = spProgramNetwork (portname , boardname , filePath , authdata )
178
145
}
179
146
if err != nil {
180
147
mapD := map [string ]string {"ProgrammerStatus" : "Error " + err .Error (), "Msg" : "Could not program the board" , "Output" : "" , "Err" : err .Error ()}
181
148
mapB , _ := json .Marshal (mapD )
182
149
h .broadcastSys <- mapB
183
150
}
184
151
} else {
185
- spProgramLocal (portname , boardname , filePath )
152
+ spProgramLocal (portname , boardname , filePath , commandline )
186
153
}
187
154
}
188
155
@@ -195,8 +162,8 @@ func spHandlerProgram(flasher string, cmdString []string) {
195
162
// cmdString = append([]string{flasher}, cmdString...)
196
163
// oscmd = exec.Command(sh, cmdString...)
197
164
// } else {
198
- oscmd = exec . Command ( flasher , cmdString ... )
199
- // }
165
+
166
+ oscmd = exec . Command ( globalToolsMap [ flasher ], cmdString ... )
200
167
201
168
// Stdout buffer
202
169
//var cmdOutput []byte
0 commit comments