view light8/io.py @ 161:0803fb42109d

we now have TkCueList, which is really cool. it doesn't provide editing we now have TkCueList, which is really cool. it doesn't provide editing yet, but you could almost nearly probably maybe run a show with it. heck, i hope so. some of the shifting/drawing problems were probably fixed. cuelist1 got more bogus data to help populate the TkCueList.
author dmcc
date Mon, 07 Jul 2003 17:18:26 +0000
parents 0459cecf8145
children
line wrap: on
line source



class BaseIO:
    def __init__(self):
        self.dummy=1
        self.__name__ = 'BaseIO'
        # please override and set __name__ to your class name

    def golive(self):
        """call this if you want to promote the dummy object becomes a live object"""
        print "IO: %s is going live" % self.__name__
        self.dummy=0
        # you'd override with additional startup stuff here,
        # perhaps even loading a module and saving it to a class
        # attr so the subclass-specific functions can use it

    def godummy(self):
        print "IO: %s is going dummy" % self.__name__
        self.dummy=1
        # you might override this to close ports, etc
        
    def isdummy(self):
        return self.dummy

    def __repr__(self):
        if self.dummy:
            return "<dummy %s instance>" % self.__name__
        else:
            return "<live %s instance>" % self.__name__

    # the derived class will have more methods to do whatever it does,
    # and they should return dummy values if self.dummy==1.

class ParportDMX(BaseIO):
    def __init__(self, dimmers=68):
        BaseIO.__init__(self)
        self.__name__='ParportDMX'
        self.dimmers = dimmers

    def golive(self):
        BaseIO.golive(self)
        import parport
        self.parport = parport
        self.parport.getparport()
        
    def sendlevels(self, levels):
        if self.dummy:
            return
        
        levels = list(levels) + [0]
        # if levels[14] > 0: levels[14] = 100 # non-dim
        self.parport.outstart()
        for p in range(1, self.dimmers + 2):
            self.parport.outbyte(levels[p-1]*255 / 100)

class SerialPots(BaseIO):
    """
    this is a dummy object (that returns zeros forever) until you call startup()
    which makes it bind to the port, etc
    
    """
    def __init__(self):
        # no init here- call getport() to actually initialize
        self.dummy=1
        self.__name__='SerialPots' # i thought this was automatic!

    def golive(self):
        """
        ls -l /dev/i2c-0
        crw-rw-rw-    1 root     root      89,   0 Jul 11 12:27 /dev/i2c-0
        """
        import serport
        self.serport = serport
        
        self.f = open("/dev/i2c-0","rw")

        # this is for a chip with A0,A1,A2 lines all low:
        port = 72

        from fcntl import *

        I2C_SLAVE = 0x0703  #/* Change slave address                 */
        ioctl(self.f,I2C_SLAVE,port)
        self.dummy=0

    def godummy(self):
        BaseIO.godummy(self)
        self.f.close()

    def getlevels(self):
        if self.dummy:
            return (0,0,0,0)
        else:
            return self.serport.read_all_adc(self.f.fileno())


if __name__=='__main__':
    
    """ tester program that just dumps levels for a while """
    from time import sleep
    from serport import *

    i=0
    while i<100:
        sleep(.033)
        i=i+1

        print read_all_adc(f.fileno())