def test_revision_1(self): with patch('__builtin__.open') as mock_open: handle = mock_open.return_value.__enter__.return_value handle.__iter__.return_value = iter(['Revision : 0000']) rev = Platform.pi_revision() self.assertEquals(rev, 1) with patch('__builtin__.open') as mock_open: handle = mock_open.return_value.__enter__.return_value handle.__iter__.return_value = iter(['Revision : 0002']) rev = Platform.pi_revision() self.assertEquals(rev, 1) with patch('__builtin__.open') as mock_open: handle = mock_open.return_value.__enter__.return_value handle.__iter__.return_value = iter(['Revision : 0003']) rev = Platform.pi_revision() self.assertEquals(rev, 1)
def get_default_bus(): """Return the default bus number based on the device platform. For a Raspberry Pi either bus 0 or 1 (based on the Pi revision) will be returned. For a Beaglebone Black the first user accessible bus, 1, will be returned. """ plat = Platform.platform_detect() if plat == Platform.RASPBERRY_PI: if Platform.pi_revision() == 1: # Revision 1 Pi uses I2C bus 0. return 0 else: # Revision 2 Pi uses I2C bus 1. return 1 elif plat == Platform.BEAGLEBONE_BLACK: # Beaglebone Black has multiple I2C buses, default to 1 (P9_19 and P9_20). return 1 else: raise RuntimeError('Could not determine default I2C bus for platform.')
def require_repeated_start(): """Enable repeated start conditions for I2C register reads. This is the normal behavior for I2C, however on some platforms like the Raspberry Pi there are bugs which disable repeated starts unless explicitly enabled with this function. See this thread for more details: http://www.raspberrypi.org/forums/viewtopic.php?f=44&t=15840 """ plat = Platform.platform_detect() if plat == Platform.RASPBERRY_PI: # On the Raspberry Pi there is a bug where register reads don't send a # repeated start condition like the kernel smbus I2C driver functions # define. As a workaround this bit in the BCM2708 driver sysfs tree can # be changed to enable I2C repeated starts. subprocess.check_call('chmod 666 /sys/module/i2c_bcm2708/parameters/combined', shell=True) subprocess.check_call('echo -n 1 > /sys/module/i2c_bcm2708/parameters/combined', shell=True)
def get_platform_pwm(**keywords): """Attempt to return a PWM instance for the platform which the code is being executed on. Currently supports only the Raspberry Pi using the RPi.GPIO library and Beaglebone Black using the Adafruit_BBIO library. Will throw an exception if a PWM instance can't be created for the current platform. The returned PWM object has the same interface as the RPi_PWM_Adapter and BBIO_PWM_Adapter classes. """ plat = Platform.platform_detect() if plat == Platform.RASPBERRY_PI: import RPi.GPIO return RPi_PWM_Adapter(RPi.GPIO, **keywords) elif plat == Platform.BEAGLEBONE_BLACK: import Adafruit_BBIO.PWM return BBIO_PWM_Adapter(Adafruit_BBIO.PWM, **keywords) elif plat == Platform.UNKNOWN: raise RuntimeError('Could not determine platform.')
def get_platform_gpio(**keywords): """Attempt to return a GPIO instance for the platform which the code is being executed on. Currently supports only the Raspberry Pi using the RPi.GPIO library and Beaglebone Black using the Adafruit_BBIO library. Will throw an exception if a GPIO instance can't be created for the current platform. The returned GPIO object is an instance of BaseGPIO. """ plat = Platform.platform_detect() if plat == Platform.RASPBERRY_PI: import RPi.GPIO return RPiGPIOAdapter(RPi.GPIO, **keywords) elif plat == Platform.BEAGLEBONE_BLACK: import Adafruit_BBIO.GPIO return AdafruitBBIOAdapter(Adafruit_BBIO.GPIO, **keywords) elif plat == Platform.MINNOWBOARD: import mraa return AdafruitMinnowAdapter(mraa, **keywords) elif plat == Platform.UNKNOWN: raise RuntimeError('Could not determine platform.')
def test_beaglebone_black(self): result = Platform.platform_detect() self.assertEquals(result, Platform.BEAGLEBONE_BLACK)
def test_unknown(self): result = Platform.platform_detect() self.assertEquals(result, Platform.UNKNOWN)