24from ctypes
import POINTER, c_double, c_int, c_uint, c_void_p
34_stdcall_libraries = {}
36if os.name
in (
"nt",
"ce"):
37 _stdcall_libraries[
"ATCORE"] = ctypes.WinDLL(
"atcore")
38 _stdcall_libraries[
"ATUTIL"] = ctypes.WinDLL(
"atutility")
39 CALLBACKTYPE = ctypes.WINFUNCTYPE(c_int, AT_H, POINTER(AT_WC), c_void_p)
41 _stdcall_libraries[
"ATCORE"] = ctypes.CDLL(
"atcore.so")
42 _stdcall_libraries[
"ATUTIL"] = ctypes.CDLL(
"atutility.so")
43 CALLBACKTYPE = ctypes.CFUNCTYPE(c_int, AT_H, POINTER(AT_WC), c_void_p)
50 errorCodes[value] = name
53AT_INFINITE = 0xFFFFFFFF
54AT_CALLBACK_SUCCESS = 0
60errCode(
"AT_ERR_NOTINITIALISED", 1)
61errCode(
"AT_ERR_NOTIMPLEMENTED", 2)
66errCode(
"AT_ERR_INDEXNOTAVAILABLE", 7)
67errCode(
"AT_ERR_INDEXNOTIMPLEMENTED", 8)
68errCode(
"AT_ERR_EXCEEDEDMAXSTRINGLENGTH", 9)
71errCode(
"AT_ERR_INVALIDHANDLE", 12)
74errCode(
"AT_ERR_INVALIDSIZE", 15)
75errCode(
"AT_ERR_INVALIDALIGNMENT", 16)
77errCode(
"AT_ERR_STRINGNOTAVAILABLE", 18)
78errCode(
"AT_ERR_STRINGNOTIMPLEMENTED", 19)
80errCode(
"AT_ERR_NULL_FEATURE", 20)
81errCode(
"AT_ERR_NULL_HANDLE", 21)
82errCode(
"AT_ERR_NULL_IMPLEMENTED_VAR", 22)
83errCode(
"AT_ERR_NULL_READABLE_VAR", 23)
84errCode(
"AT_ERR_NULL_READONLY_VAR", 24)
85errCode(
"AT_ERR_NULL_WRITABLE_VAR", 25)
86errCode(
"AT_ERR_NULL_MINVALUE", 26)
87errCode(
"AT_ERR_NULL_MAXVALUE", 27)
89errCode(
"AT_ERR_NULL_STRING", 29)
90errCode(
"AT_ERR_NULL_COUNT_VAR", 30)
91errCode(
"AT_ERR_NULL_ISAVAILABLE_VAR", 31)
92errCode(
"AT_ERR_NULL_MAXSTRINGLENGTH", 32)
93errCode(
"AT_ERR_NULL_EVCALLBACK", 33)
94errCode(
"AT_ERR_NULL_QUEUE_PTR", 34)
95errCode(
"AT_ERR_NULL_WAIT_PTR", 35)
96errCode(
"AT_ERR_NULL_PTRSIZE", 36)
99errCode(
"AT_ERR_HARDWARE_OVERFLOW", 100)
108 return "when calling %s - %s" % (self.
fcnName, errorCodes[self.
errNo])
120AT_HANDLE_UNINITIALISED = -1
124STRING = POINTER(AT_WC)
138 return v, ctypes.byref(v)
146 v = ctypes.create_unicode_buffer(bufLen)
162 if isinstance(val, _meta):
169 def __init__(self, name, args=[], argnames=[], lib="ATCORE"):
170 self.
f = getattr(_stdcall_libraries[lib], name)
171 self.
f.restype = c_int
172 self.
f.argtypes = [
stripMeta(a)
for a
in args]
178 self.
inp = [
not isinstance(a, OUTPUT)
for a
in args]
179 self.
in_args = [a
for a
in args
if not isinstance(a, OUTPUT)]
180 self.
out_args = [a
for a
in args
if isinstance(a, OUTPUT)]
183 for i
in range(len(self.
in_args)):
184 if isinstance(self.
in_args[i], _OUTSTRLEN):
187 ds = name +
"\n\nArguments:\n===========\n"
188 for i
in range(len(args)):
190 if i < len(argnames):
192 ds +=
"\t%s\t%s\n" % (args[i], an)
201 if len(args) < len(self.
in_args):
202 raise TypeError(
"Not enough arguments passed to %s" % self.
name)
209 for j
in range(len(self.
inp)):
214 r, ar = self.
fargs[j].getVar(bs)
223 if not res == AT_SUCCESS:
224 if res == AT_ERR_TIMEDOUT
or res == AT_ERR_NODATA:
238def dllFunc(name, args=[], argnames=[], lib="ATCORE"):
240 globals()[name[3:]] = f
254dllFunc(
"AT_SetInt", [AT_H, STRING, AT_64])
259dllFunc(
"AT_SetFloat", [AT_H, STRING, c_double])
264dllFunc(
"AT_SetBool", [AT_H, STRING, AT_BOOL])
267dllFunc(
"AT_SetEnumerated", [AT_H, STRING, c_int])
268dllFunc(
"AT_SetEnumeratedString", [AT_H, STRING, STRING])
270dllFunc(
"AT_GetEnumeratedCount", [AT_H, STRING,
OUTPUT(c_int)])
272 "AT_IsEnumeratedIndexAvailable", [AT_H, STRING, c_int,
OUTPUT(AT_BOOL)]
275 "AT_IsEnumeratedIndexImplemented", [AT_H, STRING, c_int,
OUTPUT(AT_BOOL)]
277dllFunc(
"AT_GetEnumeratedString", [AT_H, STRING, c_int, OUTSTRING, OUTSTRLEN])
279dllFunc(
"AT_SetEnumIndex", [AT_H, STRING, c_int])
280dllFunc(
"AT_SetEnumString", [AT_H, STRING, STRING])
283dllFunc(
"AT_IsEnumIndexAvailable", [AT_H, STRING, c_int,
OUTPUT(AT_BOOL)])
284dllFunc(
"AT_IsEnumIndexImplemented", [AT_H, STRING, c_int,
OUTPUT(AT_BOOL)])
285dllFunc(
"AT_GetEnumStringByIndex", [AT_H, STRING, c_int, OUTSTRING, OUTSTRLEN])
287dllFunc(
"AT_Command", [AT_H, POINTER(AT_WC)])
289dllFunc(
"AT_SetString", [AT_H, STRING, STRING])
290dllFunc(
"AT_GetString", [AT_H, STRING, OUTSTRING, OUTSTRLEN])
291dllFunc(
"AT_GetStringMaxLength", [AT_H, STRING,
OUTPUT(c_int)])
293dllFunc(
"AT_QueueBuffer", [AT_H, POINTER(AT_U8), c_int])
298 "AT_RegisterFeatureCallback",
299 [AT_H, POINTER(AT_WC), CALLBACKTYPE, c_void_p],
302 "AT_UnregisterFeatureCallback",
303 [AT_H, POINTER(AT_WC), CALLBACKTYPE, c_void_p],
307dllFunc(
"AT_InitialiseUtilityLibrary", lib=
"ATUTIL")
308dllFunc(
"AT_FinaliseUtilityLibrary", lib=
"ATUTIL")
311 [POINTER(AT_U8), POINTER(AT_U8), AT_64, AT_64, AT_64, STRING, STRING],
315 "AT_ConvertBufferUsingMetadata",
316 [POINTER(AT_U8), POINTER(AT_U8), AT_64, STRING],
321InitialiseUtilityLibrary()
__init__(self, fcnName, errNo)
__init__(self, name, args=[], argnames=[], lib="ATCORE")
dllFunc(name, args=[], argnames=[], lib="ATCORE")