Skip to content

Commit 6b1248a

Browse files
committed
add killprogrammer api
1 parent 70e145e commit 6b1248a

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

hub.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,12 @@ func checkCmd(m []byte) {
166166
go spErr("You did not specify a port to close")
167167
}
168168

169+
} else if strings.HasPrefix(sl, "killprogrammer") {
170+
// kill the running process (assumes singleton for now)
171+
go spHandlerProgramKill()
172+
169173
} else if strings.HasPrefix(sl, "sendjson") {
170174
// will catch sendjson
171-
172175
go spWriteJson(s)
173176

174177
} else if strings.HasPrefix(sl, "send") {

programmer.go

+20-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"path/filepath"
1818
"regexp"
1919
"runtime"
20+
"strconv"
2021
"strings"
2122
"time"
2223
)
@@ -187,9 +188,10 @@ func spProgramRW(portname string, boardname string, boardname_rewrite string, fi
187188
}
188189
}
189190

191+
var oscmd *exec.Cmd
192+
190193
func spHandlerProgram(flasher string, cmdString []string) {
191194

192-
var oscmd *exec.Cmd
193195
// if runtime.GOOS == "darwin" {
194196
// sh, _ := exec.LookPath("sh")
195197
// // prepend the flasher to run it via sh
@@ -262,6 +264,23 @@ func spHandlerProgram(flasher string, cmdString []string) {
262264
}
263265
}
264266

267+
func spHandlerProgramKill() {
268+
269+
// Kill the process if there is one running
270+
if oscmd != nil && oscmd.Process.Pid > 0 {
271+
h.broadcastSys <- []byte("{\"ProgrammerStatus\": \"PreKilled\", \"Pid\": " + strconv.Itoa(oscmd.Process.Pid) + ", \"ProcessState\": \"" + oscmd.ProcessState.String() + "\"}")
272+
oscmd.Process.Kill()
273+
h.broadcastSys <- []byte("{\"ProgrammerStatus\": \"Killed\", \"Pid\": " + strconv.Itoa(oscmd.Process.Pid) + ", \"ProcessState\": \"" + oscmd.ProcessState.String() + "\"}")
274+
275+
} else {
276+
if oscmd != nil {
277+
h.broadcastSys <- []byte("{\"ProgrammerStatus\": \"KilledError\", \"Msg\": \"No current process\", \"Pid\": " + strconv.Itoa(oscmd.Process.Pid) + ", \"ProcessState\": \"" + oscmd.ProcessState.String() + "\"}")
278+
} else {
279+
h.broadcastSys <- []byte("{\"ProgrammerStatus\": \"KilledError\", \"Msg\": \"No current process\"}")
280+
}
281+
}
282+
}
283+
265284
func formatCmdline(cmdline string, boardOptions map[string]string) (string, bool) {
266285

267286
list := strings.Split(cmdline, "{")

0 commit comments

Comments
 (0)