1252 def _query(self, what=ATTR_CURRENT, force_query=False):
1253 """Query the DLL for an attribute for this parameter.
1254
1255 This returns pythonic types, not ctypes."""
1256 err = None
1257 key = (self, what)
1258 if self.cam._acquiring and not force_query:
1259 return self.__cache.get(key, None)
1260 if what == ATTR_AVAIL:
1261 return self.available
1262 elif not self.available:
1264 "Parameter %s is not available" % self.name
1265 )
1266 rtype = _attr_map[what]
1267 if not rtype:
1268 rtype = _get_param(self.cam.handle, self.param_id, ATTR_TYPE)
1269 if rtype.value == TYPE_CHAR_PTR:
1270 buf_len = _length_map[self.param_id]
1271 if not buf_len:
1273 "pvcam: parameter %s not supported in python." % self.name
1274 )
1275 try:
1276 result = _get_param(
1277 self.cam.handle, self.param_id, what, buf_len=buf_len
1278 )
1279 except Exception as e:
1280 err = e
1281 else:
1282 result = result.value
1283 else:
1284 try:
1285 result = _get_param(self.cam.handle, self.param_id, what)
1286 except Exception as e:
1287 err = e
1288 else:
1289 result = ctypes.POINTER(self._ctype)(result).contents.value
1290
1291 if err and err.args and err.args[0].startswith("pvcam error 49"):
1292 _logger.warn(
1293 "Parameter %s not available due to camera state.", self.name
1294 )
1295 result = None
1296 elif err:
1297 raise e
1298 else:
1299 self.__cache[key] = result
1300 return result
1301