import kudzu from simpleconfig import SimpleConfigFile from snack import * import os class Mouse (SimpleConfigFile): mice = { "ALPS - GlidePoint (PS/2)" : ("ps/2", "GlidePointPS/2", "psaux", 1), "ASCII - MieMouse (serial)" : ("ms3", "IntelliMouse", "ttyS", 1), "ASCII - MieMouse (PS/2)" : ("ps/2", "NetMousePS/2", "psaux", 1), "ATI - Bus Mouse" : ("Busmouse", "BusMouse", "atibm", 1), "Generic - 2 Button Mouse (serial)" : ("Microsoft", "Microsoft", "ttyS", 1), "Generic - 3 Button Mouse (serial)" : ("Microsoft", "Microsoft", "ttyS", 0), "Generic - 2 Button Mouse (PS/2)" : ("ps/2", "PS/2", "psaux", 1), "Generic - 3 Button Mouse (PS/2)" : ("ps/2", "PS/2", "psaux", 0), "Genius - NetMouse (serial)" : ("ms3", "IntelliMouse", "ttyS", 1), "Genius - NetMouse (PS/2)" : ("netmouse", "NetMousePS/2", "psaux", 1), "Genius - NetMouse Pro (PS/2)" : ("netmouse", "NetMousePS/2", "psaux", 1), "Genius - NetScroll (PS/2)" : ("netmouse", "NetScrollPS/2", "psaux", 1), "Kensington - Thinking Mouse (PS/2)" : ("ps/2", "ThinkingMousePS/2", "psaux", 1), "Logitech - C7 Mouse (serial, old C7 type)" : ("Logitech", "Logitech", "ttyS", 0), "Logitech - CC Series (serial)" : ("logim", "MouseMan", "ttyS", 0), "Logitech - Bus Mouse" : ("Busmouse", "BusMouse", "logibm", 0), "Logitech - MouseMan/FirstMouse (serial)" : ("MouseMan", "MouseMan", "ttyS", 0), "Logitech - MouseMan/FirstMouse (PS/2)" : ("ps/2", "PS/2", "psaux", 0), "Logitech - MouseMan+/FirstMouse+ (serial)" : ("pnp", "IntelliMouse", "ttyS", 0), "Logitech - MouseMan+/FirstMouse+ (PS/2)" : ("ps/2", "MouseManPlusPS/2", "psaux", 0), "Microsoft - Compatible Mouse (serial)" : ("Microsoft", "Microsoft", "ttyS", 1), "Microsoft - Rev 2.1A or higher (serial)" : ("pnp", "Auto", "ttyS", 1), "Microsoft - IntelliMouse (serial)" : ("ms3", "IntelliMouse", "ttyS", 1), "Microsoft - IntelliMouse (PS/2)" : ("imps2", "IMPS/2", "psaux", 1), "Microsoft - Bus Mouse" : ("Busmouse", "BusMouse", "inportbm", 1), "Mouse Systems - Mouse (serial)" : ("MouseSystems", "MouseSystems", "ttyS", 1), "MM - Series (serial)" : ("MMSeries", "MMSeries", "ttyS", 1), "MM - HitTablet (serial)" : ("MMHitTab", "MMHittab", "ttyS", 1), "None - None" : ("none", "none", "null", 0), "Sun - Mouse": ("sun", "sun", "sunmouse", 0), } # XXX fixme - externalize def __init__ (self, xmouseType = None, mouseType = None): self.info = {} self.device = None if (xmouseType): (proto, emulate, device) = xmouseType mouseType = None mice = self.mice.keys() mice.sort() for desc in mice: (gpm, x11, dev, em) = self.mice[desc] # print "trying %s: '%s', '%s'" % (desc, x11, proto) if (x11 == proto and emulate == em): if (desc[:7] == "Generic" or desc[:3] == "Sun"): mouseType = (desc, emulate, device) break self.device = device if not mouseType: raise KeyError, "unknown X11 mouse type %s" % proto if (mouseType): if (len(mouseType) == 3): apply(self.set, mouseType) else: list = kudzu.probe(kudzu.CLASS_MOUSE, kudzu.BUS_UNSPEC, kudzu.PROBE_ONE) if (list): (device, module, desc) = list[0] if device == "sunmouse": self.set("Sun - Mouse", 0) elif device == "psaux": self.set("Generic - 3 Button Mouse (PS/2)", 0) else: self.set("Generic - 2 Button Mouse (serial)", 1) self.device = device else: self.set("Generic - 2 Button Mouse (serial)", 1, 'ttyS0') def available (self): return self.mice def get (self): return (self.info ["FULLNAME"], self.emulate) def __str__(self): if (self.emulate): self.info["XEMU3"] = "yes" else: self.info["XEMU3"] = "no" return SimpleConfigFile.__str__(self) def makeLink(self, root): try: os.unlink(root + "/dev/mouse") except: pass if (self.device): os.symlink(self.device, root + "/dev/mouse") def getDevice(self): return self.device def setDevice(self, device): self.device = device def set (self, mouse, emulateThreeButtons = -1, thedev = None): (gpm, x11, dev, em) = self.mice[mouse] self.info["MOUSETYPE"] = gpm self.info["XMOUSETYPE"] = x11 self.info["FULLNAME"] = mouse if emulateThreeButtons != -1: self.emulate = emulateThreeButtons else: self.emu = em if not self.device and thedev: self.device = thedev if not self.device: self.device = dev