99 lines
4.2 KiB
Python
Executable File
99 lines
4.2 KiB
Python
Executable File
#System
|
|
import sys
|
|
import time
|
|
|
|
#BrainStem
|
|
import brainstem
|
|
from brainstem import _BS_C #Gives access to aProtocolDef.h constants.
|
|
from brainstem.pd_channel_logger import PDChannelLogger
|
|
from brainstem.result import Result
|
|
|
|
#Basic error handling
|
|
def basic_error_handling(stem, error, error_string="", exit=False, exit_code=99):
|
|
extracted_error = Result.UNKNOWN_ERROR
|
|
|
|
#Pull out the error code if someone hands us a Result object.
|
|
if isinstance(error, Result):
|
|
extracted_error = error.error
|
|
elif isinstance(error, int):
|
|
extracted_error = error
|
|
else:
|
|
raise RuntimeError("Unhandled type: %s" % (type(error)))
|
|
|
|
if extracted_error != Result.NO_ERROR:
|
|
extracted_error_text = Result.getErrorText(extracted_error)
|
|
extracted_error_description = Result.getErrorDescription(extracted_error)
|
|
print("Error Occurred: %s(%d) - %s" % (extracted_error_text, extracted_error, extracted_error_description))
|
|
|
|
if len(error_string):
|
|
print(error_string)
|
|
|
|
if Result.PERMISSION_ERROR == extracted_error:
|
|
print("This error indicates the device does not have the required Software Features to executed this API.")
|
|
print("If you have purchased these features already you might only need to update your devices firmware.")
|
|
print("If you are still having issues please contact Acroname Support: support@acroname.com")
|
|
|
|
elif Result.TIMEOUT == extracted_error or Result.CONNECTION_ERROR == extracted_error:
|
|
print("Fatal Error: Lost connection to device. Exiting")
|
|
sys.exit(33)
|
|
|
|
if exit:
|
|
print("Exiting from basic_error_handling - Exit code: %d" % (exit_code))
|
|
sys.exit(exit_code)
|
|
|
|
if Result.NO_ERROR == extracted_error:
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
|
|
#Create a stem from the base class Module.
|
|
#When working from the base class it is good practice to ask the device
|
|
#if it capable of doing something before trying it.
|
|
def create_and_connect_stem(serial_number):
|
|
stem = brainstem.module.Module(0)
|
|
error = stem.discoverAndConnect(1, serial_number) #TODO: Get basic info and print it out. (sn, version etc).
|
|
basic_error_handling(stem, error, ("Exiting: Could not connect. Error %d - SN: 0x%08X" % (error, serial_number)), exit=True, exit_code=1)
|
|
|
|
#Create System Class object
|
|
system = brainstem.entity.System(stem, 0)
|
|
|
|
#---------------------------------------------------------------------
|
|
#Check if the device supports system.getSerialNumber()
|
|
result = stem.hasUEI(_BS_C.cmdSYSTEM, _BS_C.systemSerialNumber, 0, (_BS_C.ueiOPTION_GET))
|
|
s = "Exiting: There is an error with this devices ability to get its serial number: %s" % (result)
|
|
basic_error_handling(stem, result, s, exit=True, exit_code=1)
|
|
|
|
sn_result = system.getSerialNumber()
|
|
basic_error_handling(stem, sn_result, "system.getSerialNumber()", exit=True, exit_code=1)
|
|
#---------------------------------------------------------------------
|
|
|
|
#---------------------------------------------------------------------
|
|
#Check if the device supports system.getVersion()
|
|
result = stem.hasUEI(_BS_C.cmdSYSTEM, _BS_C.systemVersion, 0, (_BS_C.ueiOPTION_GET))
|
|
s = "Exiting: There is an error with this devices ability to get its firmware version: %s" % (result)
|
|
basic_error_handling(stem, result, s, exit=True, exit_code=1)
|
|
|
|
version_result = system.getVersion()
|
|
basic_error_handling(stem, version_result, "system.getVersion()", exit=True, exit_code=1)
|
|
#---------------------------------------------------------------------
|
|
|
|
print("")
|
|
print("Connected to device: 0x%08X" % (sn_result.value))
|
|
print("Firmware Version: %s" % (brainstem.version.get_version_string(version_result.value)))
|
|
print("Software Version: %s" % (brainstem.version.get_version_string()))
|
|
print("")
|
|
|
|
return stem
|
|
|
|
|
|
#Convenience function for creating a PDChannelLogger
|
|
def create_logger(stem, port_index):
|
|
logger = PDChannelLogger(stem, port_index) #Create Logger object for given port
|
|
error = logger.setEnabled(True) #Enable logging
|
|
basic_error_handling(stem, error, "logger.setEnabled()", exit=True, exit_code=4)
|
|
time.sleep(.1) #Allow the logger to get up and running.
|
|
return logger
|
|
|
|
|