from hwdev import hwdev;
import pylibi2c;
import time
import logging
#bus = pylibi2c.I2CDevice('/dev/i2c-1'
#read=0: write to register
#read=1: read from register
#read=2: write to register (common in group)
#read=3: wait ms second
def I2C1server(addr,data,reg=None,read=0):
  try:
       if read==3:
           time.sleep(data[0]/1000.)
           return True
#       logging.debug("I2C addr=%s reg=%s data=%s read=%s",addr,reg,data,read)
       bus=pylibi2c.I2CDevice('/dev/i2c-1',addr)
       if read==1:
         length=len(data)
         bus.iaddr_bytes=0
         if not(reg is None):
             bus.ioctl_write(0,str(bytearray([reg])))
         data[:]=[int(x) for x in bus.ioctl_read(0,length)]
       else:
            if reg is None: 
               bus.iaddr_bytes=0
               reg=0;
            bus.ioctl_write(reg,str(bytearray(data)))
       return True;
  except:
       return False;

class pypcc(hwdev):
    def GetVarValue(self,name,value):
        for cname,child in self.children:
            if not(child.GetVarValue(name,value,I2C1server)): return False
        return True  

    def SetVarValue(self,name,value):
        for cname,child in self.children:
            if not(child.SetVarValue(name,value,I2C1server)): return False
        return True  

   
    def CallMethod(self,name,params):
        for cname,child in self.children:
            child.CallMethod(name,params,I2C1server)
        return True;