Commit d3a2a598 authored by Alejandro Homs Puron's avatar Alejandro Homs Puron

* Using proper Frelon implementation of HardTrigDisable

  when TriggerMode is IntTrig or while Idle (not running),
  implemented through set/getExtSyncEnable methods
* Always call Frelon::Camera::stop at the end of acq.;
  hardware layer acq. status is now given by the camera
* Implement automatic register write retry if seq. is BuSY
* Force an Aurora link reset at startup only if CHAN_UP_LED
  is detected inactive; wait 5 seconds for Frelon AMT resetup
* Added new Sequencer and AMT (SPB2) status commands,
  including getImageCount method
* Test seq. & AMT status at startup; perform HardReset if not idle
* Added SPB2 (HD) Precision/Speed config settings
* Replaced FrelonAcq.set/getKinPars by set/getRoiBinOffset;
  implemented set/getRoiLineBegin
* Removed setting (the ignored) RoiFast in Kinetic RoiMode
* Added E2V_4k / NotMPP chips, as well as the Hamamatsu
  linear detector; implemented (non-tested) variable
  MaxFrameDim depending of the detected chip
parent d5a1a64b
...@@ -47,7 +47,9 @@ enum Reg { ...@@ -47,7 +47,9 @@ enum Reg {
Version, CompSerNb, Warn, LastWarn, Version, CompSerNb, Warn, LastWarn,
LineClockPer, PixelClockPer, FirstPHIVLen, PHIHSetupLen, LineClockPer, PixelClockPer, FirstPHIVLen, PHIHSetupLen,
SingleVertXfer, SingleHorzXfer, AllVertXfer, AllHorzXfer, SingleVertXfer, SingleHorzXfer, AllVertXfer, AllHorzXfer,
ReadoutTime, TransferTime, CcdModesAvail, ReadoutTime, TransferTime, CcdModesAvail, StatusSeqA,
StatusAMTA, StatusAMTB, StatusAMTC, StatusAMTD,
LookUpTable,
}; };
typedef std::map<Reg, std::string> RegStrMapType; typedef std::map<Reg, std::string> RegStrMapType;
...@@ -71,7 +73,7 @@ extern CmdStrMapType CmdStrMap; ...@@ -71,7 +73,7 @@ extern CmdStrMapType CmdStrMap;
enum MultiLineCmd { enum MultiLineCmd {
Help, Config, Dac, Volt, Help, Config, Dac, Volt,
Aoi, PLL, Timing, Aoi, PLL, Timing, StatusCam,
}; };
typedef std::map<MultiLineCmd, std::string> MultiLineCmdStrMapType; typedef std::map<MultiLineCmd, std::string> MultiLineCmdStrMapType;
...@@ -127,14 +129,19 @@ typedef std::map<TimeUnitFactor, double> TimeUnitFactorMapType; ...@@ -127,14 +129,19 @@ typedef std::map<TimeUnitFactor, double> TimeUnitFactorMapType;
extern TimeUnitFactorMapType TimeUnitFactorMap; extern TimeUnitFactorMapType TimeUnitFactorMap;
extern const FrameDim MaxFrameDim;
enum ChipType { enum ChipType {
Atmel, Atmel,
Kodak, Kodak,
E2V, E2V_2k,
E2V_2kNotMPP,
E2V_4k,
E2V_4kNotMPP,
Hama,
}; };
typedef std::map<ChipType, FrameDim> ChipMaxFrameDimMapType;
extern ChipMaxFrameDimMapType ChipMaxFrameDimMap;
typedef std::map<ChipType, double> ChipPixelSizeMapType; typedef std::map<ChipType, double> ChipPixelSizeMapType;
extern ChipPixelSizeMapType ChipPixelSizeMap; extern ChipPixelSizeMapType ChipPixelSizeMap;
...@@ -148,22 +155,56 @@ enum { ...@@ -148,22 +155,56 @@ enum {
MaxBinY = 1024, MaxBinY = 1024,
}; };
enum ExtSync {
ExtSyncNone = 0,
ExtSyncStart = 1,
ExtSyncStop = 2,
ExtSyncBoth = 3,
};
enum Status { enum Status {
Wait = 0x80, InInit = 0x200,
Transfer = 0x40, EspiaXfer = 0x100,
Exposure = 0x20, Wait = 0x080,
Shutter = 0x10, Transfer = 0x040,
Readout = 0x08, Exposure = 0x020,
Latency = 0x04, Shutter = 0x010,
ExtStart = 0x02, Readout = 0x008,
ExtStop = 0x01, Latency = 0x004,
StatusMask = 0xff, ExtStart = 0x002,
ExtStop = 0x001,
StatusMask = 0x3ff,
};
enum StatusSPB2 {
SPB2_GBitFifoPixEmpty = 0x8000,
SPB2_FifoOutEmpty = 0x4000,
SPB2_FifoInEmpty = 0x2000,
SPB2_FifoLUTEmpty = 0x1000,
SPB2_FifoChan4Empty = 0x0800,
SPB2_FifoChan3Empty = 0x0400,
SPB2_FifoChan2Empty = 0x0200,
SPB2_FifoChan1Empty = 0x0100,
SPB2_FifoEmptyMask = 0xff00,
SPB2_TstEnvFrmOut = 0x0040,
SPB2_TstEnvFrmIn = 0x0020,
SPB2_TstEnvMask = 0x0060,
SPB2_TstFlashUsrReady = 0x0010,
SPB2_EndInitRam = 0x0008,
SPB2_EndFlashRead = 0x0004,
SPB2_AuroraChanUp = 0x0002,
SPB2_DcmLocked = 0x0001,
SPB2_TstInitMask = 0x001f,
SPB2_TstInitGood = 0x001f,
}; };
enum ShutMode { enum ShutMode {
Off, AutoFrame, Off, AutoFrame,
}; };
enum SPB2Config {
SPB2Precision, SPB2Speed,
};
} // namespace Frelon } // namespace Frelon
......
...@@ -63,6 +63,7 @@ class Camera : public HwMaxImageSizeCallbackGen ...@@ -63,6 +63,7 @@ class Camera : public HwMaxImageSizeCallbackGen
static std::string getInputChanModeName(FrameTransferMode ftm, static std::string getInputChanModeName(FrameTransferMode ftm,
InputChan input_chan); InputChan input_chan);
void getMaxFrameDim(FrameDim& max_frame_dim);
void getFrameDim(FrameDim& frame_dim); void getFrameDim(FrameDim& frame_dim);
bool isChanActive(InputChan curr, InputChan chan); bool isChanActive(InputChan curr, InputChan chan);
...@@ -103,23 +104,37 @@ class Camera : public HwMaxImageSizeCallbackGen ...@@ -103,23 +104,37 @@ class Camera : public HwMaxImageSizeCallbackGen
void setNbFrames(int nb_frames); void setNbFrames(int nb_frames);
void getNbFrames(int& nb_frames); void getNbFrames(int& nb_frames);
void getStatus(Status& status); void setSPB2Config(SPB2Config spb2_config);
bool waitStatus(Status& status, Status mask, double timeout); void getSPB2Config(SPB2Config& spb2_config);
void setExtSyncEnable(ExtSync ext_sync_ena);
void getExtSyncEnable(ExtSync& ext_sync_ena);
void getStatus(Status& status, bool use_ser_line=false,
bool read_spb2=false);
bool waitStatus(Status& status, Status mask, double timeout,
bool use_ser_line=false, bool read_spb2=false);
void getImageCount(unsigned int& img_count, bool only_lsw=false);
void start(); void start();
void stop(); void stop();
bool isRunning();
protected: protected:
virtual void setMaxImageSizeCallbackActive(bool cb_active); virtual void setMaxImageSizeCallbackActive(bool cb_active);
private: private:
static const double ResetLinkWaitTime;
static const double UpdateCcdStatusTime; static const double UpdateCcdStatusTime;
static const double MaxIdleWaitTime; static const double MaxIdleWaitTime;
static const double MaxBusyRetryTime;
Espia::Dev& getEspiaDev(); Espia::Dev& getEspiaDev();
void sync(); void sync();
void syncRegs(); void syncRegs();
void syncRegsGoodHTD();
void sendCmd(Cmd cmd); void sendCmd(Cmd cmd);
...@@ -160,10 +175,11 @@ class Camera : public HwMaxImageSizeCallbackGen ...@@ -160,10 +175,11 @@ class Camera : public HwMaxImageSizeCallbackGen
void processSetRoi(const Roi& req_roi, Roi& hw_roi, Roi& chan_roi, void processSetRoi(const Roi& req_roi, Roi& hw_roi, Roi& chan_roi,
Point& roi_offset); Point& roi_offset);
void setTimeUnitFactor(TimeUnitFactor time_unit_factor); void setTimeUnitFactor(TimeUnitFactor time_unit_factor);
void getTimeUnitFactor(TimeUnitFactor& time_unit_factor); void getTimeUnitFactor(TimeUnitFactor& time_unit_factor);
AutoMutex lock();
SerialLine m_ser_line; SerialLine m_ser_line;
Model m_model; Model m_model;
TimingCtrl m_timing_ctrl; TimingCtrl m_timing_ctrl;
...@@ -171,6 +187,8 @@ class Camera : public HwMaxImageSizeCallbackGen ...@@ -171,6 +187,8 @@ class Camera : public HwMaxImageSizeCallbackGen
TrigMode m_trig_mode; TrigMode m_trig_mode;
int m_nb_frames; int m_nb_frames;
bool m_mis_cb_act; bool m_mis_cb_act;
Mutex m_lock;
bool m_started;
}; };
inline bool Camera::isChanActive(InputChan curr, InputChan chan) inline bool Camera::isChanActive(InputChan curr, InputChan chan)
...@@ -178,6 +196,10 @@ inline bool Camera::isChanActive(InputChan curr, InputChan chan) ...@@ -178,6 +196,10 @@ inline bool Camera::isChanActive(InputChan curr, InputChan chan)
return (curr & chan) == chan; return (curr & chan) == chan;
}; };
inline AutoMutex Camera::lock()
{
return AutoMutex(m_lock);
}
} // namespace Frelon } // namespace Frelon
......
...@@ -34,6 +34,27 @@ namespace Frelon ...@@ -34,6 +34,27 @@ namespace Frelon
class Interface; class Interface;
/*******************************************************************
* \class AcqEndCallback
* \brief Class executing camera commands at the end of acq.
*******************************************************************/
class AcqEndCallback : public Espia::AcqEndCallback
{
DEB_CLASS_NAMESPC(DebModCamera, "AcqEndCallback", "Frelon");
public:
AcqEndCallback(Camera& cam);
virtual ~AcqEndCallback();
protected:
virtual void acqFinished(const HwFrameInfoType& /*finfo*/);
private:
Camera& m_cam;
};
/******************************************************************* /*******************************************************************
* \class DetInfoCtrlObj * \class DetInfoCtrlObj
* \brief Control object providing Frelon detector info interface * \brief Control object providing Frelon detector info interface
...@@ -135,22 +156,8 @@ class SyncCtrlObj : public HwSyncCtrlObj ...@@ -135,22 +156,8 @@ class SyncCtrlObj : public HwSyncCtrlObj
virtual void getValidRanges(ValidRangesType& valid_ranges); virtual void getValidRanges(ValidRangesType& valid_ranges);
private: private:
class AcqEndCallback : public Espia::AcqEndCallback
{
DEB_CLASS_NAMESPC(DebModCamera, "SyncCtrlObj::AcqEndCallback",
"Frelon");
public:
AcqEndCallback(Camera& cam);
virtual ~AcqEndCallback();
protected:
virtual void acqFinished(const HwFrameInfoType& /*finfo*/);
private:
Camera& m_cam;
};
Espia::Acq& m_acq; Espia::Acq& m_acq;
Camera& m_cam; Camera& m_cam;
AcqEndCallback m_acq_end_cb;
}; };
...@@ -323,6 +330,8 @@ class Interface : public HwInterface ...@@ -323,6 +330,8 @@ class Interface : public HwInterface
BufferCtrlMgr& m_buffer_mgr; BufferCtrlMgr& m_buffer_mgr;
Camera& m_cam; Camera& m_cam;
Frelon::AcqEndCallback m_acq_end_cb;
CapList m_cap_list; CapList m_cap_list;
DetInfoCtrlObj m_det_info; DetInfoCtrlObj m_det_info;
BufferCtrlObj m_buffer; BufferCtrlObj m_buffer;
......
...@@ -123,6 +123,7 @@ class Model ...@@ -123,6 +123,7 @@ class Model
bool hasTaper(); bool hasTaper();
bool hasModesAvail(); bool hasModesAvail();
bool hasTimeCalc(); bool hasTimeCalc();
bool hasGoodHTD();
double getPixelSize(); double getPixelSize();
......
...@@ -198,7 +198,7 @@ class FrelonAcq: ...@@ -198,7 +198,7 @@ class FrelonAcq:
raise Exception, 'Acquisition is running' raise Exception, 'Acquisition is running'
chip_type = self.m_cam.getModel().getChipType() chip_type = self.m_cam.getModel().getChipType()
is_e2v = (chip_type == Frelon.E2V) is_e2v = (chip_type == Frelon.E2V_2k)
corr_act = (is_e2v and self.m_e2v_corr_act) corr_act = (is_e2v and self.m_e2v_corr_act)
deb.Param('is_e2v=%s, self.m_e2v_corr_act=%s' % (is_e2v, deb.Param('is_e2v=%s, self.m_e2v_corr_act=%s' % (is_e2v,
self.m_e2v_corr_act)) self.m_e2v_corr_act))
...@@ -315,54 +315,45 @@ class FrelonAcq: ...@@ -315,54 +315,45 @@ class FrelonAcq:
return roi_mode return roi_mode
@DEB_MEMBER_FUNCT @DEB_MEMBER_FUNCT
def setKinPars(self, kin_win_size, kin_line_beg, kin_stripes): def setRoiBinOffset(self, roi_bin_offset):
deb.Param('Setting kin pars: ' + deb.Param('Setting Roi-Bin offset: %s' % roi_bin_offset)
'kin_win_size=%s, kin_line_beg=%s, kin_stripes=%s' % \ self.m_cam.setRoiBinOffset(roi_bin_offset)
(kin_win_size, kin_line_beg, kin_stripes))
if kin_stripes > 1:
deb.Warning('Ignoring kin_stripes=%d' % kin_stripes)
bin = self.m_ct_image.getBin()
if kin_win_size % bin.getY() != 0:
msg = 'Invalid kinetics window size (%d): ' % kin_win_size + \
'must be multiple of vert. bin (%d)' % bin.getY()
raise Exception, msg
roi = self.m_ct_image.getRoi() @DEB_MEMBER_FUNCT
if roi.isEmpty(): def getRoiBinOffset(self):
roi = self.getMaxRoi() roi_bin_offset = self.m_cam.getRoiBinOffset()
deb.Return('Getting Roi-Bin offset: %s' % roi_bin_offset)
return roi_bin_offset
@DEB_MEMBER_FUNCT
def setRoiLineBegin(self, roi_line_beg):
deb.Param('Setting Roi line begin: %s' % roi_line_beg)
bin = self.m_ct_image.getBin()
roi = self.getRoi()
roi = roi.getUnbinned(bin) roi = roi.getUnbinned(bin)
tl = Point(roi.getTopLeft().x, kin_line_beg) tl = Point(roi.getTopLeft().x, roi_line_beg)
tl_aligned = Point(tl) tl_aligned = Point(tl)
tl_aligned.alignTo(Point(bin), Floor) tl_aligned.alignTo(Point(bin), Floor)
size = Size(roi.getSize().getWidth(), kin_win_size) roi.setTopLeft(tl_aligned)
roi = Roi(tl_aligned, size)
roi = roi.getBinned(bin) roi = roi.getBinned(bin)
self.m_ct_image.setRoi(roi) self.m_ct_image.setRoi(roi)
roi_bin_offset = tl roi_bin_offset = tl
roi_bin_offset -= tl_aligned roi_bin_offset -= tl_aligned
self.m_cam.setRoiBinOffset(roi_bin_offset) self.setRoiBinOffset(roi_bin_offset)
@DEB_MEMBER_FUNCT @DEB_MEMBER_FUNCT
def getKinPars(self): def getRoiLineBegin(self):
bin = self.m_ct_image.getBin() bin = self.m_ct_image.getBin()
roi = self.m_ct_image.getRoi() roi = self.getRoi()
if roi.isEmpty():
roi = self.getMaxRoi()
roi = roi.getUnbinned(bin) roi = roi.getUnbinned(bin)
kin_win_size = roi.getSize().getHeight()
tl = roi.getTopLeft() tl = roi.getTopLeft()
tl += self.m_cam.getRoiBinOffset() tl += self.getRoiBinOffset()
kin_line_beg = tl.y roi_line_beg = tl.y
kin_stripes = 1 deb.Return('Getting Roi line begin: %s' % roi_line_beg)
deb.Return('Getting kin pars: ' + return roi_line_beg
'kin_win_size=%s, kin_line_beg=%s, kin_stripes=%s' % \
(kin_win_size, kin_line_beg, kin_stripes))
return kin_win_size, kin_line_beg, kin_stripes
@DEB_MEMBER_FUNCT @DEB_MEMBER_FUNCT
def setFrameTransferMode(self, ftm): def setFrameTransferMode(self, ftm):
......
...@@ -42,7 +42,8 @@ enum Reg { ...@@ -42,7 +42,8 @@ enum Reg {
Version, CompSerNb, Warn, LastWarn, Version, CompSerNb, Warn, LastWarn,
LineClockPer, PixelClockPer, FirstPHIVLen, PHIHSetupLen, LineClockPer, PixelClockPer, FirstPHIVLen, PHIHSetupLen,
SingleVertXfer, SingleHorzXfer, AllVertXfer, AllHorzXfer, SingleVertXfer, SingleHorzXfer, AllVertXfer, AllHorzXfer,
ReadoutTime, TransferTime, CcdModesAvail, ReadoutTime, TransferTime, CcdModesAvail, StatusSeqA,
StatusAMTA, StatusAMTB, StatusAMTC, StatusAMTD,
}; };
/* /*
typedef std::map<Reg, std::string> RegStrMapType; typedef std::map<Reg, std::string> RegStrMapType;
...@@ -64,7 +65,7 @@ extern CmdStrMapType CmdStrMap; ...@@ -64,7 +65,7 @@ extern CmdStrMapType CmdStrMap;
enum MultiLineCmd { enum MultiLineCmd {
Help, Config, Dac, Volt, Help, Config, Dac, Volt,
Aoi, PLL, Timing, Aoi, PLL, Timing, StatusCam,
}; };
/* /*
typedef std::map<MultiLineCmd, std::string> MultiLineCmdStrMapType; typedef std::map<MultiLineCmd, std::string> MultiLineCmdStrMapType;
...@@ -117,37 +118,81 @@ typedef std::map<TimeUnitFactor, double> TimeUnitFactorMapType; ...@@ -117,37 +118,81 @@ typedef std::map<TimeUnitFactor, double> TimeUnitFactorMapType;
extern TimeUnitFactorMapType TimeUnitFactorMap; extern TimeUnitFactorMapType TimeUnitFactorMap;
extern const FrameDim MaxFrameDim;
*/ */
enum ChipType { enum ChipType {
Atmel, Atmel,
Kodak, Kodak,
E2V, E2V_2k,
E2V_2kNotMPP,
E2V_4k,
E2V_4kNotMPP,
Hama,
}; };
/* /*
typedef std::map<ChipType, FrameDim> ChipMaxFrameDimMapType;
extern ChipMaxFrameDimMapType ChipMaxFrameDimMap;
typedef std::map<ChipType, double> ChipPixelSizeMapType; typedef std::map<ChipType, double> ChipPixelSizeMapType;
extern ChipPixelSizeMapType ChipPixelSizeMap; extern ChipPixelSizeMapType ChipPixelSizeMap;
*/ */
enum {
AtmelModesAvail = 0x0fff,
KodakModesAvail = 0x0100,
};
enum { enum {
MaxBinX = 8, MaxBinX = 8,
MaxBinY = 1024, MaxBinY = 1024,
}; };
enum ExtSync {
ExtSyncNone = 0,
ExtSyncStart = 1,
ExtSyncStop = 2,
ExtSyncBoth = 3,
};
enum Status { enum Status {
Wait = 0x80, InInit = 0x200,
Transfer = 0x40, EspiaXfer = 0x100,
Exposure = 0x20, Wait = 0x080,
Shutter = 0x10, Transfer = 0x040,
Readout = 0x08, Exposure = 0x020,
Latency = 0x04, Shutter = 0x010,
ExtStart = 0x02, Readout = 0x008,
ExtStop = 0x01, Latency = 0x004,
StatusMask = 0xff, ExtStart = 0x002,
ExtStop = 0x001,
StatusMask = 0x3ff,
};
enum StatusSPB2 {
SPB2_GBitFifoPixEmpty = 0x8000,
SPB2_FifoOutEmpty = 0x4000,
SPB2_FifoInEmpty = 0x2000,
SPB2_FifoLUTEmpty = 0x1000,
SPB2_FifoChan4Empty = 0x0800,
SPB2_FifoChan3Empty = 0x0400,
SPB2_FifoChan2Empty = 0x0200,
SPB2_FifoChan1Empty = 0x0100,
SPB2_TstEnvFrmOut = 0x0040,
SPB2_TstEnvFrmIn = 0x0020,
SPB2_TstEnvMask = 0x0060,
SPB2_TstFlashUsrReady = 0x0010,
SPB2_EndInitRam = 0x0008,
SPB2_EndFlashRead = 0x0004,
SPB2_AuroraChanUp = 0x0002,
SPB2_DcmLocked = 0x0001,
SPB2_TstInitMask = 0x001f,
SPB2_TstInitGood = 0x001f,
}; };
enum ShutMode { enum ShutMode {
Off, AutoFrame, Off, AutoFrame,
}; };
enum SPB2Config {
SPB2Precision, SPB2Speed,
};
}; // namespace Frelon }; // namespace Frelon
...@@ -58,6 +58,7 @@ class Camera ...@@ -58,6 +58,7 @@ class Camera
static std::string getInputChanModeName(Frelon::FrameTransferMode ftm, static std::string getInputChanModeName(Frelon::FrameTransferMode ftm,
Frelon::InputChan input_chan); Frelon::InputChan input_chan);
void getMaxFrameDim(FrameDim& max_frame_dim /Out/);
void getFrameDim(FrameDim& frame_dim /Out/); void getFrameDim(FrameDim& frame_dim /Out/);
bool isChanActive(Frelon::InputChan curr, Frelon::InputChan chan); bool isChanActive(Frelon::InputChan curr, Frelon::InputChan chan);
...@@ -98,12 +99,23 @@ class Camera ...@@ -98,12 +99,23 @@ class Camera
void setNbFrames(int nb_frames); void setNbFrames(int nb_frames);
void getNbFrames(int& nb_frames /Out/); void getNbFrames(int& nb_frames /Out/);
void getStatus(Frelon::Status& status /Out/); void setSPB2Config(Frelon::SPB2Config spb2_config);
void getSPB2Config(Frelon::SPB2Config& spb2_config /Out/);
void setExtSyncEnable(Frelon::ExtSync ext_sync_ena);
void getExtSyncEnable(Frelon::ExtSync& ext_sync_ena /Out/);
void getStatus(Frelon::Status& status /Out/, bool use_ser_line=false,
bool read_spb2=false);
bool waitStatus(Frelon::Status& status /In,Out/, Frelon::Status mask, bool waitStatus(Frelon::Status& status /In,Out/, Frelon::Status mask,
double timeout); double timeout, bool user_ser_line=false,
bool read_spb2=false);
void getImageCount(unsigned int& img_count /Out/, bool only_lsw=false);
void start(); void start();
void stop(); void stop();
bool isRunning();
protected: protected:
virtual void setMaxImageSizeCallbackActive(bool cb_active); virtual void setMaxImageSizeCallbackActive(bool cb_active);
......
...@@ -27,6 +27,23 @@ namespace Frelon ...@@ -27,6 +27,23 @@ namespace Frelon
//class Interface; //class Interface;
class AcqEndCallback : Espia::AcqEndCallback
{
%TypeHeaderCode
#include "FrelonInterface.h"
#include <algorithm>
%End
public:
AcqEndCallback(Frelon::Camera& cam);
virtual ~AcqEndCallback();
protected:
virtual void acqFinished(const HwFrameInfoType& /*finfo*/);
};
class DetInfoCtrlObj : HwDetInfoCtrlObj class DetInfoCtrlObj : HwDetInfoCtrlObj
{ {
......
...@@ -75,6 +75,7 @@ class Model ...@@ -75,6 +75,7 @@ class Model
bool hasTaper(); bool hasTaper();
bool hasModesAvail(); bool hasModesAvail();
bool hasTimeCalc(); bool hasTimeCalc();
bool hasGoodHTD();
double getPixelSize(); double getPixelSize();
......
...@@ -87,6 +87,13 @@ static const RegPair RegStrCList[] = { ...@@ -87,6 +87,13 @@ static const RegPair RegStrCList[] = {
RegPair(TransferTime, "TTR"), RegPair(TransferTime, "TTR"),
RegPair(CcdModesAvail, "CMA"), RegPair(CcdModesAvail, "CMA"),
RegPair(StatusSeqA, "SSA"),
RegPair(StatusAMTA, "SAA"),
RegPair(StatusAMTB, "SAB"),
RegPair(StatusAMTC, "SAC"),
RegPair(StatusAMTD, "SAD"),
RegPair(LookUpTable, "LUT"),
}; };
RegStrMapType lima::Frelon::RegStrMap(C_LIST_ITERS(RegStrCList)); RegStrMapType lima::Frelon::RegStrMap(C_LIST_ITERS(RegStrCList));
...@@ -103,8 +110,9 @@ lima::Frelon::CacheableRegList(C_LIST_ITERS(CacheableRegCList)); ...@@ -103,8 +110,9 @@ lima::Frelon::CacheableRegList(C_LIST_ITERS(CacheableRegCList));
typedef pair<Reg, double> RegSleepPair; typedef pair<Reg, double> RegSleepPair;
static const RegSleepPair RegSleepCList[] = { static const RegSleepPair RegSleepCList[] = {
RegSleepPair(ConfigHD, 2.0), RegSleepPair(ConfigHD, 2.0),
RegSleepPair(BinHorz, 2.0), RegSleepPair(BinHorz, 2.0),
RegSleepPair(LookUpTable, 2.0),
}; };
RegDoubleMapType lima::Frelon::RegSleepMap(C_LIST_ITERS(RegSleepCList)); RegDoubleMapType lima::Frelon::RegSleepMap(C_LIST_ITERS(RegSleepCList));
...@@ -129,6 +137,7 @@ static const MLCmdPair MLCmdStrCList[] = { ...@@ -129,6 +137,7 @@ static const MLCmdPair MLCmdStrCList[] = {
MLCmdPair(Aoi, "AOI"), MLCmdPair(Aoi, "AOI"),
MLCmdPair(PLL, "PLL"), MLCmdPair(PLL, "PLL"),
MLCmdPair(Timing, "TIM"), MLCmdPair(Timing, "TIM"),
MLCmdPair(StatusCam, "STC"),
}; };
MultiLineCmdStrMapType MultiLineCmdStrMapType
lima::Frelon::MultiLineCmdStrMap(C_LIST_ITERS(MLCmdStrCList)); lima::Frelon::MultiLineCmdStrMap(C_LIST_ITERS(MLCmdStrCList));
...@@ -170,15 +179,28 @@ static const FactorPair TimeUnitFactorCList[] = { ...@@ -170,15 +179,28 @@ static const FactorPair TimeUnitFactorCList[] = {
TimeUnitFactorMapType TimeUnitFactorMapType
lima::Frelon::TimeUnitFactorMap(C_LIST_ITERS(TimeUnitFactorCList)); lima::Frelon::TimeUnitFactorMap(C_LIST_ITERS(TimeUnitFactorCList));
typedef pair<ChipType, FrameDim> ChipFrameDimPair;
const FrameDim lima::Frelon::MaxFrameDim(2048, 2048, Bpp16); static const ChipFrameDimPair ChipMaxFrameDimCList[] = {
ChipFrameDimPair(Atmel, FrameDim(2048, 2048, Bpp16)),
ChipFrameDimPair(Kodak, FrameDim(2048, 2048, Bpp16)),
ChipFrameDimPair(E2V_2k, FrameDim(2048, 2048, Bpp16)),
ChipFrameDimPair(E2V_2kNotMPP, FrameDim(2048, 2048, Bpp16)),
ChipFrameDimPair(E2V_4k, FrameDim(4096, 4096, Bpp16)),
ChipFrameDimPair(E2V_4kNotMPP, FrameDim(4096, 4096, Bpp16)),
ChipFrameDimPair(Hama, FrameDim(2048, 1, Bpp16)),
};
ChipMaxFrameDimMapType
lima::Frelon::ChipMaxFrameDimMap(C_LIST_ITERS(ChipMaxFrameDimCList));
typedef pair<ChipType, double> ChipSizePair; typedef pair<ChipType, double> ChipSizePair;
static const ChipSizePair ChipPixelSizeCList[] = { static const ChipSizePair ChipPixelSizeCList[] = {
ChipSizePair(Atmel, 14e-6), ChipSizePair(Atmel, 14e-6),
ChipSizePair(Kodak, 24e-6), ChipSizePair(Kodak, 24e-6),
ChipSizePair(E2V, 15e-6), ChipSizePair(E2V_2k, 15e-6),
ChipSizePair(E2V_2kNotMPP, 15e-6),
ChipSizePair(E2V_4k, 15e-6),
ChipSizePair(E2V_4kNotMPP, 15e-6),
ChipSizePair(Hama, 14e-6),
}; };
ChipPixelSizeMapType ChipPixelSizeMapType
lima::Frelon::ChipPixelSizeMap(C_LIST_ITERS(ChipPixelSizeCList));