@@ -608,6 +608,12 @@ PyMethodDef IcsMethods[] = {
608608 meth_get_device_name,
609609 METH_VARARGS,
610610 _DOC_GET_DEVICE_NAME),
611+ _EZ_ICS_STRUCT_METHOD (" get_imei" ,
612+ " icsneoGetIMEI" ,
613+ " GetIMEI" ,
614+ meth_get_imei,
615+ METH_VARARGS,
616+ _DOC_GET_IMEI),
611617
612618 { " override_library_name" , (PyCFunction)meth_override_library_name, METH_VARARGS, _DOC_OVERRIDE_LIBRARY_NAME },
613619 { " get_library_path" , (PyCFunction)meth_get_library_path, METH_NOARGS, " " },
@@ -1952,19 +1958,19 @@ PyObject* meth_get_error_messages(PyObject* self, PyObject* args)
19521958 int description_short_length = 255 ;
19531959 int description_long_length = 255 ;
19541960 int severity = 0 , restart_needed = 0 ;
1955- auto gil = PyAllowThreads ();
1961+ auto gil2 = PyAllowThreads ();
19561962 if (!icsneoGetErrorInfo (errors[i],
19571963 description_short,
19581964 description_long,
19591965 &description_short_length,
19601966 &description_long_length,
19611967 &severity,
19621968 &restart_needed)) {
1963- gil .restore ();
1969+ gil2 .restore ();
19641970 Py_XDECREF (list);
19651971 return set_ics_exception (exception_runtime_error (), " icsneoGetErrorInfo() Failed" );
19661972 }
1967- gil .restore ();
1973+ gil2 .restore ();
19681974 PyObject* tuple = Py_BuildValue (
19691975 " i, s, s, i, i" , errors[i], description_short, description_long, severity, restart_needed);
19701976
@@ -5445,3 +5451,36 @@ PyObject* meth_get_device_name(PyObject* self, PyObject* args) // icsneoGetDevic
54455451 return set_ics_exception (exception_runtime_error (), (char *)ex.what ());
54465452 }
54475453}
5454+
5455+ PyObject* meth_get_imei (PyObject* self, PyObject* args) { // icsneoGetIMEI
5456+ (void )self;
5457+ PyObject* obj = NULL ;
5458+ if (!PyArg_ParseTuple (args, arg_parse (" O:" , __FUNCTION__), &obj)) {
5459+ return NULL ;
5460+ }
5461+ if (!PyNeoDeviceEx_CheckExact (obj)) {
5462+ return set_ics_exception (exception_runtime_error (), " Argument must be of type " MODULE_NAME " .PyNeoDeviceEx" );
5463+ }
5464+ void * handle = NULL ;
5465+ if (!PyNeoDeviceEx_GetHandle (obj, &handle)) {
5466+ return NULL ;
5467+ }
5468+ try {
5469+ ice::Library* lib = dll_get_library ();
5470+ if (!lib) {
5471+ char buffer[512 ];
5472+ return set_ics_exception (exception_runtime_error (), dll_get_error (buffer));
5473+ }
5474+ uint64_t imei = 0 ;
5475+ ice::Function<int __stdcall (void *, uint64_t *)> icsneoGetIMEI (lib, " icsneoGetIMEI" );
5476+ auto gil = PyAllowThreads ();
5477+ if (!icsneoGetIMEI (handle, &imei)) {
5478+ gil.restore ();
5479+ return set_ics_exception (exception_runtime_error (), " icsneoGetIMEI() Failed" );
5480+ }
5481+ gil.restore ();
5482+ return Py_BuildValue (" K" , imei);
5483+ } catch (ice::Exception& ex) {
5484+ return set_ics_exception (exception_runtime_error (), (char *)ex.what ());
5485+ }
5486+ }
0 commit comments