Rewrite, simplification of command line option parsing. Many GUI
fixes. Input sources are mutually exclusive.
diff --git a/Tools/audiopy/audiopy b/Tools/audiopy/audiopy
index 178b11f..2f3f00a 100755
--- a/Tools/audiopy/audiopy
+++ b/Tools/audiopy/audiopy
@@ -61,14 +61,14 @@
#
# where does input come from?
frame = Frame(root, bd=1, relief=RAISED)
- frame.grid(row=0, column=0)
+ frame.grid(row=0, column=0, sticky='NSEW')
label = Label(frame, text='Input From:')
label.grid(row=0, column=0, sticky=E)
- self.__micvar = IntVar()
- btn = Checkbutton(frame,
+ self.__inputvar = IntVar()
+ btn = Radiobutton(frame,
text='Microphone',
- variable=self.__micvar,
- onvalue=MICROPHONE,
+ variable=self.__inputvar,
+ value=MICROPHONE,
command=self.__pushtodev,
underline=0)
btn.grid(row=0, column=1, sticky=W)
@@ -78,11 +78,10 @@
btn.configure(state=DISABLED)
buttons.append(btn)
##
- self.__lineinvar = IntVar()
- btn = Checkbutton(frame,
+ btn = Radiobutton(frame,
text='Line In',
- variable=self.__lineinvar,
- onvalue=LINE_IN,
+ variable=self.__inputvar,
+ value=LINE_IN,
command=self.__pushtodev,
underline=5)
btn.grid(row=1, column=1, sticky=W)
@@ -92,11 +91,10 @@
btn.configure(state=DISABLED)
buttons.append(btn)
##
- self.__cdvar = IntVar()
- btn = Checkbutton(frame,
+ btn = Radiobutton(frame,
text='CD',
- variable=self.__cdvar,
- onvalue=CD,
+ variable=self.__inputvar,
+ value=CD,
command=self.__pushtodev,
underline=0)
btn.grid(row=2, column=1, sticky=W)
@@ -108,7 +106,7 @@
#
# where does output go to?
frame = Frame(root, bd=1, relief=RAISED)
- frame.grid(row=1, column=0)
+ frame.grid(row=1, column=0, sticky='NSEW')
label = Label(frame, text='Output To:')
label.grid(row=0, column=0, sticky=E)
self.__spkvar = IntVar()
@@ -181,10 +179,8 @@
except AttributeError:
pass
else:
- import struct
import fcntl
import signal
- import FCNTL
import STROPTS
# set up the signal handler
signal.signal(signal.SIGPOLL, self.__update)
@@ -207,21 +203,19 @@
# underlying module does not support the SIGPOLL notification
# interface.
info = self.__devctl.getinfo()
+ # input
+ self.__inputvar.set(info.i_port)
+ # output
self.__spkvar.set(info.o_port & SPEAKER)
self.__headvar.set(info.o_port & HEADPHONE)
self.__linevar.set(info.o_port & LINE_OUT)
- self.__micvar.set(info.i_port & MICROPHONE)
- self.__lineinvar.set(info.i_port & LINE_IN)
- self.__cdvar.set(info.i_port & CD)
def __pushtodev(self, event=None):
info = self.__devctl.getinfo()
info.o_port = self.__spkvar.get() + \
self.__headvar.get() + \
self.__linevar.get()
- info.i_port = self.__micvar.get() + \
- self.__lineinvar.get() + \
- self.__cdvar.get()
+ info.i_port = self.__inputvar.get()
self.__devctl.setinfo(info)
def __getset(self, var, onvalue):
@@ -232,15 +226,13 @@
self.__pushtodev()
def __mic(self, event=None):
- self.__getset(self.__micvar, MICROPHONE)
+ self.__getset(self.__inputvar, MICROPHONE)
def __linein(self, event=None):
- self.__getset(self.__lineinvar, LINE_IN)
+ self.__getset(self.__inputvar, LINE_IN)
def __cd(self, event=None):
- print 'pre:', self.__cdvar.get()
- self.__getset(self.__cdvar, CD)
- print 'post:', self.__cdvar.get()
+ self.__getset(self.__inputvar, CD)
def __speaker(self, event=None):
self.__getset(self.__spkvar, SPEAKER)
@@ -286,113 +278,47 @@
('--speaker', '-s', 1, SPEAKER),
('--lineout', '-o', 1, LINE_OUT),
)
- values = []
info = device.getinfo()
# first get the existing values
- for long, short, io, mask in options:
- if io == 0:
- flags = info.i_port
- else:
- flags = info.o_port
- values.append(flags & mask)
-
- sval = None
- hval = None
- lval = None
for arg in sys.argv[1:]:
if arg in ('-h', '--help'):
usage(code=0)
- # SPEAKER
- elif arg in ('-s', '--speaker'):
- sval = -1
- elif arg[:3] == '-s=':
+ # does not return
+ for long, short, io, mask in options:
+ if arg in (long, short):
+ # toggle the option
+ if io == 0:
+ info.i_port = info.i_port ^ mask
+ else:
+ info.o_port = info.o_port ^ mask
+ break
+ val = None
try:
- sval = int(arg[3:])
+ if arg[:len(long)+1] == long+'=':
+ val = int(arg[len(long)+1:])
+ elif arg[:len(short)+1] == short+'=':
+ val = int(arg[len(short)+1:])
except ValueError:
- pass
- if sval <> 0 and sval <> 1:
- usage('Invalid option: ' + arg)
- elif arg[:10] == '--speaker=':
- try:
- sval = int(arg[10:])
- except ValueError:
- pass
- if sval <> 0 and sval <> 1:
- usage('Invalid option: ' + arg)
- # HEADPHONES
- elif arg in ('-p', '--headphones'):
- hval = -1
- elif arg[:3] == '-p=':
- try:
- hval = int(arg[3:])
- except ValueError:
- pass
- if hval <> 0 and hval <> 1:
- usage('Invalid option: ' + arg)
- elif arg[:13] == '--headphones=':
- try:
- hval = int(arg[130:])
- except ValueError:
- pass
- if hval <> 0 and hval <> 1:
- usage('Invalid option: ' + arg)
- # LINEOUT
- elif arg in ('-l', '--lineout'):
- lval = -1
- elif arg[:3] == '-l=':
- try:
- lval = int(arg[3:])
- except ValueError:
- pass
- if lval <> 0 and lval <> 1:
- usage('Invalid option: ' + arg)
- elif arg[:10] == '--lineout=':
- try:
- lval = int(arg[10:])
- except ValueError:
- pass
- if lval <> 0 and lval <> 1:
- usage('Invalid option: ' + arg)
+ usage(msg='Invalid option: ' + arg)
+ # does not return
+ if val == 0:
+ if io == 0:
+ info.i_port = info.i_port & ~mask
+ else:
+ info.o_port = info.o_port & ~mask
+ break
+ elif val == 1:
+ if io == 0:
+ info.i_port = info.i_port | mask
+ else:
+ info.o_port = info.o_port | mask
+ break
+ # else keep trying next option
else:
- usage('Invalid option: ' + arg)
+ usage(msg='Invalid option: ' + arg)
# now set the values
- try:
- devctl = sunaudiodev.open('control')
- info = devctl.getinfo()
- if sval is not None:
- if sval == -1:
- if info.o_port & SPEAKER:
- sval = 0
- else:
- sval = SPEAKER
- else:
- sval = sval * SPEAKER
- else:
- sval = info.o_port & SPEAKER
- if hval is not None:
- if hval == -1:
- if info.o_port & HEADPHONE:
- hval = 0
- else:
- hval = HEADPHONE
- else:
- hval = hval * HEADPHONE
- else:
- hval = info.o_port & HEADPHONE
- if lval is not None:
- if lval == -1:
- if info.o_port & LINE_OUT:
- lval = 0
- else:
- lval = LINE_OUT
- else:
- lval = lval * LINE_OUT
- else:
- lval = info.o_port & LINE_OUT
- info.o_port = sval + hval + lval
- devctl.setinfo(info)
- finally:
- devctl.close()
+ device.setinfo(info)
+ device.close()