// // dolmetschctl // // // Copyright (C) 2019 Christian Pointner // // This file is part of dolmetschctl. // // dolmetschctl 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. // // dolmetschctl 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 dolmetschctl. If not, see . // package main import ( "time" "spreadspace.org/dolmetschctl/pkg/mixer" ) type Language string type StateMachine struct { mixer *mixer.Mixer selectLangCh chan Language quitCh chan bool exitedCh chan struct{} } func NewStateMachine(m *mixer.Mixer) (*StateMachine, error) { sm := &StateMachine{mixer: m} sm.selectLangCh = make(chan Language, 10) sm.quitCh = make(chan bool, 1) sm.exitedCh = make(chan struct{}) return sm, nil } func (sm *StateMachine) selectLang(l Language) { sm.mixer.UnMute(0x24) sm.mixer.SetLevel(0x24, 42) time.Sleep(2 * time.Second) sm.mixer.Mute(0x24) sm.mixer.SetLevel(0x24, mixer.FaderLevel0db) } func (sm *StateMachine) run() { defer close(sm.exitedCh) for { select { case l := <-sm.selectLangCh: sm.selectLang(l) case <-sm.quitCh: return } } } func (sm *StateMachine) Start() { go sm.run() } func (sm *StateMachine) SelectLanguage(l Language) { sm.selectLangCh <- l } func (sm *StateMachine) Shutdown() { select { case sm.quitCh <- true: default: } <-sm.exitedCh }