UmberHubManager/api/examples/c_cpp/BrainStem2-Application-Notes/continuity_test.py

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()