34 GPIOPort.__init__(self, channelCount)
35 self.
banks = int(channelCount / 8)
38 return register * self.
banks + int(channel / 8)
43 mask = 1 << (channel % 8)
48 d = self.readRegister(addr)
49 return (d & mask) == mask
53 d = self.readRegister(addr)
58 self.writeRegister(addr, d)
62 d = self.readRegister(addr)
63 return self.
IN if (d & mask) == mask
else self.
OUT
66 if not value
in [self.
IN, self.
OUT]:
67 raise ValueError(
"Requested function not supported")
70 d = self.readRegister(addr)
75 self.writeRegister(addr, d)
79 for i
in range(self.
banks):
80 value |= self.readRegister(self.
banks*self.
GPIO+i) << 8*i
84 for i
in range(self.
banks):
85 self.writeRegister(self.
banks*self.
GPIO+i, (value >> 8*i) & 0xFF)
89 I2C.__init__(self,
toint(slave))
90 MCP23XXX.__init__(self, channelCount)
94 return "%s(slave=0x%02X)" % (self.
name, self.
slave)
98 MCP230XX.__init__(self, slave, 8,
"MCP23008")
102 MCP230XX.__init__(self, slave, 8,
"MCP23009")
106 MCP230XX.__init__(self, slave, 16,
"MCP23017")
110 MCP230XX.__init__(self, slave, 16,
"MCP23018")
118 def __init__(self, chip, slave, channelCount, name):
119 SPI.__init__(self,
toint(chip), 0, 8, 10000000)
120 MCP23XXX.__init__(self, channelCount)
129 return "%s(chip=%d, slave=0x%02X)" % (self.
name, self.
chip, self.
slave)
140 MCP23SXX.__init__(self, chip, slave, 8,
"MCP23S08")
144 MCP23SXX.__init__(self, chip, slave, 8,
"MCP23S09")
148 MCP23SXX.__init__(self, chip, slave, 16,
"MCP23S17")
152 MCP23SXX.__init__(self, chip, slave, 16,
"MCP23S18")