265 const std::string & command
274 if( pdv_serial_command(m_pdv, command.c_str()) < 0)
276 derivedT::template log<software_error>({__FILE__, __LINE__,
"PDV: error sending serial command"});
282 ret = pdv_serial_wait(m_pdv, m_readTimeout, 1);
286 if(derived().powerState() != 1 || derived().powerStateTarget() != 1)
return -1;
288 derivedT::template log<software_error>({__FILE__, __LINE__,
"PDV: timeout, no serial response"});
292 u_char lastbyte, waitc;
300 if(ret > 0) response += buf;
303 if (*buf) lastbyte = (u_char)buf[strnlen(buf,
sizeof(buf))-1];
305 if (pdv_get_waitchar(m_pdv, &waitc) && (lastbyte == waitc))
311 ret = pdv_serial_wait(m_pdv, m_readTimeout/2, 1);
316 if(ret == 0 && pdv_get_waitchar(m_pdv, &waitc))
318 derivedT::template log<software_error>({__FILE__, __LINE__,
"PDV: timeout in serial response"});
329 EdtDev *edt_p = NULL;
339 derived().m_modeName = modeName;
346 if(derived().m_cameraModes.count(modeName) != 1)
352 std::string configFile;
354 if(derivedT::c_edtCamera_relativeConfigPath)
356 configFile = derived().configDir() +
"/";
359 configFile += derived().m_cameraModes[modeName].m_configFile;
362 derivedT::template log<text_log>(
"Loading EDT PDV config file: " + configFile);
364 if ((dd_p = pdv_alloc_dependent()) == NULL)
366 return derivedT::template log<
software_error, -1>({__FILE__, __LINE__,
"EDT PDV alloc_dependent FAILED"});
369 if (pdv_readcfg(configFile.c_str(), dd_p, &edtinfo) != 0)
372 return derivedT::template log<
software_error, -1>({__FILE__, __LINE__,
"EDT PDV readcfg FAILED"});
376 char edt_devname[128];
377 strncpy(edt_devname, EDT_INTERFACE,
sizeof(edt_devname));
379 if ((edt_p = edt_open_channel(edt_devname, m_unit, m_channel)) == NULL)
384 return derivedT::template log<
software_error, -1>({__FILE__, __LINE__, std::string(
"EDT PDV edt_open_channel FAILED: ") + errstr});
394 if (pdv_initcam(edt_p, dd_p, m_unit, &edtinfo, configFile.c_str(), bitdir, pdv_debug) != 0)
398 return derivedT::template log<
software_error, -1>({__FILE__, __LINE__,
"initcam failed. Run with '--logLevel=DBG' to see complete debugging output."});
405 if ((m_pdv = pdv_open_channel(edt_devname, m_unit, m_channel)) == NULL)
407 std::string errstr = std::string(
"pdv_open_channel(") + edt_devname + std::to_string(m_unit) +
"_" + std::to_string(m_channel) +
")";
409 derivedT::template log<software_error>({__FILE__, __LINE__, errstr});
410 derivedT::template log<software_error>({__FILE__, __LINE__, errno});
415 pdv_flush_fifo(m_pdv);
417 pdv_serial_read_enable(m_pdv);
419 m_raw_width = pdv_get_width(m_pdv);
420 m_raw_height = pdv_get_height(m_pdv);
421 m_raw_depth = pdv_get_depth(m_pdv);
422 m_cameraType = pdv_get_cameratype(m_pdv);
424 derivedT::template log<text_log>(
"Initialized framegrabber: " + m_cameraType);
425 derivedT::template log<text_log>(
"WxHxD: " + std::to_string(m_raw_width) +
" X " + std::to_string(m_raw_height) +
" X " + std::to_string(m_raw_depth));
431 pdv_multibuf(m_pdv, m_numBuffs);
432 derivedT::template log<text_log>(
"allocated " + std::to_string(m_numBuffs) +
" buffers");