blob: 7cf6302011a542d687e42d92503a0c389d9e374c [file] [log] [blame]
# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests usage of i2c interface for beaglebone devices."""
import mox
import unittest
import bbi2c
DEFAULT_BUS_NUM = 3
SLAVE_ADDRESS = 0x20
DATA_ADDRESS = 0x0
class TestBBi2c(mox.MoxTestBase):
def setUp(self):
super(TestBBi2c, self).setUp()
bbi2c.subprocess = self.mox.CreateMockAnything()
bbi2c.bbmux_controller = self.mox.CreateMockAnything()
bbi2c.bbmux_controller.use_omapmux().AndReturn(True)
def readTestHelper(self, data, send_address=True):
if send_address:
self.singleWriteTestHelper([DATA_ADDRESS])
args = ['i2cget', '-y', '3', '0x20']
if len(data) == 2:
args.append('0x%02x' % DATA_ADDRESS)
args.append('w')
result = '0x' + ''.join('%02x' % byte for byte in reversed(data))
bbi2c.subprocess.check_output(args).AndReturn(result)
def singleWriteTestHelper(self, data):
args = ['i2cset', '-y', '3', '0x20', '0x%02x' % data[0]]
if data[1:]:
reversed_data = reversed(data[1:])
args.append('0x' + ''.join('%02x' % wbyte for wbyte in reversed_data))
if len(data[1:]) == 2:
args.append('w')
bbi2c.subprocess.check_call(args)
def testSingleByteRead(self):
data = [0x10]
self.readTestHelper(data)
self.mox.ReplayAll()
self.bbi2c = bbi2c.BBi2c({'bus_num': 2})
result = self.bbi2c.wr_rd(SLAVE_ADDRESS, [DATA_ADDRESS], len(data))
self.assertEquals(result, data)
def testMultiByteRead(self):
data = [0x10, 0x01]
self.readTestHelper(data)
self.mox.ReplayAll()
self.bbi2c = bbi2c.BBi2c({'bus_num': 2})
result = self.bbi2c.wr_rd(SLAVE_ADDRESS, [DATA_ADDRESS], len(data))
self.assertEquals(result, data)
def testSingleByteWrite(self):
data = [0x7]
self.singleWriteTestHelper(data)
self.mox.ReplayAll()
self.bbi2c = bbi2c.BBi2c({'bus_num': 2})
self.bbi2c.wr_rd(SLAVE_ADDRESS, data, 0)
def testTwoByteWrite(self):
data = [0x7, 0x8]
self.singleWriteTestHelper(data)
self.mox.ReplayAll()
self.bbi2c = bbi2c.BBi2c({'bus_num': 2})
self.bbi2c.wr_rd(SLAVE_ADDRESS, data, 0)
def testThreeByteWrite(self):
data = [0x7, 0x8, 0x9]
self.singleWriteTestHelper(data)
self.mox.ReplayAll()
self.bbi2c = bbi2c.BBi2c({'bus_num': 2})
self.bbi2c.wr_rd(SLAVE_ADDRESS, data, 0)
def testBlockWriteFailure(self):
data = [0x7, 0x8, 0x9, 0x10, 0x11, 0x12, 0x13]
self.mox.ReplayAll()
self.bbi2c = bbi2c.BBi2c({'bus_num': 2})
with self.assertRaises(bbi2c.BBi2cError):
self.bbi2c.wr_rd(SLAVE_ADDRESS, data, 0)
def testWriteAndRead(self):
wr_data = [DATA_ADDRESS, 0x8, 0x9]
rd_data = [0x10, 0x01]
self.singleWriteTestHelper(wr_data)
self.readTestHelper(rd_data, send_address=False)
self.mox.ReplayAll()
self.bbi2c = bbi2c.BBi2c({'bus_num': 2})
result = self.bbi2c.wr_rd(SLAVE_ADDRESS, wr_data, len(rd_data))
self.assertEquals(result, rd_data)
if __name__ == '__main__':
unittest.main()