Skip to content

Commit 31404f6

Browse files
committed
Value is returned as a struct.
1 parent 0425b38 commit 31404f6

3 files changed

Lines changed: 58 additions & 22 deletions

File tree

cmd/deviceparameter/deviceparameter.go

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import "os"
88
import "log"
99
import "time"
1010
import "encoding/hex"
11+
import "encoding/binary"
12+
import "strconv"
13+
import "bytes"
1114

1215
import "github.com/jessevdk/go-flags"
1316
import "github.com/proactivity-lab/go-loggers"
@@ -33,22 +36,51 @@ func (self HexString) MarshalFlag() (string, error) {
3336
return hex.EncodeToString(self), nil
3437
}
3538

36-
func main() {
39+
func parseValue(opts Options) ([]byte, error) {
40+
buf := new(bytes.Buffer)
41+
if opts.Uint8 {
42+
if v, err := strconv.ParseUint(opts.Value, 10, 8); err != nil {
43+
return nil, err
44+
} else if err = binary.Write(buf, binary.BigEndian, uint8(v)); err != nil {
45+
return nil, err
46+
}
47+
return buf.Bytes(), nil
48+
} else if opts.Uint16 {
49+
if v, err := strconv.ParseUint(opts.Value, 10, 16); err != nil {
50+
return nil, err
51+
} else if err = binary.Write(buf, binary.BigEndian, uint16(v)); err != nil {
52+
return nil, err
53+
}
54+
} else if opts.Uint32 {
55+
if v, err := strconv.ParseUint(opts.Value, 10, 32); err != nil {
56+
return nil, err
57+
} else if err = binary.Write(buf, binary.BigEndian, uint32(v)); err != nil {
58+
return nil, err
59+
}
60+
}
61+
return hex.DecodeString(opts.Value)
62+
}
3763

38-
var opts struct {
39-
Positional struct {
40-
ConnectionString string `description:"Connectionstring sf@HOST:PORT"`
41-
} `positional-args:"yes"`
64+
type Options struct {
65+
Positional struct {
66+
ConnectionString string `description:"Connectionstring sf@HOST:PORT"`
67+
} `positional-args:"yes"`
4268

43-
Group sfconnection.AMGroup `short:"g" long:"group" default:"22" description:"Packet AM Group (hex)"`
69+
Group sfconnection.AMGroup `short:"g" long:"group" default:"22" description:"Packet AM Group (hex)"`
4470

45-
Parameter string `short:"p" long:"parameter" description:"Name of the parameter"`
46-
Value HexString `short:"v" long:"value" description:"Value to set"`
71+
Parameter string `short:"p" long:"parameter" description:"Name of the parameter"`
72+
Value string `short:"v" long:"value" description:"Value to set"`
73+
Uint8 bool `long:"uint8" description:"Value is uint8"`
74+
Uint16 bool `long:"uint16" description:"Value is uint16"`
75+
Uint32 bool `long:"uint32" description:"Value is uint32"`
4776

48-
Debug []bool `short:"D" long:"debug" description:"Debug mode, print raw packets"`
49-
ShowVersion func() `short:"V" long:"version" description:"Show application version"`
50-
}
77+
Debug []bool `short:"D" long:"debug" description:"Debug mode, print raw packets"`
78+
ShowVersion func() `short:"V" long:"version" description:"Show application version"`
79+
}
80+
81+
func main() {
5182

83+
var opts Options
5284
opts.ShowVersion = func() {
5385
if ApplicationBuildDate == "" {
5486
ApplicationBuildDate = "YYYY-mm-dd_HH:MM:SS"
@@ -91,18 +123,22 @@ func main() {
91123

92124
if len(opts.Parameter) > 0 {
93125
if len(opts.Value) > 0 {
94-
logger.Info.Printf("Set %s to %X\n", opts.Parameter, opts.Value)
95-
err := dpm.SetValue(opts.Parameter, opts.Value)
126+
value, err := parseValue(opts)
96127
if err == nil {
97-
logger.Info.Printf("Done\n")
128+
logger.Info.Printf("Set %s to 0x%X\n", opts.Parameter, value)
129+
if val, err := dpm.SetValue(opts.Parameter, value); err == nil {
130+
logger.Info.Printf("%s = %s\n", val.Name, val)
131+
} else {
132+
logger.Info.Printf("Failed: %s\n", err)
133+
}
98134
} else {
99-
logger.Info.Printf("Failed: %s\n", err)
135+
logger.Error.Printf("%s", err)
100136
}
101137
} else {
102138
logger.Info.Printf("Get %s\n", opts.Parameter)
103139
val, err := dpm.GetValue(opts.Parameter)
104140
if err == nil {
105-
logger.Info.Printf("%s = %X\n", opts.Parameter, val)
141+
logger.Info.Printf("%s = %s\n", val.Name, val)
106142
} else {
107143
logger.Info.Printf("Failed: %s\n", err)
108144
}

deviceparameters.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (self *DeviceParameterManager) SetRetries(retries int) {
9191
self.retries = retries
9292
}
9393

94-
func (self *DeviceParameterManager) GetValue(name string) ([]byte, error) {
94+
func (self *DeviceParameterManager) GetValue(name string) (*DeviceParameter, error) {
9595
// Interrupt the run goroutine
9696
self.done <- true
9797

@@ -110,7 +110,7 @@ func (self *DeviceParameterManager) GetValue(name string) ([]byte, error) {
110110
dp, err := self.waitValueId(name)
111111
if err == nil {
112112
go self.run()
113-
return dp.Value, nil
113+
return dp, nil
114114
} else {
115115
result = err
116116
if _, ok := err.(*ParameterError); ok {
@@ -123,7 +123,7 @@ func (self *DeviceParameterManager) GetValue(name string) ([]byte, error) {
123123
return nil, result
124124
}
125125

126-
func (self *DeviceParameterManager) SetValue(name string, value []byte) error {
126+
func (self *DeviceParameterManager) SetValue(name string, value []byte) (*DeviceParameter, error) {
127127
// Interrupt the run goroutine
128128
self.done <- true
129129

@@ -146,7 +146,7 @@ func (self *DeviceParameterManager) SetValue(name string, value []byte) error {
146146
// store in values table
147147
self.values[name] = dp
148148
go self.run()
149-
return nil
149+
return dp, nil
150150
} else {
151151
result = errors.New(fmt.Sprintf("Returned value %X does not match set value %X!", dp.Value, value))
152152
}
@@ -159,7 +159,7 @@ func (self *DeviceParameterManager) SetValue(name string, value []byte) error {
159159
}
160160

161161
go self.run()
162-
return result
162+
return nil, result
163163
}
164164

165165
func (self *DeviceParameterManager) GetList() (chan *DeviceParameter, error) {

deviceparameters_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestDpm(t *testing.T) {
4949
fmt.Printf("%v %v\n", v4, err)
5050

5151
dp.SetTimeout(time.Second)
52-
err = dp.SetValue("radio_channel", []byte{11})
52+
_, err = dp.SetValue("radio_channel", []byte{11})
5353
fmt.Printf("s %v\n", err)
5454

5555
dp.Close()

0 commit comments

Comments
 (0)