/
ir.go
102 lines (78 loc) · 1.72 KB
/
ir.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
101
102
package phidgets
import (
"github.com/samuelkadolph/go/phidgets/raw"
)
type IR struct {
Phidget
Code <-chan IRCode
Learn <-chan IRLearn
RawData <-chan IRRawData
Error <-chan error
rawIR *raw.IR
}
type IRCode raw.IRCode
type IRCodeInfo raw.IRCodeInfo
type IRLearn struct {
Data []byte
CodeInfo IRCodeInfo
}
type IRRawData raw.IRRawData
func NewIR() (*IR, error) {
ir := new(IR)
r, err := raw.NewIR()
if err != nil {
return nil, err
}
if err := ir.initIR(r); err != nil {
return nil, err
}
return ir, nil
}
func (i *IR) GetLastCode() ([]byte, int, error) {
return i.rawIR.GetLastCode()
}
func (i *IR) GetLastLearnedCode() ([]byte, IRCodeInfo, error) {
d, ci, err := i.rawIR.GetLastLearnedCode()
return d, IRCodeInfo(ci), err
}
func (i *IR) GetRawData(max int) ([]int, error) {
return i.rawIR.GetRawData(max)
}
func (i *IR) Transmit(data []byte, info IRCodeInfo) error {
return i.rawIR.Transmit(data, raw.IRCodeInfo(info))
}
func (i *IR) TransmitRaw(data []int, carrierFrequency, dutyCycle, gap int) error {
return i.rawIR.TransmitRaw(data, carrierFrequency, dutyCycle, gap)
}
func (i *IR) TransmitRepeat() error {
return i.rawIR.TransmitRepeat()
}
func (i *IR) initIR(r *raw.IR) error {
i.rawIR = r
if err := i.initPhidget(&r.Phidget); err != nil {
return err
}
code := make(chan IRCode)
learn := make(chan IRLearn)
raw := make(chan IRRawData)
i.Code = code
i.Learn = learn
i.RawData = raw
i.Error = i.rawIR.Error
go func() {
for c := range i.rawIR.Code {
code <- IRCode(c)
}
}()
go func() {
for l := range i.rawIR.Learn {
learn <- IRLearn{l.Data, IRCodeInfo(l.CodeInfo)}
}
}()
go func() {
for r := range i.rawIR.RawData {
raw <- IRRawData(r)
}
}()
return nil
}