71 I2C.__init__(self,
toint(slave))
72 GPIOPort.__init__(self, self.CHANNELS)
79 return "PCA9555(slave=0x%02X)" % self.slave
85 if self.FUNCTIONS[channel] == self.OUT:
90 (addr, mask) = self.__getChannel__(reg_base, channel)
91 d = self.readRegister(addr)
92 return (d & mask) == mask
95 (addr, mask) = self.__getChannel__(self.OP0, channel)
96 d = self.readRegister(addr)
101 self.writeRegister(addr, d)
104 return self.FUNCTIONS[channel]
107 if not value
in [self.IN, self.OUT]:
108 raise ValueError(
"Requested function not supported")
110 (addr, mask) = self.__getChannel__(self.CP0, channel)
111 d = self.readRegister(addr)
116 self.writeRegister(addr, d)
118 self.FUNCTIONS[channel] = value
119 self.__updateInputMask__()
123 ipdata = self.readRegisters(self.IP0, self.BANKS)
125 for i
in range(self.BANKS):
126 ipvalue |= ipdata[i] << 8*i
128 opdata = self.readRegisters(self.OP0, self.BANKS)
130 for i
in range(self.BANKS):
131 opvalue |= opdata[i] << 8*i
133 (ipmask, opmask) = self.__getFunctionMasks__()
134 return (ipvalue & ipmask) | (opvalue & opmask)
137 data = bytearray(self.BANKS)
138 for i
in range(self.BANKS):
139 data[i] = (value >> 8*i) & 0xFF
140 self.writeRegisters(self.OP0, data)
146 self.__resetFunctions__()
147 self.__resetOutputs__()
154 self.writeRegisters(self.CP0, bytearray([self.CP_DEFAULT
for i
in range (self.BANKS)]))
155 self.FUNCTIONS = [self.IN
for i
in range(self.CHANNELS)]
156 self.__updateInputMask__()
160 self.writeRegisters(self.OP0, bytearray([self.OP_DEFAULT
for i
in range (self.BANKS)]))
164 return register + int(channel / 8)
167 self.checkDigitalChannel(channel)
168 addr = self.__getAddress__(register, channel)
169 mask = 1 << (channel % 8)
173 channels = self.digitalChannelCount
175 for i
in range (channels):
176 if self.FUNCTIONS[i] == self.IN:
177 self.INPUTMASK |= 1 << i
180 channels = self.digitalChannelCount
181 inputMask = self.INPUTMASK
182 return (inputMask, (~inputMask & ((1 << channels) - 1) ))
191 PCA9555.__init__(self,
toint(slave))
197 return "PCA9535(slave=0x%02X)" % self.
slave