Source code for piview.Hardware

# Project:    PiView
# Filename:   Hardware.py
# Location:   ./piview
# Author:     Adrian Gould <adrian.gould@nmtafe.wa.edu.au>
# Created:    10/04/21
#
# This file provides the following features, methods and associated supporting
# code:
# - bt (Bluetooth status)
# - camera (camera supported, detected)
# - spi (SPI Bus status)
# - i2c (I2C status)
#
# TODO: Cache the lsmod for user defined time - store in a dictionary?
# TODO: Use the cached lsmod, unless force update required
# TODO: Dry out bt/spi/i2c - to remove the repeated filters

import subprocess


[docs]class Hardware: @staticmethod
[docs] def bt(): """ Check if Bluetooth module is enabled :rtype: boolean :return: True|False """ bt = False try: c = subprocess.Popen("lsmod", stdout=subprocess.PIPE) gr = subprocess.Popen(["grep", "bluetooth"], stdin=c.stdout, stdout=subprocess.PIPE) output = gr.communicate()[0] if output[:9] == 'bluetooth': bt = True except: pass return bt
@staticmethod
[docs] def spi(): """ Check if SPI bus is enabled by checking for spi_bcm2 modules :rtype: boolean :return: True|False """ spi = False try: c = subprocess.Popen("lsmod", stdout=subprocess.PIPE) gr = subprocess.Popen(["grep", "spi_bcm2"], stdin=c.stdout, stdout=subprocess.PIPE) output = gr.communicate()[0] if output[:8] == 'spi_bcm2': spi = True except: pass return spi
@staticmethod
[docs] def i2c(): """ Check if I2C bus is enabled by checking for i2c_bcm2 modules :rtype: boolean :return: True|False """ i2c = False try: c = subprocess.Popen("lsmod", stdout=subprocess.PIPE) gr = subprocess.Popen(["grep", "i2c_bcm2"], stdin=c.stdout, stdout=subprocess.PIPE) output = gr.communicate()[0] if output[:8] == 'i2c_bcm2': i2c = True except: pass return i2c
@staticmethod
[docs] def camera(): """ Check if camera is enabled and present :rtype: dictionary :return: Details in form {"supported": boolean, "detected": boolean} """ camera = {"supported": None, "detected": None} try: c = subprocess.Popen(["/opt/vc/bin/vcgencmd", "get_camera"], stdout=subprocess.PIPE) output = c.communicate()[0] supported = output[10] == ord("1") detected = output[21] == ord("1") camera = {"supported": supported, "detected": detected} except: pass return camera