/
rdbe.go
61 lines (50 loc) · 1.38 KB
/
rdbe.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
// Copyright 2019 NVI Inc. All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.
package fs
import (
"errors"
"github.com/fatih/structs"
)
func (f *FieldSystem) RdbeNum() int {
return len(f.Fscom.RdbeTsysData[:])
}
func (f *FieldSystem) RdbeMap(index int) (m map[string]interface{}, err error) {
if index < 0 || index >= f.RdbeNum() {
err = errors.New("invalid RDBE id")
return
}
i := int(f.Fscom.RdbeTsysData[index].Iping)
if i < 0 || i >= len(f.Fscom.RdbeTsysData[index].Data) {
err = errors.New("no data available")
return
}
data := f.Fscom.RdbeTsysData[index].Data[i]
m = structs.Map(data)
m["Epoch"] = cstr(data.Epoch[:])
m["PcalAmp"] = data.PcalAmp[:]
m["PcalPhase"] = data.PcalPhase[:]
tsysmap := make([][]float32, len(data.Tsys))
for i := range data.Tsys {
tsysmap[i] = data.Tsys[i][:]
}
m["Tsys"] = tsysmap
return m, nil
}
// Returns a function which returns if RDBE info has been updated
// since last check
func (f *FieldSystem) RdbeUpdatedFn(index int) (func() bool, error) {
if index < 0 || index >= f.RdbeNum() {
return nil, errors.New("invalid RDBE index")
}
i := -1
return func() bool {
j := int(f.Fscom.RdbeTsysData[index].Iping)
if j < 0 || j >= len(f.Fscom.RdbeTsysData[index].Data) || i == j {
i = j // For case when j < 0
return false
}
i = j
return true
}, nil
}