mirror of
https://github.com/xtacocorex/CHIP_IO
synced 2025-07-20 12:53:22 +00:00
updates to the pytest tests to fix the issues with pwm, added 2 new tests that bring in 5 total unit tests. python3 unit tests are passing, this will close #42 and close #47
This commit is contained in:
251
test/integrations/gptest.py
Normal file
251
test/integrations/gptest.py
Normal file
@ -0,0 +1,251 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import CHIP_IO.GPIO as GPIO
|
||||
import time
|
||||
import threading
|
||||
|
||||
num_callbacks = 0
|
||||
|
||||
def myfuncallback(channel):
|
||||
global num_callbacks
|
||||
num_callbacks += 1
|
||||
print("CALLBACK LIKE DRAKE IN HOTLINE BLING")
|
||||
|
||||
|
||||
loopfunction_exit = False
|
||||
|
||||
def loopfunction():
|
||||
print("LOOP FUNCTION START")
|
||||
for i in xrange(4):
|
||||
if loopfunction_exit:
|
||||
break
|
||||
if i % 2:
|
||||
mystr = "SETTING CSID0 LOW (i=%d)" % i
|
||||
print(mystr)
|
||||
GPIO.output("CSID0", GPIO.LOW)
|
||||
else:
|
||||
mystr = "SETTING CSID0 HIGH (i=%d)" % i
|
||||
print(mystr)
|
||||
GPIO.output("CSID0", GPIO.HIGH)
|
||||
print(" LOOP FUNCTION SLEEPING")
|
||||
time.sleep(1)
|
||||
|
||||
num_errs = 0
|
||||
|
||||
print("GETTING CHIP_IO VERSION")
|
||||
mystr = "CHIP_IO VERSION: %s" % GPIO.VERSION
|
||||
print(mystr)
|
||||
|
||||
print("\nRUNNING GPIO SELF TEST")
|
||||
GPIO.selftest(0)
|
||||
|
||||
print("\nVERIFYING SIMPLE FUNCTIONALITY")
|
||||
GPIO.setup("GPIO1", GPIO.IN)
|
||||
GPIO.setup("CSID0", GPIO.OUT, initial=GPIO.HIGH)
|
||||
if (GPIO.input("GPIO1") != GPIO.HIGH):
|
||||
print(" A high output on CSI0 does not lead to a high input on XIO-P2.")
|
||||
print(" Perhaps you forgot to connect them?")
|
||||
num_errs += 1
|
||||
else:
|
||||
print(" Able to use alternate names for GPIO")
|
||||
GPIO.cleanup()
|
||||
|
||||
GPIO.setup("U14_15", GPIO.IN) # XIO-P2
|
||||
GPIO.setup("CSID0", GPIO.OUT, initial=GPIO.LOW)
|
||||
if (GPIO.input("XIO-P2") != GPIO.LOW):
|
||||
print(" A low output on CSI0 does not lead to a low input on XIO-P2.")
|
||||
print(" Perhaps you forgot to connect them?")
|
||||
num_errs += 1
|
||||
else:
|
||||
print(" Able to use Pin Header+Number for GPIO")
|
||||
GPIO.cleanup()
|
||||
|
||||
GPIO.setup("XIO-P2", GPIO.IN)
|
||||
GPIO.setup("U14_31", GPIO.OUT) # CSID0
|
||||
|
||||
print("READING XIO-P2")
|
||||
GPIO.output("CSID0", GPIO.HIGH)
|
||||
assert(GPIO.input("XIO-P2") == GPIO.HIGH)
|
||||
|
||||
GPIO.output("CSID0", GPIO.LOW)
|
||||
print "LOW", GPIO.input("GPIO1")
|
||||
assert(GPIO.input("GPIO1") == GPIO.LOW)
|
||||
|
||||
# ==============================================
|
||||
# EDGE DETECTION - AP-EINT1
|
||||
print("\nSETTING UP RISING EDGE DETECTION ON AP-EINT1")
|
||||
GPIO.setup("AP-EINT1", GPIO.IN)
|
||||
GPIO.add_event_detect("AP-EINT1", GPIO.RISING, myfuncallback)
|
||||
print("VERIFYING EDGE DETECT WAS SET PROPERLY")
|
||||
f = open("/sys/class/gpio/gpio193/edge", "r")
|
||||
edge = f.read()
|
||||
f.close()
|
||||
assert(edge == "rising\n")
|
||||
GPIO.remove_event_detect("AP-EINT1")
|
||||
|
||||
# ==============================================
|
||||
# EDGE DETECTION - AP-EINT3
|
||||
print("\nSETTING UP BOTH EDGE DETECTION ON AP-EINT3")
|
||||
GPIO.setup("AP-EINT3", GPIO.IN)
|
||||
GPIO.add_event_detect("AP-EINT3", GPIO.BOTH, myfuncallback)
|
||||
print("VERIFYING EDGE DETECT WAS SET PROPERLY")
|
||||
f = open("/sys/class/gpio/gpio35/edge", "r")
|
||||
edge = f.read()
|
||||
f.close()
|
||||
assert(edge == "both\n")
|
||||
GPIO.remove_event_detect("AP-EINT3")
|
||||
|
||||
# ==============================================
|
||||
# EDGE DETECTION - EXPANDED GPIO
|
||||
print("\nSETTING UP FALLING EDGE DETECTION ON XIO-P2")
|
||||
# WRITING CSID0 LOW FIRST AS THERE IS A DOUBLE HIT ON HIGH
|
||||
GPIO.output("CSID0", GPIO.LOW)
|
||||
GPIO.add_event_detect("XIO-P2", GPIO.FALLING, myfuncallback)
|
||||
|
||||
print("VERIFYING EDGE DETECT")
|
||||
base = GPIO.get_gpio_base()
|
||||
gfile = "/sys/class/gpio/gpio%d/edge" % (base + 2)
|
||||
f = open(gfile, "r")
|
||||
edge = f.read()
|
||||
f.close()
|
||||
assert(edge == "falling\n")
|
||||
|
||||
# LOOP WRITING ON CSID0 TO HOPEFULLY GET CALLBACK TO WORK
|
||||
print("WAITING FOR CALLBACKS ON XIO-P2")
|
||||
loopfunction()
|
||||
mystr = " num_callbacks = %d" % num_callbacks
|
||||
print(mystr)
|
||||
GPIO.remove_event_detect("XIO-P2")
|
||||
|
||||
print("\nSETTING UP RISING EDGE DETECTION ON XIO-P2")
|
||||
# WRITING CSID0 LOW FIRST AS THERE IS A DOUBLE HIT ON HIGH
|
||||
GPIO.output("CSID0", GPIO.LOW)
|
||||
num_callbacks = 0
|
||||
GPIO.add_event_detect("XIO-P2", GPIO.RISING, myfuncallback)
|
||||
print("WAITING FOR CALLBACKS ON XIO-P2")
|
||||
loopfunction()
|
||||
mystr = " num_callbacks = %d" % num_callbacks
|
||||
print(mystr)
|
||||
GPIO.remove_event_detect("XIO-P2")
|
||||
|
||||
print("\nSETTING UP BOTH EDGE DETECTION ON XIO-P2")
|
||||
# WRITING CSID0 LOW FIRST AS THERE IS A DOUBLE HIT ON HIGH
|
||||
GPIO.output("CSID0", GPIO.LOW)
|
||||
num_callbacks = 0
|
||||
GPIO.add_event_detect("XIO-P2", GPIO.BOTH, myfuncallback)
|
||||
print("WAITING FOR CALLBACKS ON XIO-P2")
|
||||
loopfunction()
|
||||
mystr = " num_callbacks = %d" % num_callbacks
|
||||
print(mystr)
|
||||
GPIO.remove_event_detect("XIO-P2")
|
||||
|
||||
print("\nWAIT FOR EDGE TESTING, SETUP FOR FALLING EDGE")
|
||||
print("PRESS CONTROL-C TO EXIT IF SCRIPT GETS STUCK")
|
||||
try:
|
||||
# WAIT FOR EDGE
|
||||
t = threading.Thread(target=loopfunction)
|
||||
t.start()
|
||||
print("WAITING FOR EDGE ON XIO-P2")
|
||||
GPIO.wait_for_edge("XIO-P2", GPIO.FALLING)
|
||||
# THIS SHOULD ONLY PRINT IF WE'VE HIT THE EDGE DETECT
|
||||
print("WE'VE FALLEN LIKE COOLIO'S CAREER")
|
||||
except:
|
||||
pass
|
||||
|
||||
print("Exit thread")
|
||||
loopfunction_exit = True
|
||||
t.join() # Wait till the thread exits.
|
||||
GPIO.remove_event_detect("XIO-P2")
|
||||
|
||||
print("\n** BAD DAY SCENARIOS **")
|
||||
print(" ")
|
||||
print("TESTING ERRORS THROWN WHEN SPECIFYING EDGE DETECTION ON UNAUTHORIZED GPIO")
|
||||
GPIO.setup("CSID1", GPIO.IN)
|
||||
try:
|
||||
GPIO.add_event_detect("CSID1", GPIO.FALLING, myfuncallback)
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print("TESTING ERRORS THROWN WHEN SETTING UP AN ALREADY EXPORTED GPIO")
|
||||
try:
|
||||
GPIO.setup("CSID0", GPIO.LOW)
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print("TESTING ERRORS THROWN WHEN WRITING TO A GPIO NOT SET UP")
|
||||
try:
|
||||
GPIO.output("CSID2", GPIO.LOW)
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print("TESTING ERRORS THROWN WHEN WRITING TO A SET UP GPIO WITH NO DIRECTION")
|
||||
try:
|
||||
GPIO.output("CSID1", GPIO.LOW)
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print("TESTING ERRORS THROWN FOR ILLEGAL GPIO")
|
||||
try:
|
||||
GPIO.setup("NOTUSED", GPIO.IN)
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print("TESTING ERRORS THROWN FOR NON-GPIO")
|
||||
try:
|
||||
GPIO.setup("FEL", GPIO.IN)
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print("GPIO CLEANUP")
|
||||
GPIO.cleanup()
|
||||
|
||||
mystr = "DONE: %d ERRORS" % num_errs
|
||||
print(mystr)
|
65
test/integrations/lradctest.py
Normal file
65
test/integrations/lradctest.py
Normal file
@ -0,0 +1,65 @@
|
||||
import CHIP_IO.LRADC as ADC
|
||||
|
||||
# == ENABLE DEBUG ==
|
||||
print("ENABLING LRADC DEBUG OUTPUT")
|
||||
ADC.toggle_debug()
|
||||
|
||||
# == SETUP ==
|
||||
print("LRADC SETUP WITH SAMPLE RATE OF 125")
|
||||
ADC.setup(125)
|
||||
|
||||
# == SCALE FACTOR ==
|
||||
print("GETTING SCALE FACTOR")
|
||||
scalefactor = ADC.get_scale_factor()
|
||||
print(scalefactor)
|
||||
print("")
|
||||
|
||||
# == ALLOWABLE SAMPLING RATES ==
|
||||
print("GETTING ALLOWABLE SAMPLE RATES")
|
||||
rates = ADC.get_allowable_sample_rates()
|
||||
print(rates)
|
||||
print("IS 32.25 IN RATE TUPLE")
|
||||
print(ADC.SAMPLE_RATE_32P25 in rates)
|
||||
print("")
|
||||
|
||||
# == CURRENT SAMPLE RATE ==
|
||||
print("CURRENT SAMPLING RATE")
|
||||
crate = ADC.get_sample_rate()
|
||||
print(crate)
|
||||
print("")
|
||||
|
||||
# == SET SAMPLE RATE ==
|
||||
print("SETTING SAMPLE RATE TO 62.5")
|
||||
ADC.set_sample_rate(62.5)
|
||||
crate = ADC.get_sample_rate()
|
||||
print(crate)
|
||||
print("")
|
||||
|
||||
# == CHAN 0 RAW ==
|
||||
print("READING LRADC CHAN0 RAW")
|
||||
raw0 = ADC.get_chan0_raw()
|
||||
print(raw0)
|
||||
print("")
|
||||
|
||||
# == CHAN 1 RAW ==
|
||||
print("READING LRADC CHAN1 RAW")
|
||||
raw1 = ADC.get_chan1_raw()
|
||||
print(raw1)
|
||||
print("")
|
||||
|
||||
# == CHAN 0 ==
|
||||
print("READING LRADC CHAN0 WITH SCALE APPLIED")
|
||||
full0 = ADC.get_chan0()
|
||||
print(full0)
|
||||
print("")
|
||||
|
||||
# == CHAN 1 ==
|
||||
print("READING LRADC CHAN1 WITH SCALE APPLIED")
|
||||
full1 = ADC.get_chan1()
|
||||
print(full1)
|
||||
print("")
|
||||
|
||||
# == RESET ==
|
||||
print("RESETING SAMPLE RATE TO 250")
|
||||
ADC.set_sample_rate(250)
|
||||
|
36
test/integrations/omtest.py
Normal file
36
test/integrations/omtest.py
Normal file
@ -0,0 +1,36 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import CHIP_IO.OverlayManager as OM
|
||||
import os
|
||||
|
||||
# ENABLE DEBUG
|
||||
print("ENABLING OVERLAY MANAGER DEBUG")
|
||||
OM.toggle_debug()
|
||||
|
||||
# **************** PWM *******************
|
||||
print("\nIS PWM ENABLED: {0}".format(OM.get_pwm_loaded()))
|
||||
OM.load("PWM0")
|
||||
print("IS PWM ENABLED: {0}".format(OM.get_pwm_loaded()))
|
||||
# VERIFY PWM0 EXISTS
|
||||
if os.path.exists('/sys/class/pwm/pwmchip0'):
|
||||
print("PWM DEVICE EXISTS")
|
||||
else:
|
||||
print("PWM DEVICE DID NOT LOAD PROPERLY")
|
||||
print("UNLOADING PWM0")
|
||||
OM.unload("PWM0")
|
||||
print("IS PWM ENABLED: {0}".format(OM.get_pwm_loaded()))
|
||||
|
||||
# **************** SPI2 *******************
|
||||
print("\nIS SPI ENABLED: {0}".format(OM.get_spi_loaded()))
|
||||
OM.load("SPI2")
|
||||
print("IS SPI ENABLED: {0}".format(OM.get_spi_loaded()))
|
||||
# VERIFY SPI2 EXISTS
|
||||
if os.listdir('/sys/class/spi_master') != "":
|
||||
print("SPI DEVICE EXISTS")
|
||||
else:
|
||||
print("SPI DEVICE DID NOT LOAD PROPERLY")
|
||||
print("UNLOADING SPI")
|
||||
OM.unload("SPI2")
|
||||
print("IS SPI ENABLED: {0}".format(OM.get_spi_loaded()))
|
||||
|
||||
|
99
test/integrations/pwmtest.py
Normal file
99
test/integrations/pwmtest.py
Normal file
@ -0,0 +1,99 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import CHIP_IO.PWM as PWM
|
||||
import CHIP_IO.GPIO as GPIO
|
||||
import CHIP_IO.OverlayManager as OM
|
||||
import time
|
||||
import datetime
|
||||
import threading
|
||||
|
||||
class PWMReceiver(threading.Thread):
|
||||
def __init__(self,gpio,key,maxcount=20,sleeptime=0.5):
|
||||
self.gpio = gpio
|
||||
self.key = key
|
||||
self.counter = 0
|
||||
self.maxcount = maxcount
|
||||
self.sleeptime = sleeptime
|
||||
threading.Thread.__init__(self)
|
||||
|
||||
def run(self):
|
||||
print("SETTING UP RECEIVER GPIO")
|
||||
self.gpio.cleanup()
|
||||
self.gpio.setup(self.key, self.gpio.IN)
|
||||
print("STARTING RECEIVE LOOP")
|
||||
try:
|
||||
while self.counter < self.maxcount:
|
||||
pwmval = self.gpio.input(self.key)
|
||||
print("PWM VALUE: {0} @ {1}".format(pwmval, datetime.datetime.now()))
|
||||
time.sleep(self.sleeptime)
|
||||
self.counter += 1
|
||||
except KeyboardInterrupt:
|
||||
self.gpio.cleanup(self.key)
|
||||
|
||||
def PrintPwmData():
|
||||
print("PRINTING PWM SYSFS DATA")
|
||||
f = open("/sys/class/pwm/pwmchip0/pwm0/enable")
|
||||
print("PWM0 ENABLE:\t{}".format(f.readline()))
|
||||
f.close()
|
||||
f = open("/sys/class/pwm/pwmchip0/pwm0/period")
|
||||
print("PWM0 PERIOD:\t{}".format(f.readline()))
|
||||
f.close()
|
||||
f = open("/sys/class/pwm/pwmchip0/pwm0/duty_cycle")
|
||||
print("PWM0 DUTY CYCLE:\t{}".format(f.readline()))
|
||||
f.close()
|
||||
f = open("/sys/class/pwm/pwmchip0/pwm0/polarity")
|
||||
print("PWM0 POLARITY:\t{}".format(f.readline()))
|
||||
f.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
# SETUP VARIABLES
|
||||
PWMGPIO = "PWM0"
|
||||
RECEIVERGPIO = "CSID0"
|
||||
COUNT = 150
|
||||
SLEEPTIME = 0.01
|
||||
|
||||
# LOAD THE PWM OVERLAY
|
||||
print("LOADING PWM OVERLAY")
|
||||
OM.load("PWM0")
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
# CLEANUP THE GPIO
|
||||
#GPIO.cleanup()
|
||||
#PWM.cleanup()
|
||||
|
||||
# SETUP PWM
|
||||
try:
|
||||
print("PWM START")
|
||||
PWM.toggle_debug()
|
||||
PWM.start(PWMGPIO, 15, 50, 1)
|
||||
PrintPwmData()
|
||||
|
||||
# UNCOMMENT FOR CRASH
|
||||
#print("PWM SET FREQUENCY")
|
||||
#PWM.set_frequency(PWMGPIO, 200)
|
||||
#PrintPwmData()
|
||||
|
||||
# UNCOMMENT FOR CRASH
|
||||
#print("PWM SET DUTY CYCLE")
|
||||
#PWM.set_duty_cycle(PWMGPIO, 25)
|
||||
#PrintPwmData()
|
||||
|
||||
# SETUP PWM RECEIVER
|
||||
#rcvr = PWMReceiver(GPIO, RECEIVERGPIO, COUNT, SLEEPTIME)
|
||||
#rcvr.start()
|
||||
|
||||
#time.sleep(COUNT*SLEEPTIME + 1)
|
||||
raw_input("PRESS ENTER WHEN DONE")
|
||||
|
||||
except:
|
||||
raise
|
||||
finally:
|
||||
# CLEANUP
|
||||
print("CLEANUP")
|
||||
PWM.stop(PWMGPIO)
|
||||
PWM.cleanup()
|
||||
#OM.unload("PWM0")
|
||||
#GPIO.cleanup()
|
||||
|
||||
|
71
test/integrations/servotest.py
Normal file
71
test/integrations/servotest.py
Normal file
@ -0,0 +1,71 @@
|
||||
import CHIP_IO.SERVO as SERVO
|
||||
import CHIP_IO.GPIO as GPIO
|
||||
import time
|
||||
import datetime
|
||||
import threading
|
||||
|
||||
class ServoTestReceiver(threading.Thread):
|
||||
def __init__(self,gpio,key,maxcount=20,sleeptime=0.005):
|
||||
self.gpio = gpio
|
||||
self.key = key
|
||||
self.counter = 0
|
||||
self.maxcount = maxcount
|
||||
self.sleeptime = sleeptime
|
||||
self.dead = False
|
||||
threading.Thread.__init__(self)
|
||||
|
||||
def kill(self):
|
||||
self.dead = True
|
||||
|
||||
def run(self):
|
||||
print("SETTING UP RECEIVER GPIO")
|
||||
self.gpio.cleanup()
|
||||
self.gpio.setup(self.key, self.gpio.IN)
|
||||
print("STARTING RECEIVE LOOP")
|
||||
try:
|
||||
#while self.counter < self.maxcount:
|
||||
while not self.dead:
|
||||
pwmval = self.gpio.input(self.key)
|
||||
print("SERVO VALUE: {0} @ {1}".format(pwmval, datetime.datetime.now()))
|
||||
time.sleep(self.sleeptime)
|
||||
self.counter += 1
|
||||
except KeyboardInterrupt:
|
||||
self.gpio.cleanup(self.key)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# SETUP VARIABLES
|
||||
SERVOGPIO = "CSID1" #"XIO-P7"
|
||||
RECEIVERGPIO = "CSID7"
|
||||
COUNT = 120
|
||||
SLEEPTIME = 0.0001
|
||||
RANGE = 180
|
||||
|
||||
# SETUP PWM
|
||||
try:
|
||||
print("SERVO START")
|
||||
SERVO.toggle_debug()
|
||||
SERVO.start(SERVOGPIO, 0, RANGE)
|
||||
|
||||
# SETUP SERVO RECEIVER
|
||||
#rcvr = ServoTestReceiver(GPIO, RECEIVERGPIO, COUNT, SLEEPTIME)
|
||||
#rcvr.start()
|
||||
|
||||
# LOOP THROUGH RANGE
|
||||
for i in range(-(RANGE/2),(RANGE/2),5):
|
||||
print("SETTING ANGLE: {0}".format(i))
|
||||
SERVO.set_angle(SERVOGPIO, i)
|
||||
time.sleep(1)
|
||||
|
||||
#rcvr.kill()
|
||||
raw_input("PRESS ENTER WHEN DONE")
|
||||
|
||||
except:
|
||||
raise
|
||||
finally:
|
||||
# CLEANUP
|
||||
print("CLEANUP")
|
||||
SERVO.stop(SERVOGPIO)
|
||||
SERVO.cleanup(SERVOGPIO)
|
||||
|
||||
|
70
test/integrations/spwmtest.py
Normal file
70
test/integrations/spwmtest.py
Normal file
@ -0,0 +1,70 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import CHIP_IO.SOFTPWM as SPWM
|
||||
import CHIP_IO.GPIO as GPIO
|
||||
import time
|
||||
import datetime
|
||||
import threading
|
||||
|
||||
class SPWMReceiver(threading.Thread):
|
||||
def __init__(self,gpio,key,maxcount=20,sleeptime=0.5):
|
||||
self.gpio = gpio
|
||||
self.key = key
|
||||
self.counter = 0
|
||||
self.maxcount = maxcount
|
||||
self.sleeptime = sleeptime
|
||||
threading.Thread.__init__(self)
|
||||
|
||||
def run(self):
|
||||
print("SETTING UP RECEIVER GPIO")
|
||||
self.gpio.cleanup()
|
||||
self.gpio.setup(self.key, self.gpio.IN)
|
||||
print("STARTING RECEIVE LOOP")
|
||||
try:
|
||||
while self.counter < self.maxcount:
|
||||
pwmval = self.gpio.input(self.key)
|
||||
print("SPWM VALUE: {0} @ {1}".format(pwmval, datetime.datetime.now()))
|
||||
time.sleep(self.sleeptime)
|
||||
self.counter += 1
|
||||
except KeyboardInterrupt:
|
||||
self.gpio.cleanup(self.key)
|
||||
|
||||
if __name__ == "__main__":
|
||||
# SETUP VARIABLES
|
||||
SPWMGPIO = "XIO-P7"
|
||||
RECEIVERGPIO = "CSID0"
|
||||
COUNT = 200
|
||||
SLEEPTIME = 0.01
|
||||
|
||||
# CLEANUP THE GPIO
|
||||
GPIO.cleanup()
|
||||
SPWM.cleanup()
|
||||
|
||||
# ISSUE #16 VERIFICATION
|
||||
try:
|
||||
print("VERIFYING FIX FOR ISSUE #16, GPIO CONFIGURED THAT SPWM WANTS TO USE")
|
||||
GPIO.setup(SPWMGPIO, GPIO.OUT)
|
||||
SPWM.start(SPWMGPIO, 50, 1)
|
||||
except Exception as e:
|
||||
print("EXCEPTION: {}".format(e))
|
||||
print("GPIO CLEANUP")
|
||||
GPIO.cleanup()
|
||||
|
||||
# SETUP SOFTPWM
|
||||
print("STARTING SOFTPWM TEST")
|
||||
SPWM.start(SPWMGPIO, 50, 1)
|
||||
SPWM.set_frequency(SPWMGPIO, 2)
|
||||
|
||||
# SETUP SOFTPWM RECEIVER
|
||||
rcvr = SPWMReceiver(GPIO, RECEIVERGPIO, COUNT, SLEEPTIME)
|
||||
rcvr.start()
|
||||
|
||||
time.sleep(COUNT*SLEEPTIME + 1)
|
||||
|
||||
# CLEANUP
|
||||
print("CLEANUP")
|
||||
SPWM.stop(SPWMGPIO)
|
||||
SPWM.cleanup()
|
||||
GPIO.cleanup()
|
||||
|
||||
|
45
test/integrations/spwmtest2.py
Normal file
45
test/integrations/spwmtest2.py
Normal file
@ -0,0 +1,45 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import CHIP_IO.SOFTPWM as PWM
|
||||
import CHIP_IO.GPIO as GPIO
|
||||
import CHIP_IO.OverlayManager as OM
|
||||
import time
|
||||
import datetime
|
||||
|
||||
if __name__ == "__main__":
|
||||
# SETUP VARIABLES
|
||||
PWMGPIO = "XIO-P7"
|
||||
#PWMGPIO = "LCD-D4"
|
||||
COUNT = 150
|
||||
SLEEPTIME = 0.01
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
# SETUP PWM
|
||||
try:
|
||||
print("PWM START")
|
||||
#PWM.toggle_debug()
|
||||
PWM.start(PWMGPIO, 50, 45, 1)
|
||||
|
||||
# UNCOMMENT FOR CRASH
|
||||
print("PWM SET FREQUENCY")
|
||||
PWM.set_frequency(PWMGPIO, 10)
|
||||
|
||||
# UNCOMMENT FOR CRASH
|
||||
print("PWM SET DUTY CYCLE")
|
||||
PWM.set_duty_cycle(PWMGPIO, 25)
|
||||
|
||||
#time.sleep(COUNT*SLEEPTIME + 1)
|
||||
raw_input("PRESS ENTER WHEN DONE")
|
||||
|
||||
except:
|
||||
raise
|
||||
finally:
|
||||
# CLEANUP
|
||||
print("CLEANUP")
|
||||
PWM.stop(PWMGPIO)
|
||||
PWM.cleanup()
|
||||
#OM.unload("PWM0")
|
||||
#GPIO.cleanup()
|
||||
|
||||
|
Reference in New Issue
Block a user