Skip to content

Commit 0c8ba46

Browse files
committed
add getDeviceList
1 parent 482e152 commit 0c8ba46

File tree

4 files changed

+115
-14
lines changed

4 files changed

+115
-14
lines changed

pyzed/camera.pxd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
from libcpp cimport bool
2424
from libcpp.pair cimport pair
25+
from libcpp.vector cimport vector
2526

2627
cimport pyzed.defines as defines
2728
cimport pyzed.core as core
@@ -239,6 +240,9 @@ cdef extern from 'sl/Camera.hpp' namespace 'sl':
239240
@staticmethod
240241
types.ERROR_CODE sticktoCPUCore(int cpu_core)
241242

243+
@staticmethod
244+
vector[types.DeviceProperties] getDeviceList()
245+
242246
bool saveDepthAs(Camera &zed, defines.DEPTH_FORMAT format, types.String name, float factor)
243247
bool savePointCloudAs(Camera &zed, defines.POINT_CLOUD_FORMAT format, types.String name,
244248
bool with_color)

pyzed/camera.pyx

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,6 @@ cdef class PyZEDCamera:
713713
filename = area_file_path.encode()
714714
self.camera.disableTracking(types.String(<char*> filename))
715715

716-
717716
def reset_tracking(self, core.PyTransform path):
718717
return types.PyERROR_CODE(self.camera.resetTracking(path.transform))
719718

@@ -762,15 +761,27 @@ cdef class PyZEDCamera:
762761
def disable_recording(self):
763762
self.camera.disableRecording()
764763

765-
def get_sdk_version(self):
766-
return self.camera.getSDKVersion().get().decode()
764+
def get_sdk_version(cls):
765+
return cls.camera.getSDKVersion().get().decode()
767766

768-
def is_zed_connected(self):
769-
return self.camera.isZEDconnected()
767+
def is_zed_connected(cls):
768+
return cls.camera.isZEDconnected()
770769

771-
def stickto_cpu_core(self, int cpu_core):
772-
return types.PyERROR_CODE(self.camera.sticktoCPUCore(cpu_core))
770+
def stickto_cpu_core(cls, int cpu_core):
771+
return types.PyERROR_CODE(cls.camera.sticktoCPUCore(cpu_core))
773772

773+
def get_device_list(cls):
774+
vect_ = cls.camera.getDeviceList()
775+
vect_python = []
776+
for i in range(vect_.size()):
777+
prop = types.PyDeviceProperties()
778+
prop.camera_state = vect_[i].camera_state
779+
prop.id = vect_[i].id
780+
prop.path = vect_[i].path.get().decode()
781+
prop.camera_model = vect_[i].camera_model
782+
prop.serial_number = vect_[i].serial_number
783+
vect_python.append(prop)
784+
return vect_python
774785

775786
def save_camera_depth_as(PyZEDCamera zed, format, str name, factor=1):
776787
if isinstance(format, defines.PyDEPTH_FORMAT) and factor <= 65536:
@@ -779,7 +790,6 @@ def save_camera_depth_as(PyZEDCamera zed, format, str name, factor=1):
779790
else:
780791
raise TypeError("Arguments must be of PyDEPTH_FORMAT type and factor not over 65536.")
781792

782-
783793
def save_camera_point_cloud_as(PyZEDCamera zed, format, str name, with_color=False):
784794
if isinstance(format, defines.PyPOINT_CLOUD_FORMAT):
785795
name_save = name.encode()

pyzed/types.pxd

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ cdef extern from "sl/types.hpp" namespace "sl":
6060
ERROR_CODE_NO_GPU_DETECTED,
6161
ERROR_CODE_LAST
6262

63-
String errorCode2str(ERROR_CODE err)
63+
String toString(ERROR_CODE o)
6464

6565
void sleep_ms(int time)
6666

@@ -70,16 +70,32 @@ cdef extern from "sl/types.hpp" namespace "sl":
7070
MODEL_LAST
7171

7272
String model2str(MODEL model)
73+
String toString(MODEL o)
7374

74-
cdef cppclass String 'sl::String':
75+
ctypedef enum CAMERA_STATE:
76+
CAMERA_STATE_AVAILABLE,
77+
CAMERA_STATE_NOT_AVAILABLE,
78+
CAMERA_STATE_LAST
79+
80+
String toString(CAMERA_STATE o)
7581

82+
cdef cppclass String 'sl::String':
7683
String()
7784
String(const char *data)
7885
void set(const char *data)
7986
const char *get() const
8087
bool empty() const
8188
string std_str() const
8289

