Skip to content

Commit 9a688bb

Browse files
committed
rework update and quit button
1 parent 68e4f24 commit 9a688bb

File tree

7 files changed

+142
-156
lines changed

7 files changed

+142
-156
lines changed

hub.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ func checkCmd(m []byte) {
114114

115115
sl := strings.ToLower(strings.Trim(s, "\n"))
116116

117+
if *hibernate == true {
118+
//do nothing
119+
return
120+
}
121+
117122
if strings.HasPrefix(sl, "open") {
118123

119124
// check if user wants to open this port as a secondary port
@@ -211,7 +216,7 @@ func checkCmd(m []byte) {
211216
} else if strings.HasPrefix(sl, "broadcast") {
212217
go broadcast(s)
213218
} else if strings.HasPrefix(sl, "restart") {
214-
restart()
219+
restart("")
215220
} else if strings.HasPrefix(sl, "exit") {
216221
exit()
217222
} else if strings.HasPrefix(sl, "memstats") {
@@ -292,7 +297,7 @@ func exit() {
292297

293298
}
294299

295-
func restart() {
300+
func restart(path string) {
296301
// relaunch ourself and exit
297302
// the relaunch works because we pass a cmdline in
298303
// that has serial-port-json-server only initialize 5 seconds later
@@ -320,22 +325,35 @@ func restart() {
320325
// using osext
321326
exePath, err3 := osext.Executable()
322327
if err3 != nil {
323-
fmt.Printf("Error getting exe path using osext lib. err: %v\n", err3)
328+
log.Printf("Error getting exe path using osext lib. err: %v\n", err3)
324329
}
325-
fmt.Printf("exePath using osext: %v\n", exePath)
326330

331+
if path == "" {
332+
log.Printf("exePath using osext: %v\n", exePath)
333+
} else {
334+
exePath = path
335+
}
327336
// figure out garbageCollection flag
328337
//isGcFlag := "false"
329338

330339
var cmd *exec.Cmd
340+
331341
/*if *isGC {
332342
//isGcFlag = "true"
333343
cmd = exec.Command(exePath, "-ls", "-addr", *addr, "-regex", *regExpFilter, "-gc")
334344
} else {
335345
cmd = exec.Command(exePath, "-ls", "-addr", *addr, "-regex", *regExpFilter)
336346
337347
}*/
338-
cmd = exec.Command(exePath, "-ls", "-addr", *addr, "-regex", *regExpFilter, "-gc", *gcType)
348+
349+
hiberString := ""
350+
if *hibernate == true {
351+
hiberString = "-hibernate"
352+
}
353+
354+
cmd = exec.Command(exePath, "-ls", "-addr", *addr, "-regex", *regExpFilter, "-gc", *gcType, hiberString)
355+
356+
fmt.Println(cmd)
339357

340358
//cmd := exec.Command("./serial-port-json-server", "ls")
341359
err := cmd.Start()

main.go

Lines changed: 25 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
//"github.com/sanderhahn/gozip"
1616
"github.com/gin-gonic/gin"
1717
"github.com/itsjamie/gin-cors"
18-
"github.com/kardianos/service"
1918
"github.com/vharitonsky/iniflags"
2019
"runtime/debug"
2120
"text/template"
@@ -27,6 +26,7 @@ var (
2726
git_revision = "xxxxxxxx"
2827
embedded_autoupdate = true
2928
embedded_autoextract = false
29+
hibernate = flag.Bool("hibernate", false, "start hibernated")
3030
addr = flag.String("addr", ":8989", "http service address")
3131
addrSSL = flag.String("addrSSL", ":8990", "https service address")
3232
//assets = flag.String("assets", defaultAssetPath(), "path to assets")
@@ -94,56 +94,9 @@ func launchSelfLater() {
9494
log.Println("Done waiting 5 secs. Now launching...")
9595
}
9696

97-
var logger service.Logger
98-
99-
type program struct{}
100-
101-
func (p *program) Start(s service.Service) error {
102-
// Start should not block. Do the actual work async.
103-
go p.run()
104-
return nil
105-
}
106-
func (p *program) run() {
107-
startDaemon()
108-
}
109-
func (p *program) Stop(s service.Service) error {
110-
// Stop should not block. Return with a few seconds.
111-
<-time.After(time.Second * 13)
112-
return nil
113-
}
114-
11597
func main() {
116-
svcConfig := &service.Config{
117-
Name: "ArduinoCreateAgent",
118-
DisplayName: "Arduino Create Agent",
119-
Description: "A bridge that allows Arduino Create to operate on the boards connected to the computer",
120-
}
12198

122-
prg := &program{}
123-
s, err := service.New(prg, svcConfig)
124-
if err != nil {
125-
log.Fatal(err)
126-
}
127-
if len(os.Args) > 1 {
128-
err = service.Control(s, os.Args[1])
129-
if err != nil {
130-
log.Fatal(err)
131-
}
132-
return
133-
}
134-
135-
logger, err = s.Logger(nil)
136-
if err != nil {
137-
log.Fatal(err)
138-
}
139-
140-
err = s.Run()
141-
if err != nil {
142-
logger.Error(err)
143-
}
144-
}
145-
146-
func startDaemon() {
99+
flag.Parse()
147100
go func() {
148101

149102
// autoextract self
@@ -153,18 +106,22 @@ func startDaemon() {
153106
if embedded_autoextract {
154107
// save the config.ini (if it exists)
155108
if _, err := os.Stat(dest + "/" + *configIni); os.IsNotExist(err) {
156-
fmt.Println("First run, unzipping self")
109+
log.Println("First run, unzipping self")
157110
err := Unzip(src, dest)
158-
fmt.Println("Self extraction, err:", err)
111+
log.Println("Self extraction, err:", err)
159112
}
160113

161114
if _, err := os.Stat(dest + "/" + *configIni); os.IsNotExist(err) {
162115
flag.Parse()
163-
fmt.Println("No config.ini at", *configIni)
116+
log.Println("No config.ini at", *configIni)
164117
} else {
118+
flag.Parse()
165119
flag.Set("config", dest+"/"+*configIni)
166120
iniflags.Parse()
167121
}
122+
} else {
123+
flag.Set("config", dest+"/"+*configIni)
124+
iniflags.Parse()
168125
}
169126

170127
//log.SetFormatter(&log.JSONFormatter{})
@@ -316,18 +273,23 @@ const homeTemplateHtml = `<!DOCTYPE html>
316273
var socket;
317274
var msg = $("#msg");
318275
var log = document.getElementById('log');
276+
var pause = document.getElementById('myCheck');
319277
var messages = [];
278+
var only_log = true;
320279
321280
function appendLog(msg) {
322-
messages.push(msg);
323-
if (messages.length > 100) {
324-
messages.shift();
325-
}
326-
var doScroll = log.scrollTop == log.scrollHeight - log.clientHeight;
327-
log.innerHTML = messages.join("<br>");
328-
if (doScroll) {
329-
log.scrollTop = log.scrollHeight - log.clientHeight;
330-
}
281+
282+
if (!pause.checked && (only_log == false || (!(msg.indexOf("{") == 0) && only_log == true))) {
283+
messages.push(msg);
284+
if (messages.length > 100) {
285+
messages.shift();
286+
}
287+
var doScroll = log.scrollTop == log.scrollHeight - log.clientHeight;
288+
log.innerHTML = messages.join("<br>");
289+
if (doScroll) {
290+
log.scrollTop = log.scrollHeight - log.clientHeight;
291+
}
292+
}
331293
}
332294
333295
$("#form").submit(function() {
@@ -338,6 +300,8 @@ const homeTemplateHtml = `<!DOCTYPE html>
338300
return false;
339301
}
340302
socket.emit("command", msg.val());
303+
if (msg.val().indexOf("log on") != -1) {only_log = true;}
304+
if (msg.val().indexOf("log off") != -1) {only_log = false;}
341305
msg.val("");
342306
return false
343307
});

serial.go

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -90,18 +90,17 @@ type SpPortList struct {
9090
}
9191

9292
type SpPortItem struct {
93-
Name string
94-
Friendly string
95-
SerialNumber string
96-
DeviceClass string
97-
IsOpen bool
98-
IsPrimary bool
99-
RelatedNames []string
100-
Baud int
101-
BufferAlgorithm string
102-
AvailableBufferAlgorithms []string
103-
Ver float32
104-
NetworkPort bool
93+
Name string
94+
Friendly string
95+
SerialNumber string
96+
DeviceClass string
97+
IsOpen bool
98+
IsPrimary bool
99+
RelatedNames []string
100+
Baud int
101+
BufferAlgorithm string
102+
Ver string
103+
NetworkPort bool
105104
}
106105

107106
// SerialPorts contains the ports attached to the machine
@@ -513,21 +512,20 @@ func spListDual(network bool) {
513512
DtrOn bool
514513
BufferAlgorithm string
515514
AvailableBufferAlgorithms []string
516-
Ver float32
515+
Ver string
517516
*/
518517
spl.Ports[ctr] = SpPortItem{
519-
Name: item.Name,
520-
Friendly: item.FriendlyName,
521-
SerialNumber: item.SerialNumber,
522-
DeviceClass: item.DeviceClass,
523-
IsOpen: false,
524-
IsPrimary: false,
525-
RelatedNames: item.RelatedNames,
526-
Baud: 0,
527-
BufferAlgorithm: "",
528-
AvailableBufferAlgorithms: availableBufferAlgorithms,
529-
Ver: versionFloat,
530-
NetworkPort: item.NetworkPort,
518+
Name: item.Name,
519+
Friendly: item.FriendlyName,
520+
SerialNumber: item.SerialNumber,
521+
DeviceClass: item.DeviceClass,
522+
IsOpen: false,
523+
IsPrimary: false,
524+
RelatedNames: item.RelatedNames,
525+
Baud: 0,
526+
BufferAlgorithm: "",
527+
Ver: version,
528+
NetworkPort: item.NetworkPort,
531529
}
532530

533531
// figure out if port is open

serialport.go

Lines changed: 4 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -341,35 +341,10 @@ func spHandlerOpen(portname string, baud int, buftype string, isSecondary bool)
341341
// we can go up to 256,000 lines of gcode in the buffer
342342
p := &serport{sendBuffered: make(chan Cmd, 256000), done: make(chan bool), sendNoBuf: make(chan Cmd), portConf: conf, portIo: sp, BufferType: buftype, IsPrimary: isPrimary, IsSecondary: isSecondary}
343343

344-
// if user asked for a buffer watcher, i.e. tinyg/grbl then attach here
345-
if buftype == "tinyg" {
346-
347-
bw := &BufferflowTinyg{Name: "tinyg", parent_serport: p}
348-
bw.Init()
349-
bw.Port = portname
350-
p.bufferwatcher = bw
351-
} else if buftype == "dummypause" {
352-
353-
// this is a dummy pause type bufferflow object
354-
// to test artificially a delay on the serial port write
355-
// it just pauses 3 seconds on each serial port write
356-
bw := &BufferflowDummypause{}
357-
bw.Init()
358-
bw.Port = portname
359-
p.bufferwatcher = bw
360-
} else if buftype == "grbl" {
361-
// grbl bufferflow
362-
// store port as parent_serport for use in intializing a status query loop for '?'
363-
bw := &BufferflowGrbl{Name: "grbl", parent_serport: p}
364-
bw.Init()
365-
bw.Port = portname
366-
p.bufferwatcher = bw
367-
} else {
368-
bw := &BufferflowDefault{}
369-
bw.Init()
370-
bw.Port = portname
371-
p.bufferwatcher = bw
372-
}
344+
bw := &BufferflowDefault{}
345+
bw.Init()
346+
bw.Port = portname
347+
p.bufferwatcher = bw
373348

374349
sh.register <- p
375350
defer func() { sh.unregister <- p }()
@@ -383,35 +358,6 @@ func spHandlerOpen(portname string, baud int, buftype string, isSecondary bool)
383358
//<-p.done
384359
}
385360

386-
func spHandlerCloseExperimental(p *serport) {
387-
h.broadcastSys <- []byte("Pre-closing serial port " + p.portConf.Name)
388-
p.isClosing = true
389-
//close the port
390-
391-
p.bufferwatcher.Close()
392-
p.portIo.Close()
393-
h.broadcastSys <- []byte("Bufferwatcher closed")
394-
p.portIo.Close()
395-
//elicit response from hardware to close out p.reader()
396-
//_, _ = p.portIo.Write([]byte("?"))
397-
//p.portIo.Read(nil)
398-
399-
//close(p.portIo)
400-
h.broadcastSys <- []byte("portIo closed")
401-
close(p.sendBuffered)
402-
h.broadcastSys <- []byte("p.sendBuffered closed")
403-
close(p.sendNoBuf)
404-
h.broadcastSys <- []byte("p.sendNoBuf closed")
405-
406-
//p.done <- true
407-
408-
// unregister myself
409-
// we already have a deferred unregister in place from when
410-
// we opened. the only thing holding up that thread is the p.reader()
411-
// so if we close the reader we should get an exit
412-
h.broadcastSys <- []byte("Closing serial port " + p.portConf.Name)
413-
}
414-
415361
func spHandlerClose(p *serport) {
416362
// p.isClosing = true
417363
p.done <- true

0 commit comments

Comments
 (0)