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))
307 else ret = pdv_serial_wait(m_pdv, m_readTimeout/2, 1);
311 if(ret == 0 && pdv_get_waitchar(m_pdv, &waitc))
313 derivedT::template log<software_error>({__FILE__, __LINE__,
"PDV: timeout in serial response"});
324 EdtDev *edt_p = NULL;
334 derived().m_modeName = modeName;
341 if(derived().m_cameraModes.count(modeName) != 1)
347 std::string configFile;
349 if(derivedT::c_edtCamera_relativeConfigPath)
351 configFile = derived().configDir() +
"/";
354 configFile += derived().m_cameraModes[modeName].m_configFile;
357 derivedT::template log<text_log>(
"Loading EDT PDV config file: " + configFile);
359 if ((dd_p = pdv_alloc_dependent()) == NULL)
361 return derivedT::template log<
software_error, -1>({__FILE__, __LINE__,
"EDT PDV alloc_dependent FAILED"});
364 if (pdv_readcfg(configFile.c_str(), dd_p, &edtinfo) != 0)
367 return derivedT::template log<
software_error, -1>({__FILE__, __LINE__,
"EDT PDV readcfg FAILED"});
371 char edt_devname[128];
372 strncpy(edt_devname, EDT_INTERFACE,
sizeof(edt_devname));
374 if ((edt_p = edt_open_channel(edt_devname, m_unit, m_channel)) == NULL)
379 return derivedT::template log<
software_error, -1>({__FILE__, __LINE__, std::string(
"EDT PDV edt_open_channel FAILED: ") + errstr});
389 if (pdv_initcam(edt_p, dd_p, m_unit, &edtinfo, configFile.c_str(), bitdir, pdv_debug) != 0)
393 return derivedT::template log<
software_error, -1>({__FILE__, __LINE__,
"initcam failed. Run with '--logLevel=DBG' to see complete debugging output."});
400 if ((m_pdv = pdv_open_channel(edt_devname, m_unit, m_channel)) == NULL)
402 std::string errstr = std::string(
"pdv_open_channel(") + edt_devname + std::to_string(m_unit) +
"_" + std::to_string(m_channel) +
")";
404 derivedT::template log<software_error>({__FILE__, __LINE__, errstr});
405 derivedT::template log<software_error>({__FILE__, __LINE__, errno});
410 pdv_flush_fifo(m_pdv);
412 pdv_serial_read_enable(m_pdv);
414 m_raw_width = pdv_get_width(m_pdv);
415 m_raw_height = pdv_get_height(m_pdv);
416 m_raw_depth = pdv_get_depth(m_pdv);
417 m_cameraType = pdv_get_cameratype(m_pdv);
419 derivedT::template log<text_log>(
"Initialized framegrabber: " + m_cameraType);
420 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));
426 pdv_multibuf(m_pdv, m_numBuffs);
427 derivedT::template log<text_log>(
"allocated " + std::to_string(m_numBuffs) +
" buffers");