90+
cdef cppclass DeviceProperties:
91+
DeviceProperties()
92+
CAMERA_STATE camera_state
93+
int id
94+
String path
95+
MODEL camera_model
96+
unsigned int serial_number
97+
98+
String toString(DeviceProperties o)
8399

84100
cdef cppclass Vector2[T]:
85101
int size()

pyzed/types.pyx

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,26 +57,97 @@ class PyERROR_CODE(enum.Enum):
5757
PyERROR_CODE_LAST = ERROR_CODE_LAST
5858

5959
def __str__(self):
60-
return to_str(errorCode2str(self.value)).decode()
60+
return to_str(toString(<ERROR_CODE>self.value)).decode()
6161

6262
def __repr__(self):
63-
return to_str(errorCode2str(self.value)).decode()
63+
return to_str(toString(<ERROR_CODE>self.value)).decode()
6464

6565
class PyMODEL(enum.Enum):
6666
PyMODEL_ZED = MODEL_ZED
6767
PyMODEL_ZED_M = MODEL_ZED_M
6868
PyMODEL_LAST = MODEL_LAST
6969

7070
def __str__(self):
71-
return to_str(model2str(self.value)).decode()
71+
return to_str(toString(<MODEL>self.value)).decode()
7272

7373
def __repr__(self):
74-
return to_str(model2str(self.value)).decode()
74+
return to_str(toString(<MODEL>self.value)).decode()
7575

76+
class PyCAMERA_STATE(enum.Enum):
77+
PyCAMERA_STATE_AVAILABLE = CAMERA_STATE_AVAILABLE
78+
PyCAMERA_STATE_NOT_AVAILABLE = CAMERA_STATE_NOT_AVAILABLE
79+
PyCAMERA_STATE_LAST = CAMERA_STATE_LAST
80+
81+
def __str__(self):
82+
return to_str(toString(<CAMERA_STATE>self.value)).decode()
83+
84+
def __repr__(self):
85+
return to_str(toString(<CAMERA_STATE>self.value)).decode()
7686

7787
def c_sleep_ms(int time):
7888
sleep_ms(time)
7989

90+
cdef class PyDeviceProperties:
91+
cdef DeviceProperties c_device_properties
92+
93+
def __cinit__(self):
94+
self.c_device_properties = DeviceProperties()
95+
96+
@property
97+
def camera_state(self):
98+
return self.c_device_properties.camera_state
99+
@camera_state.setter
100+
def camera_state(self, camera_state):
101+
if isinstance(camera_state, PyCAMERA_STATE):
102+
self.c_device_properties.camera_state = (<CAMERA_STATE> camera_state.value)
103+
elif isinstance(camera_state, int):
104+
self.c_device_properties.camera_state = (<CAMERA_STATE> camera_state)
105+
else:
106+
raise TypeError("Argument is not of PyCAMERA_STATE type.")
107+
108+
@property
109+
def id(self):
110+
return self.c_device_properties.id
111+
@id.setter
112+
def id(self, id):
113+
self.c_device_properties.id = id
114+
115+
@property
116+
def path(self):
117+
if not self.c_device_properties.path.empty():
118+
return self.c_device_properties.path.get().decode()
119+
else:
120+
return ""
121+
@path.setter
122+
def path(self, str path):
123+
path_ = path.encode()
124+
self.c_device_properties.path = (String(<char*> path_))
125+
126+
@property
127+
def camera_model(self):
128+
return self.c_device_properties.camera_model
129+
@camera_model.setter
130+
def camera_model(self, camera_model):
131+
if isinstance(camera_model, PyMODEL):
132+
self.c_device_properties.camera_model = (<MODEL> camera_model.value)
133+
elif isinstance(camera_model, int):
134+
self.c_device_properties.camera_model = (<MODEL> camera_model)
135+
else:
136+
raise TypeError("Argument is not of PyMODEL type.")
137+
138+
@property
139+
def serial_number(self):
140+
return self.c_device_properties.serial_number
141+
@serial_number.setter
142+
def serial_number(self, serial_number):
143+
self.c_device_properties.serial_number = serial_number
144+
145+
def __str__(self):
146+
return to_str(toString(self.c_device_properties)).decode()
147+
148+
def __repr__(self):
149+
return to_str(toString(self.c_device_properties)).decode()
150+
80151

81152
cdef class PyMatrix3f:
82153
def __cinit__(self):

0 commit comments

Comments
 (0)