-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathconnection.go
executable file
·100 lines (85 loc) · 2.44 KB
/
connection.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
* Whitecat Console
*
* Copyright (C) 2015 - 2016
* IBEROXARXA SERVICIOS INTEGRALES, S.L.
*
* Author: Jaume Olivé (jolive@iberoxarxa.com / jolive@whitecatboard.org)
*
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for any purpose and without fee is hereby
* granted, provided that the above copyright notice appear in all
* copies and that both that the copyright notice and this
* permission notice and warranty disclaimer appear in supporting
* documentation, and that the name of the author not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
*
* The author disclaim all warranties with regard to this
* software, including all implied warranties of merchantability
* and fitness. In no event shall the author be liable for any
* special, indirect or consequential damages or any damages
* whatsoever resulting from loss of use, data or profits, whether
* in an action of contract, negligence or other tortious action,
* arising out of or in connection with the use or performance of
* this software.
*/
package main
import (
"fmt"
"github.com/mikepb/go-serial"
"log"
)
// This channel is used by the create agent for send console output
var ConsoleUp chan byte
// Connected board
var connectedBoard *Board = nil
// This function consumes all chars in ConsoleUp channel.
// This is need for minimize changes in Whitecat Create Agent sources.
func console() {
for {
<-ConsoleUp
}
}
func connect(port string) {
defer func() {
if err := recover(); err != nil {
if err.(error).Error() != "timeout" {
panic(err)
}
} else {
log.Println("board attached")
}
}()
log.Println("connecting to board on", port, "...")
ConsoleUp = make(chan byte, 1024)
go console()
// Open port
info, err := serial.PortByName(port)
if err != nil {
return
}
// Create a candidate board
var candidate Board
// Attach candidate
candidate.attach(info)
if connectedBoard != nil {
if connectedBoard.validFirmware {
connectedBoard.port.Write([]byte("os.shell(false)\r\n"))
connectedBoard.consume()
}
}
return
}
func list_ports() {
// Enumerate all serial ports
ports, err := serial.ListPorts()
if err != nil {
return
}
for _, info := range ports {
fmt.Println(info.Name())
}
}