# Copyright 2021 Patrick C. Tapping
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.
"""
Error code definitions and exception class for dealing with errors reported from the Andor SDK.
"""
__all__ = ["AndorError", "AT_ERR"]
from enum import IntEnum
[docs]class AndorError(RuntimeError):
"""
Exception used to indicate an error returned by the Andor SDK3.
:param error_code: Numerical error code used by the Andor SDK3.
"""
def __init__(self, error_code):
self.code = error_code
self.name = AT_ERR(self.code).name
self.description = AT_ERR(error_code).description
def __str__(self):
return f"AT_ERR_{self.name} ({self.code}): {self.description}"
[docs]class AT_ERR(IntEnum):
"""
Enumeration listing the valid Andor SDK3 numerical error codes.
"""
SUCCESS = 0
NOTINITIALISED = 1
NOTIMPLEMENTED = 2
READONLY = 3
NOTREADABLE = 4
NOTWRITABLE = 5
OUTOFRANGE = 6
INDEXNOTAVAILABLE = 7
INDEXNOTIMPLEMENTED = 8
EXCEEDEDMAXSTRINGLENGTH = 9
CONNECTION = 10
NODATA = 11
INVALIDHANDLE = 12
TIMEDOUT = 13
BUFFERFULL = 14
INVALIDSIZE = 15
INVALIDALIGNMENT = 16
COMM = 17
STRINGNOTAVAILABLE = 18
STRINGNOTIMPLEMENTED = 19
NULL_FEATURE = 20
NULL_HANDLE = 21
NULL_IMPLEMENTED_VAR = 22
NULL_READABLE_VAR = 23
NULL_READONLY_VAR = 24
NULL_WRITABLE_VAR = 25
NULL_MINVALUE = 26
NULL_MAXVALUE = 27
NULL_VALUE = 28
NULL_STRING = 29
NULL_COUNT_VAR = 30
NULL_ISAVAILABLE_VAR = 31
NULL_MAXSTRINGLENGTH = 32
NULL_EVCALLBACK = 33
NULL_QUEUE_PTR = 34
NULL_WAIT_PTR = 35
NULL_PTRSIZE = 36
NOMEMORY = 37
DEVICEINUSE = 38
DEVICENOTFOUND = 39
HARDWARE_OVERFLOW = 100
@property
def description(self):
"""
Return a string describing the error code.
"""
return {
AT_ERR.SUCCESS : "Function call was successful",
AT_ERR.NOTINITIALISED : "Function called with an uninitialized handle",
AT_ERR.NOTIMPLEMENTED : "Feature has not been implemented for the chosen camera",
AT_ERR.READONLY : "Feature is read only",
AT_ERR.NOTREADABLE : "Feature is currently not readable",
AT_ERR.NOTWRITABLE : "Feature is currently not writable",
AT_ERR.OUTOFRANGE : "Value is outside the maximum and minimum limits",
AT_ERR.INDEXNOTAVAILABLE : "Index is currently not available",
AT_ERR.INDEXNOTIMPLEMENTED : "Index is not implemented for the chosen camera",
AT_ERR.EXCEEDEDMAXSTRINGLENGTH : "String value provided exceeds the maximum allowed length",
AT_ERR.CONNECTION : "Error connecting to or disconnecting from hardware",
AT_ERR.NODATA : "No Internal Event or Internal Error",
AT_ERR.INVALIDHANDLE : "Invalid device handle passed to function",
AT_ERR.TIMEDOUT : "The waitBuffer function timed out while waiting for data arrive in output queue",
AT_ERR.BUFFERFULL : "The input queue has reached its capacity",
AT_ERR.INVALIDSIZE : "The size of a queued buffer did not match the frame size",
AT_ERR.INVALIDALIGNMENT : "A queued buffer was not aligned on an 8-byte boundary",
AT_ERR.COMM : "An error has occurred while communicating with hardware",
AT_ERR.STRINGNOTAVAILABLE : "Index / String is not available",
AT_ERR.STRINGNOTIMPLEMENTED : "Index / String is not implemented for the chosen camera",
AT_ERR.NULL_FEATURE : "NULL feature name passed to function",
AT_ERR.NULL_HANDLE : "Null device handle passed to function",
AT_ERR.NULL_IMPLEMENTED_VAR : "Feature not implemented",
AT_ERR.NULL_READABLE_VAR : "Readable not set",
AT_ERR.NULL_READONLY_VAR : "Read-only",
AT_ERR.NULL_WRITABLE_VAR : "Writable not set",
AT_ERR.NULL_MINVALUE : "NULL min value",
AT_ERR.NULL_MAXVALUE : "NULL max value",
AT_ERR.NULL_VALUE : "NULL value returned from function",
AT_ERR.NULL_STRING : "NULL string returned from function",
AT_ERR.NULL_COUNT_VAR : "NULL feature count",
AT_ERR.NULL_ISAVAILABLE_VAR : "Available not set",
AT_ERR.NULL_MAXSTRINGLENGTH : "Max string length is NULL",
AT_ERR.NULL_EVCALLBACK : "EvCallBack parameter is NULL",
AT_ERR.NULL_QUEUE_PTR : "Pointer to queue is NULL",
AT_ERR.NULL_WAIT_PTR : "Wait pointer is NULL",
AT_ERR.NULL_PTRSIZE : "Pointer size is NULL",
AT_ERR.NOMEMORY : "No memory has been allocated for the current action",
AT_ERR.DEVICEINUSE : "Function failed to connect to a device because it is already being used",
AT_ERR.DEVICENOTFOUND : "Device not found",
AT_ERR.HARDWARE_OVERFLOW : "The software was not able to retrieve data from the card or camera fast enough to avoid the internal hardware buffer bursting."
}[self.value]