summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rhctl/audio_switch.go4
-rw-r--r--src/rhctl/audio_switch_command.go51
2 files changed, 54 insertions, 1 deletions
diff --git a/src/rhctl/audio_switch.go b/src/rhctl/audio_switch.go
index b3a526e..bb94f61 100644
--- a/src/rhctl/audio_switch.go
+++ b/src/rhctl/audio_switch.go
@@ -153,8 +153,10 @@ func (sw *AudioSwitch) Run() {
case <-stop:
return
case cmd := <-sw.Commands:
+ c := cmd.Cmd.Generate(append(cmd.Args, sw.unit)...)
+ rhdl.Printf("sending '%s' to switch", c)
sw.current = cmd
- sw.port.tx <- cmd.Cmd.Generate(append(cmd.Args, sw.unit)...)
+ sw.port.tx <- c
sw.timer = time.NewTimer(sw.timeout)
case data := <-sw.port.rx:
sw.handleData(data)
diff --git a/src/rhctl/audio_switch_command.go b/src/rhctl/audio_switch_command.go
index e865a90..2aed51f 100644
--- a/src/rhctl/audio_switch_command.go
+++ b/src/rhctl/audio_switch_command.go
@@ -200,12 +200,63 @@ func SwitchCommandParseStatus(args []string) (cmdstr SwitchCmdString, cmdargs []
}
return
}
+func SwitchCommandParseRelay(args []string) (cmdstr SwitchCmdString, cmdargs []interface{}, err error) {
+ if len(args) != 2 {
+ err = fmt.Errorf("wrong number of arguments, expecting: <oc-num> (latch|unlatch|pulse)")
+ return
+ }
+ var num SwitchRelayNum
+ if err = num.FromString(args[0]); err != nil {
+ return
+ }
+ cmdargs = append(cmdargs, num)
+ switch args[1] {
+ case "latch":
+ cmdstr = SwitchCmdRelayLatch
+ case "unlatch":
+ cmdstr = SwitchCmdRelayUnlatch
+ case "pulse":
+ cmdstr = SwitchCmdRelayPulse
+ default:
+ err = fmt.Errorf("unknown operation: '%s', must be one of latch, unlatch, pulse", args[1])
+ return
+ }
+ return
+}
+
+func SwitchCommandParseOC(args []string) (cmdstr SwitchCmdString, cmdargs []interface{}, err error) {
+ if len(args) != 2 {
+ err = fmt.Errorf("wrong number of arguments, expecting: <oc-num> (latch|unlatch|pulse)")
+ return
+ }
+ var num SwitchOCNum
+ if err = num.FromString(args[0]); err != nil {
+ return
+ }
+ cmdargs = append(cmdargs, num)
+ switch args[1] {
+ case "latch":
+ cmdstr = SwitchCmdOCLatch
+ case "unlatch":
+ cmdstr = SwitchCmdOCUnlatch
+ case "pulse":
+ cmdstr = SwitchCmdOCPulse
+ default:
+ err = fmt.Errorf("unknown operation: '%s', must be one of latch, unlatch, pulse", args[1])
+ return
+ }
+ return
+}
func NewSwitchCommandFromStrings(cmd string, args ...string) (c *SwitchCommand, err error) {
c = &SwitchCommand{}
switch cmd {
case "status":
c.Cmd, c.Args, err = SwitchCommandParseStatus(args)
+ case "relay":
+ c.Cmd, c.Args, err = SwitchCommandParseRelay(args)
+ case "oc":
+ c.Cmd, c.Args, err = SwitchCommandParseOC(args)
default:
return nil, fmt.Errorf("unknown command '%s'", cmd)
}