1
1
package serialhandle
2
2
3
3
import (
4
+ "errors"
4
5
"log"
5
6
"math"
6
7
"time"
7
- "errors"
8
+
8
9
"go.bug.st/serial.v1"
9
10
10
- "www.scut-robotlab.cn/git/M3chD09/Robot_Monitor_Web/DataPack"
11
+ datapack "www.scut-robotlab.cn/git/M3chD09/Robot_Monitor_Web/DataPack"
11
12
)
12
13
13
14
type testPort struct {
14
15
readingAddresses []uint32
15
- createdTime time.Time
16
+ createdTime time.Time
16
17
}
17
18
18
19
func newTestPort () serial.Port {
19
20
return & testPort {
20
21
readingAddresses : []uint32 {},
21
- createdTime : time .Now (),
22
+ createdTime : time .Now (),
22
23
}
23
24
}
24
25
25
26
func (tp * testPort ) SetMode (mode * serial.Mode ) error { return nil }
26
27
27
28
func testValue (x float64 , addr uint32 ) float64 {
28
29
waveform := addr >> 24
29
- freq := (float64 ((addr >> 8 ) & 0xFF ) - 0x80 ) / 16.0
30
+ freq := (float64 ((addr >> 8 ) & 0xFF ) - 0x80 ) / 16.0
30
31
freq = math .Exp (freq )
31
- phase := float64 (addr & 0xFF ) / 0xFF
32
- amplitude := float64 ((addr >> 16 ) & 0xFF ) / 16.0
32
+ phase := float64 (addr & 0xFF ) / 0xFF
33
+ amplitude := float64 ((addr >> 16 )& 0xFF ) / 16.0
33
34
amplitude = math .Exp (amplitude )
34
- currentPhase := x * freq + phase
35
+ currentPhase := x * freq + phase
35
36
var scale float64
36
37
switch waveform {
37
38
case 1 : // square
38
- if currentPhase - math .Floor (currentPhase ) < 0.5 {
39
+ if currentPhase - math .Floor (currentPhase ) < 0.5 {
39
40
scale = 1.0
40
41
} else {
41
42
scale = - 1.0
@@ -58,7 +59,7 @@ func (tp *testPort) Read(p []byte) (n int, err error) {
58
59
}
59
60
60
61
for i , addr := range addresses {
61
- s := p [16 * i : 16 * (i + 1 )]
62
+ s := p [16 * i : 16 * (i + 1 )]
62
63
s [0 ] = 1 // board
63
64
s [1 ] = 2 // ???
64
65
s [2 ] = 8 // typeLen
@@ -72,22 +73,30 @@ func (tp *testPort) Read(p []byte) (n int, err error) {
72
73
}
73
74
74
75
func (tp * testPort ) Write (p []byte ) (n int , err error ) {
75
- if len (p ) != 16 { return 0 , errors .New ("Invalid len" ) }
76
- if p [len (p ) - 1 ] != '\n' { return 0 , errors .New ("Invalid package" ) }
76
+ if len (p ) != 16 {
77
+ return 0 , errors .New ("Invalid len" )
78
+ }
79
+ if p [len (p )- 1 ] != '\n' {
80
+ return 0 , errors .New ("Invalid package" )
81
+ }
77
82
78
83
board := p [0 ]
79
- if board != 1 { return 0 , errors .New ("Invalid board" ) }
84
+ if board != 1 {
85
+ return 0 , errors .New ("Invalid board" )
86
+ }
80
87
act := p [1 ]
81
88
typeLen := p [2 ]
82
- if typeLen != 8 { return 0 , errors .New ("Unsupported typeLen" ) }
89
+ if typeLen != 8 {
90
+ return 0 , errors .New ("Unsupported typeLen" )
91
+ }
83
92
address := datapack .BytesToUint32 (p [3 :7 ])
84
93
85
94
switch act {
86
- case datapack .ACT_READ :
95
+ case datapack .ACT_SUBSCRIBE :
87
96
tp .readingAddresses = append (tp .readingAddresses , address )
88
97
log .Printf ("Adding address: %08X\n " , address )
89
98
break
90
- case datapack .ACT_UNREAD :
99
+ case datapack .ACT_UNSUBSCRIBE :
91
100
var newAddresses []uint32
92
101
for _ , addr := range tp .readingAddresses {
93
102
if addr != address {
@@ -111,6 +120,8 @@ func (tp *testPort) SetDTR(dtr bool) error { return errors.New("Not supported")
111
120
112
121
func (tp * testPort ) SetRTS (rts bool ) error { return errors .New ("Not supported" ) }
113
122
114
- func (tp * testPort ) GetModemStatusBits () (* serial.ModemStatusBits , error ) { return nil , errors .New ("Not supported" ) }
123
+ func (tp * testPort ) GetModemStatusBits () (* serial.ModemStatusBits , error ) {
124
+ return nil , errors .New ("Not supported" )
125
+ }
115
126
116
127
func (tp * testPort ) Close () error { return nil }
0 commit comments