89 lines
3.2 KiB
Python
Executable File
89 lines
3.2 KiB
Python
Executable File
###############################################################################
|
|
# Filename: continuity_test.py
|
|
# Prepared By: James Dudley
|
|
# Date Prepared: March 5, 2018
|
|
# Date Revised: March 5, 2018
|
|
# Revision: 0.0.1
|
|
###############################################################################
|
|
|
|
import brainstem # Import BrainStem API
|
|
from brainstem.result import Result # For easy access to error constants
|
|
from time import sleep, time
|
|
|
|
CONTINUITY_PAIRS = [[0, 9], [1, 10], [2, 11], [3, 12], [4, 13], [5, 14]] # [output, input]
|
|
CYCLE_TIME = 0.2 # Time to pause between readings, seconds
|
|
|
|
# Generic function to run BrainStem commands with error checking
|
|
def step(func, func_str, *args):
|
|
print '>> ' + func_str[0].upper() + func_str[1:] # Capitalize first letter of string
|
|
res = func(*args)
|
|
err = val = res
|
|
if isinstance(err, Result):
|
|
err = res.error
|
|
val = res.value
|
|
|
|
if err is not Result.NO_ERROR:
|
|
raise Exception('Error %s: %d' % (func_str, err))
|
|
|
|
return val
|
|
|
|
|
|
def main():
|
|
# Create MTM-USBSTEM object
|
|
stem = brainstem.stem.MTMUSBStem() # Uses default module address
|
|
|
|
# Initialize error tracker
|
|
err = Result.NO_ERROR
|
|
|
|
try:
|
|
# Discover and connect to MTM-PM-1 object
|
|
# Connects to the first USB module discovered
|
|
step(stem.discoverAndConnect, 'connecting to MTM-USBStem', brainstem.link.Spec.USB)
|
|
|
|
# Set DIO configurations
|
|
for pair in CONTINUITY_PAIRS:
|
|
output_dio = pair[0]
|
|
input_dio = pair[1]
|
|
step(stem.digital[output_dio].setConfiguration, 'configuring DIO%d as output' % output_dio, 1) # Configuration value from datasheet
|
|
step(stem.digital[input_dio].setConfiguration, 'configuring DIO%d as input with pull-down' % input_dio, 5) # Configuration value from datasheet
|
|
|
|
# Test continuity between pairs
|
|
continuity_array = []
|
|
for pair in CONTINUITY_PAIRS:
|
|
output_dio = pair[0]
|
|
input_dio = pair[1]
|
|
|
|
# Check continuity by raising the output HI (1), then LO (0) and verifying
|
|
# the corresponding input follows
|
|
bContinuous = True
|
|
for state in [1, 0]:
|
|
step(stem.digital[output_dio].setState, 'setting DIO%d to %d' % (output_dio, state), state)
|
|
|
|
sleep(CYCLE_TIME)
|
|
|
|
read_state = step(stem.digital[input_dio].getState, 'getting DIO%d state' % input_dio)
|
|
|
|
if read_state != state:
|
|
bContinuous = False
|
|
|
|
continuity_array.append([bContinuous, output_dio, input_dio])
|
|
|
|
print '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *'
|
|
for idx in continuity_array:
|
|
if idx[0]:
|
|
print 'DIO%d -- DIO%d: Continuous' % (idx[1], idx[2])
|
|
else:
|
|
print 'DIO%d -- DIO%d: Discontinuous' % (idx[1], idx[2])
|
|
print '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *'
|
|
|
|
except Exception as exc:
|
|
print exc
|
|
|
|
finally:
|
|
stem.disconnect() # Clean up possible remaining connections
|
|
del stem # Clean up MTM-USBSTEM object
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|