summaryrefslogtreecommitdiff
path: root/src/rhctl/audio_switch_command.go
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2016-03-30 05:10:53 (GMT)
committerChristian Pointner <equinox@spreadspace.org>2016-03-30 05:10:53 (GMT)
commitb2884f87b7a62dafabab754e1e64ea338e02d145 (patch)
treedcedbdbf7b4fb51b61ed3a74bff7a132879d2af5 /src/rhctl/audio_switch_command.go
parent1d0d0aea92c936bca8de0653b4c92a9bfd73f05c (diff)
added generator for switch commands
Diffstat (limited to 'src/rhctl/audio_switch_command.go')
-rw-r--r--src/rhctl/audio_switch_command.go173
1 files changed, 173 insertions, 0 deletions
diff --git a/src/rhctl/audio_switch_command.go b/src/rhctl/audio_switch_command.go
new file mode 100644
index 0000000..693689c
--- /dev/null
+++ b/src/rhctl/audio_switch_command.go
@@ -0,0 +1,173 @@
+//
+// rhctl
+//
+// Copyright (C) 2009-2016 Christian Pointner <equinox@helsinki.at>
+//
+// This file is part of rhctl.
+//
+// rhctl is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// any later version.
+//
+// rhctl is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with rhctl. If not, see <http://www.gnu.org/licenses/>.
+//
+
+package main
+
+import (
+ "fmt"
+ "strconv"
+ "strings"
+)
+
+type SwitchUnitID uint
+
+func (u SwitchUnitID) String() string {
+ return strconv.FormatUint(uint64(u), 10)
+}
+
+func (u *SwitchUnitID) FromString(str string) error {
+ vuint, err := strconv.ParseUint(str, 10, 32)
+ if err != nil {
+ return err
+ }
+ if vuint > 3 {
+ return fmt.Errorf("switch unit ID is out of range")
+ }
+ *u = SwitchUnitID(vuint)
+ return nil
+}
+
+func (u *SwitchUnitID) UnmarshalTOML(data []byte) error {
+ return u.FromString(string(data))
+}
+
+type SwitchInputNum uint
+
+func (i SwitchInputNum) String() string {
+ return strconv.FormatUint(uint64(i), 10)
+}
+
+func (i *SwitchInputNum) FromString(str string) error {
+ vuint, err := strconv.ParseUint(str, 10, 32)
+ if err != nil {
+ return err
+ }
+ if vuint < 1 || vuint > 8 {
+ return fmt.Errorf("switch input number is out of range")
+ }
+ *i = SwitchInputNum(vuint)
+ return nil
+}
+
+type SwitchOutputNum uint
+
+func (o SwitchOutputNum) String() string {
+ return strconv.FormatUint(uint64(o), 10)
+}
+
+func (o *SwitchOutputNum) FromString(str string) error {
+ vuint, err := strconv.ParseUint(str, 10, 32)
+ if err != nil {
+ return err
+ }
+ if vuint < 1 || vuint > 2 {
+ return fmt.Errorf("switch output number is out of range")
+ }
+ *o = SwitchOutputNum(vuint)
+ return nil
+}
+
+type SwitchRelayNum uint
+
+func (r SwitchRelayNum) String() string {
+ return strconv.FormatUint(uint64(r), 10)
+}
+
+func (r *SwitchRelayNum) FromString(str string) error {
+ vuint, err := strconv.ParseUint(str, 10, 32)
+ if err != nil {
+ return err
+ }
+ if vuint < 1 || vuint > 8 {
+ return fmt.Errorf("switch relay number is out of range")
+ }
+ *r = SwitchRelayNum(vuint)
+ return nil
+}
+
+type SwitchOCNum uint
+
+func (o SwitchOCNum) String() string {
+ return strconv.FormatUint(uint64(o), 10)
+}
+
+func (o *SwitchOCNum) FromString(str string) error {
+ vuint, err := strconv.ParseUint(str, 10, 32)
+ if err != nil {
+ return err
+ }
+ if vuint < 1 || vuint > 8 {
+ return fmt.Errorf("switch OC number is out of range")
+ }
+ *o = SwitchOCNum(vuint)
+ return nil
+}
+
+type SwitchCmdString string
+
+const (
+ SwitchCmdStatusAudio SwitchCmdString = "*uSL"
+ SwitchCmdStatusGPI SwitchCmdString = "*uSPA"
+ SwitchCmdStatusOC SwitchCmdString = "*uSO"
+ SwitchCmdStatusRelay SwitchCmdString = "*uSR"
+ SwitchCmdStatusSilence SwitchCmdString = "*uSS"
+
+ SwitchCmdAudioSelectInput SwitchCmdString = "*uiio"
+ SwitchCmdAudioSelectInputAll SwitchCmdString = "*uiiA"
+ SwitchCmdAudioAddInputTo1 SwitchCmdString = "*uii3"
+ SwitchCmdAudioAddInputTo2 SwitchCmdString = "*uii4"
+ SwitchCmdAudioRemoveInputFrom1 SwitchCmdString = "*uii5"
+ SwitchCmdAudioRemoveInputFrom2 SwitchCmdString = "*uii6"
+ SwitchCmdAudioMuteInput SwitchCmdString = "*uiiMo"
+ SwitchCmdAudioMuteInputAll SwitchCmdString = "*uiiMA"
+ SwitchCmdAudioMuteOutput SwitchCmdString = "*uMo"
+ SwitchCmdAudioMuteOutputAll SwitchCmdString = "*uMA"
+
+ SwitchCmdAudioFadeUpInput SwitchCmdString = "*uFUii"
+ SwitchCmdAudioFadeDownInput SwitchCmdString = "*uFDii"
+
+ SwitchCmdOCUnlatch SwitchCmdString = "*uOOcF"
+ SwitchCmdOCLatch SwitchCmdString = "*uOOcL"
+ SwitchCmdOCPulse SwitchCmdString = "*uOOcP"
+
+ SwitchCmdRelayUnlatch SwitchCmdString = "*uORrF"
+ SwitchCmdRelayLatch SwitchCmdString = "*uORrL"
+ SwitchCmdRelayPulse SwitchCmdString = "*uORrP"
+)
+
+func (c SwitchCmdString) Generate(args ...interface{}) string {
+ s := string(c)
+ for _, arg := range args {
+ switch arg.(type) {
+ case SwitchUnitID:
+ s = strings.Replace(s, "u", fmt.Sprintf("%1d", arg.(SwitchUnitID)), -1)
+ case SwitchInputNum:
+ s = strings.Replace(s, "ii", fmt.Sprintf("%02d", arg.(SwitchInputNum)), -1)
+ case SwitchOutputNum:
+ s = strings.Replace(s, "o", fmt.Sprintf("%1d", arg.(SwitchOutputNum)), -1)
+ case SwitchRelayNum:
+ s = strings.Replace(s, "r", fmt.Sprintf("%1d", arg.(SwitchRelayNum)), -1)
+ case SwitchOCNum:
+ s = strings.Replace(s, "c", fmt.Sprintf("%1d", arg.(SwitchOCNum)), -1)
+ }
+ }
+ return s
+}