-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserialMirror.go
82 lines (70 loc) · 1.51 KB
/
serialMirror.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
package main
import (
"log"
io "fmt"
"serial"
t "time"
)
var (
printf = io.Printf // Closures for refactored code
printfln = io.Println
fatal = log.Fatal
)
func readChars(s *serial.Port, n int) (buff []byte, amount int) {
buff = make([]byte, n)
char := make([]byte, n) // temp "buffer"
amount = 0
for i := 0; i < n; i++ {
n, stat := s.Read(char)
if stat != nil {
return
} else if n > 1 {
buff = char
amount = n
return
} else {
buff[i] = char[0]
amount++
}
}
return
}
func writeChars(s *serial.Port, b []byte, n, tim int) (amount int) {
char := make([]byte, 1)
amount = 0
for i := 0; i < n - 1 ; i++ {
char[0] = b[i]
_, err := s.Write(char)
if err == nil {
printf("written char: %c (hex: %X)\n", char[0], char[0])
t.Sleep(t.Millisecond * t.Duration(tim)) // wait after send
amount++
} else {
return
}
}
return
}
func main() {
c := &serial.Config{Name: "/dev/ttyUSB0", Baud: 9600, ReadTimeout: t.Second * 5}
s, err := serial.OpenPort(c)
if err != nil {
fatal(err)
}
for {
buf := make([]byte, 32)
buf, an := readChars(s, 32)
if an != 0 {
for i := 0; buf[i] != 0x0; i++ {
printf("char: %c (hex: %X; dec: %d)\n", buf[i], buf[i], buf[i])
}
n := writeChars(s, buf, an, 250)
if n != (an - 1) {
printf("Written chars < buff-length (length is %d, written %d)\n", an, n)
}
} else {
println("OK, next;")
}
t.Sleep(t.Duration(250) * t.Millisecond)
}
}