""" Setup utility for bktr and tuner (stand-alone) """ ## MODULE IMPORTS AND SEARCH PATH ######################################## import commands, os, sys KBTV_MAINPATH = os.path.dirname(os.path.abspath(sys.argv[0])) if not KBTV_MAINPATH in sys.path: sys.path.append(KBTV_MAINPATH) import btcopyright, bthardware ## KBTV COPYRIGHT ######################################################## KBTV_AUTHOR = btcopyright.MY_NAME KBTV_AUTHOR_EMAIL = btcopyright.MY_EMAIL KBTV_COPYRIGHT = btcopyright.MY_COPYRIGHT KBTV_LICENSE = btcopyright.BSD_LICENSE KBTV_LICENSE_TEXT = btcopyright.BSD_LICENSE_TEXT ## CONSTANTS ############################################################# BKTR, SAA, SND, PWC = 0, 1, 2, 3 PROMPT = "btsetup> " COMMANDS = ("help", "show", "adduser", "kldload", "sysctl", "commit", "quit") HELPTEXT = """help - Show this help text show [cards|tuners|cameras|users] - Show config or list cards/tuners/cams/users adduser - Add user to operator group by login or UID kldload - Load the bktr/saa/pwc/snd_driver module sysctl value - Set the sysctl for bktr card/tuner to value commit - Commit/write the config quit - Quit btsetup""" ## BEGIN FUNCTIONS ####################################################### exit = False def testRoot(): """ Test for root, returns True if we are UID 0 """ return (os.getuid() == 0) def rootMsg(): """ Prints "You must be root" """ print "You must be root" def failedMsg(op): """ Prints "Operation failed " """ print "Operation failed", op def showCards(): """ Prints a numbered list of TV cards for both bktr and saa """ print "BKTR cards" print "==========" i = 0 while i < len(bthardware.BKTR_CARDS): print str(i).rjust(2), bthardware.BKTR_CARDS[i] i += 1 print "\nSAA cards" print "=========" i = 0 while i < len(bthardware.SAA_CARDS): print str(i).rjust(2), bthardware.SAA_CARDS[i] i += 1 def showTuners(): """ Prints a numbered list of tuner types for both bktr and saa """ print "BKTR tuners" print "===========" i = 0 while i < len(bthardware.BKTR_TUNERS): print str(i).rjust(2), bthardware.BKTR_TUNERS[i] i += 1 print "\nSAA tuners" print "==========" i = 0 while i < len(bthardware.SAA_TUNERS): print str(i).rjust(2), bthardware.SAA_TUNERS[i] i += 1 def showCameras(): """ Prints a numbered list of camera products/models for pwc """ print "PWC cameras" print "===========" i = 0 while i < len(bthardware.PWC_PRODUCTS): print str(i).rjust(2), bthardware.PWC_PRODUCTS[i][1] i += 1 def showConfig(): """ Prints current config """ txt = "BKTR - BrookTree/Conexant BT8x8 based cards" txt += "\n" txt += "===================================================================" txt += "\n" txt += "BKTR MODULE LOADED........... " if bthardware.bktr_module_loaded(): txt += "Yes" else: txt += "No" txt += "\n" txt += "BKTR DEVICE PERMISSIONS...... " res = bthardware.bktr_access() if not (res[0] and res[1]): txt += "Not OK" else: txt += "OK" txt += "\n" txt += "BKTR CAPTURE CHIP............ " res = bthardware.bktr_chip() if res: txt += res else: txt += "None" txt += "\n" res = bthardware.bktr_card_tuner() txt += "BKTR TV CARD................. " txt += res[0] txt += "\n" txt += "BKTR TUNER TYPE.............. " txt += res[1] txt += "\n\n" txt += "SAA - Philips SAA713x based cards" txt += "\n" txt += "===================================================================" txt += "\n" txt += "SAA MODULE LOADED............ " if bthardware.saa_module_loaded(): txt += "Yes" else: txt += "No" txt += "\n" txt += "SAA DEVICE PERMISSIONS....... " res = bthardware.saa_access() if not (res[0] and res[1]): txt += "Not OK" else: txt += "OK" txt += "\n" txt += "SAA CAPTURE CHIP............. " res = bthardware.saa_chip() if res: txt += res else: txt += "None" txt += "\n" res = bthardware.saa_card_tuner() txt += "SAA TV CARD.................. " txt += res[0] txt += "\n" txt += "SAA TUNER TYPE............... " txt += res[1] txt += "\n\n" txt += "PWC - Philips and compatible USB webcams" txt += "\n" txt += "===================================================================" txt += "\n" txt += "PWC MODULE LOADED............ " if bthardware.pwc_module_loaded(): txt += "Yes" else: txt += "No" txt += "\n" txt += "PWC DEVICE PERMISSIONS....... " if not bthardware.pwc_access(): txt += "Not OK" else: txt += "OK" txt += "\n" res = bthardware.pwc_vendor_product() txt += "PWC CAMERA VENDOR............ " txt += res[0] txt += "\n" txt += "PWC CAMERA MODEL............. " txt += res[1] txt += "\n\n" txt += "SOUND - Sound card" txt += "\n" txt += "===================================================================" txt += "\n" txt += "SND MODULE LOADED............ " if not bthardware.snd_module_loaded(): txt += "No" else: txt += "Yes" txt += "\n" txt += "AUDIO CHIP................... " res = bthardware.snd_chip() if res: txt += res else: txt += "None" print txt def showUsers(): """ Prints a list of members of the operator group """ res = commands.getoutput("pw groupshow operator") res = res.split(":")[-1].split(",") if res: for item in res: print item def addUser(uid): """ Adds a user to operator group """ if testRoot(): if not bthardware.bktr_user_add(uid): failedMsg("bktr_user_add") else: rootMsg() def overrideCard(sysctl): """ Sets a sysctl for bktr TV card, hw.bt848.card (-1..18) """ if testRoot(): scard, stuner = bthardware.bktr_sysctls() if not bthardware.bktr_sysctls_set(sysctl, stuner): failedMsg("bktr_sysctls_set") else: rootMsg() def overrideTuner(sysctl): """ Sets a sysctl for bktr tuner, hw.bt848.tuner (-1..14) """ if testRoot(): scard, stuner = bthardware.bktr_sysctls() if not bthardware.bktr_sysctls_set(scard, sysctl): failedMsg("bktr_sysctls_set") else: rootMsg() def commitConfig(): """ Commits changes to the system """ if testRoot(): # Set up permissions, restart devfs if bthardware.bktr_access_commit(): # Test if not bthardware.bktr_access(): failedMsg("bktr_access") else: failedMsg("bktr_access_commit") if bthardware.bktr_module_loaded(): if not bthardware.bktr_module_commit(): failedMsg("bktr_module_commit") if bthardware.snd_module_loaded(): if not bthardware.snd_module_commit(): failedMsg("snd_module_commit") s = bthardware.bktr_sysctls() if (s[0] != -1 or s[1] != -1): if not bthardware.bktr_sysctls_commit(): failedMsg("bktr_sysctls_commit") # If they have saa the module must be loaded if bthardware.saa_module_loaded(): if bthardware.saa_access_commit(): if not bthardware.saa_access(): failedMsg("saa_access") else: failedMsg("saa_access_commit") if not bthardware.saa_module_commit(): failedMsg("saa_module_commit") # If they have pwc the module must be loaded if bthardware.pwc_module_loaded(): if bthardware.pwc_access_commit(): if not bthardware.pwc_access(): failedMsg("pwc_access") else: failedMsg("pwc_access_commit") if not bthardware.pwc_module_commit(): failedMsg("pwc_module_commit") else: rootMsg() def loadModule(mod): """ Tries loading module mod, where mod is BKTR, SAA, SND, or PWC """ if testRoot(): if mod == BKTR: if not bthardware.bktr_module_try(): failedMsg("bktr_module_try") elif mod == SAA: if not bthardware.saa_module_try(): failedMsg("saa_module_try") elif mod == SND: if not bthardware.snd_module_try(): failedMsg("snd_module_try") elif mod == PWC: if not bthardware.pwc_module_try(): failedMsg("pwc_module_try") else: failedMsg(mod + " invalid") else: rootMsg() def main(): """ Main function. Keeps displaying the btcontrol prompt and shows output when commands are issued. Defaults to help text output. """ cmd = raw_input(PROMPT).split() if not cmd: print HELPTEXT main() if cmd[0].lower() in COMMANDS: if len(cmd) == 1: if cmd[0].lower() == "show": showConfig() main() elif cmd[0].lower() == "commit": commitConfig() main() elif cmd[0].lower() == "quit": sys.exit(0) else: print HELPTEXT main() if len(cmd) == 2: if cmd[0] == "show": if cmd[1].lower() == "cards": showCards() main() elif cmd[1].lower() == "tuners": showTuners() main() elif cmd[1].lower() == "cameras": showCameras() main() elif cmd[1].lower() == "users": showUsers() main() else: print HELPTEXT main() elif cmd[0] == "adduser": addUser(cmd[1]) main() elif cmd[0] == "kldload": if cmd[1].lower() == "bktr": loadModule(BKTR) main() elif cmd[1].lower() == "saa": loadModule(SAA) main() elif cmd[1].lower() == "pwc": loadModule(PWC) main() elif cmd[1].lower() == "snd": loadModule(SND) main() else: print HELPTEXT main() else: print HELPTEXT main() if len(cmd) == 3: if cmd[0] == "sysctl": if cmd[1].lower() == "card": overrideCard(int(cmd[2])) main() if cmd[1].lower() == "tuner": overrideTuner(int(cmd[2])) main() else: print HELPTEXT main() else: print HELPTEXT main() else: print HELPTEXT main() ## END ################################################################### if __name__ == "__main__": main()