Browse Source

update

master
zhaohe 1 year ago
parent
commit
700aca785c
  1. 39
      include/ixsync.hpp
  2. 44
      include/xsync_regs.hpp
  3. 9
      include/xsync_v2_sig_type.hpp
  4. 415
      src/xsync_v2.cpp
  5. 12
      src/xsync_v2_sig_type.cpp

39
include/ixsync.hpp

@ -212,9 +212,11 @@ class IXsync {
virtual xs_error_code_t InternalGenlock_setFormat(GenlockFormat_t format) = 0;
virtual xs_error_code_t InternalGenlock_getFormat(GenlockFormat_t &format) = 0;
virtual xs_error_code_t InternalGenlock_readFreq(float &freq) = 0;
virtual xs_error_code_t InternalClock_setFreq(float freq) = 0;
virtual xs_error_code_t InternalClock_getFreq(float &freq) = 0;
virtual xs_error_code_t InternalClock_setFreq(float freq) = 0;
virtual xs_error_code_t InternalClock_getFreq(float &freq) = 0;
virtual xs_error_code_t InternalClock_readOutFreq(float &freq) = 0;
/*******************************************************************************
* *
@ -284,28 +286,27 @@ class IXsync {
*
*/
virtual xs_error_code_t RecordSigGenerator_setContrlMode(ControlMode_t mode) = 0;
virtual xs_error_code_t RecordSigGenerator_getContrlMode(ControlMode_t &mode) = 0;
virtual xs_error_code_t RecordSigGenerator_manualStart() = 0;
virtual xs_error_code_t RecordSigGenerator_manualStop() = 0;
virtual xs_error_code_t RecordSigGenerator_setContrlMode(ControlMode_t mode) = 0;
virtual xs_error_code_t RecordSigGenerator_getContrlMode(ControlMode_t &mode) = 0;
//------------------------------manual contrl mode-----------------------------------
virtual xs_error_code_t RecordSigGenerator_manualStart() = 0;
virtual xs_error_code_t RecordSigGenerator_manualStop() = 0;
//------------------------------timecode contrl mode---------------------------------
virtual xs_error_code_t RecordSigGenerator_setAutoStartTimecode(XsyncTimecode_t timecode) = 0;
virtual xs_error_code_t RecordSigGenerator_setAutoStopTimecode(XsyncTimecode_t timecode) = 0;
virtual xs_error_code_t RecordSigGenerator_getAutoStartTimecode(XsyncTimecode_t &timecode) = 0;
virtual xs_error_code_t RecordSigGenerator_getAutoStopTimecode(XsyncTimecode_t &timecode) = 0;
virtual xs_error_code_t RecordSigGenerator_setTimecodeCtrlFlag(uint32_t autoStart, uint32_t autoStop) = 0;
virtual xs_error_code_t RecordSigGenerator_getTimecodeCtrlFlag(uint32_t &autoStart, uint32_t &autoStop) = 0;
virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerSrc(InputInterface_t ttlPortNum) = 0;
virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerSrc(InputInterface_t &ttlPortNum) = 0;
virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerPolarity(uint32_t polarity) = 0;
virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerPolarity(uint32_t &polarity) = 0;
// virtual xs_error_code_t RecordSigGenerator_setRecordExposureTime(uint32_t us) = 0;
// virtual xs_error_code_t RecordSigGenerator_getRecordExposureTime(uint32_t &us) = 0;
// virtual xs_error_code_t RecordSigGenerator_setRecordExposureOffsetTime(uint32_t us) = 0;
// virtual xs_error_code_t RecordSigGenerator_getRecordExposureOffsetTime(uint32_t &us) = 0;
virtual xs_error_code_t RecordSigGenerator_getRecordState(uint32_t &state) = 0;
virtual xs_error_code_t RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode) = 0;
//------------------------------ttl level and edge contrl mode--------------------------------------
virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerSrc(InputInterface_t ttlPortNum) = 0;
virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerSrc(InputInterface_t &ttlPortNum) = 0;
virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerPolarity(uint32_t polarity) = 0;
virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerPolarity(uint32_t &polarity) = 0;
virtual xs_error_code_t RecordSigGenerator_setTriggerEdge(TriggerEdge_t edge) = 0;
virtual xs_error_code_t RecordSigGenerator_getTriggerEdge(TriggerEdge_t &edge) = 0;
virtual xs_error_code_t RecordSigGenerator_getRecordState(uint32_t &state) = 0;
virtual xs_error_code_t RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode) = 0;
/***********************************************************************************************
* *
@ -344,6 +345,8 @@ class IXsync {
virtual xs_error_code_t TTLOutputModule_setFreqMultiplication(int index, uint32_t multi) = 0;
virtual xs_error_code_t TTLOutputModule_getFreqMultiplication(int index, uint32_t &multi) = 0;
virtual xs_error_code_t TTLOutputModule_readOutFreq(int index, float &freq) = 0;
virtual xs_error_code_t TTLOutputModule_readInFreq(int index, float &freq) = 0;
virtual xs_error_code_t TTLOutputModule_setPolarity(int index, uint32_t polarity) = 0;
virtual xs_error_code_t TTLOutputModule_getPolarity(int index, uint32_t &polarity) = 0;
virtual xs_error_code_t TTLOutputModule_setTriggerEdge(int index, TriggerEdge_t edge) = 0;

44
include/xsync_regs.hpp

@ -224,11 +224,11 @@ typedef enum {
/*******************************************************************************
* GENLOCK *
*******************************************************************************/
internal_genlock_module = REGADDOFF__INTERNAL_GENLOCK + 0,
internal_genlock_ctrl_mode = REGADDOFF__INTERNAL_GENLOCK + 1,
internal_genlock_en = REGADDOFF__INTERNAL_GENLOCK + 2,
internal_genlock_format = REGADDOFF__INTERNAL_GENLOCK + 3,
internal_genlock_freq = REGADDOFF__INTERNAL_GENLOCK + 4,
internal_genlock_module = REGADDOFF__INTERNAL_GENLOCK + 0,
internal_genlock_ctrl_mode = REGADDOFF__INTERNAL_GENLOCK + 1,
internal_genlock_en = REGADDOFF__INTERNAL_GENLOCK + 2,
internal_genlock_format = REGADDOFF__INTERNAL_GENLOCK + 3,
internal_genlock_freq = REGADDOFF__INTERNAL_GENLOCK + 4,
/*******************************************************************************
* SYSGENLOCK *
@ -242,10 +242,11 @@ typedef enum {
* CLOCK *
*******************************************************************************/
internal_clock_module = REGADDOFF__INTERNAL_CLOCK + 0,
internal_clock_ctrl_mode = REGADDOFF__INTERNAL_CLOCK + 1,
internal_clock_en = REGADDOFF__INTERNAL_CLOCK + 2,
internal_clock_freq = REGADDOFF__INTERNAL_CLOCK + 3,
internal_clock_module = REGADDOFF__INTERNAL_CLOCK + 0,
internal_clock_ctrl_mode = REGADDOFF__INTERNAL_CLOCK + 1,
internal_clock_en = REGADDOFF__INTERNAL_CLOCK + 2,
internal_clock_freq = REGADDOFF__INTERNAL_CLOCK + 3,
internal_clock_freq_detect = REGADDOFF__INTERNAL_CLOCK + 4,
// REGADDOFF__INTERNAL_SIG_EN_CONTRLER
@ -271,23 +272,20 @@ typedef enum {
/*******************************************************************************
* record_sig_gen *
*******************************************************************************/
record_sig_gen_module = REGADDOFF__RECORD_SIG_GENERATOR + 0,
record_sig_gen_ctrl_control_mode = REGADDOFF__RECORD_SIG_GENERATOR + 1,
record_sig_gen_timecode_start0 = REGADDOFF__RECORD_SIG_GENERATOR + 2,
record_sig_gen_timecode_start1 = REGADDOFF__RECORD_SIG_GENERATOR + 3,
record_sig_gen_timecode_stop0 = REGADDOFF__RECORD_SIG_GENERATOR + 4,
record_sig_gen_timecode_stop1 = REGADDOFF__RECORD_SIG_GENERATOR + 5,
record_sig_gen_timecode_control_flag = REGADDOFF__RECORD_SIG_GENERATOR + 6,
record_sig_gen_module = REGADDOFF__RECORD_SIG_GENERATOR + 0,
record_sig_gen_ctrl_control_mode = REGADDOFF__RECORD_SIG_GENERATOR + 1,
record_sig_gen_timecode_start0 = REGADDOFF__RECORD_SIG_GENERATOR + 2,
record_sig_gen_timecode_start1 = REGADDOFF__RECORD_SIG_GENERATOR + 3,
record_sig_gen_timecode_stop0 = REGADDOFF__RECORD_SIG_GENERATOR + 4,
record_sig_gen_timecode_stop1 = REGADDOFF__RECORD_SIG_GENERATOR + 5,
record_sig_gen_timecode_control_flag = REGADDOFF__RECORD_SIG_GENERATOR + 6,
record_sig_gen_ttlin_trigger_sig_source = REGADDOFF__RECORD_SIG_GENERATOR + 7,
record_sig_gen_ttlin_trigger_level = REGADDOFF__RECORD_SIG_GENERATOR + 8,
record_sig_gen_exposure_time = REGADDOFF__RECORD_SIG_GENERATOR + 9,
record_sig_gen_exposure_offset_time = REGADDOFF__RECORD_SIG_GENERATOR + 10,
record_sig_gen_trigger_edge_select = REGADDOFF__RECORD_SIG_GENERATOR + 9,
record_sig_gen_manual_ctrl = REGADDOFF__RECORD_SIG_GENERATOR + 11,
record_sig_gen_timecode_snapshot0 = REGADDOFF__RECORD_SIG_GENERATOR + 13,
record_sig_gen_timecode_snapshot1 = REGADDOFF__RECORD_SIG_GENERATOR + 14,
record_sig_gen_record_state = REGADDOFF__RECORD_SIG_GENERATOR + 15,
record_sig_gen_timecode_snapshot0 = REGADDOFF__RECORD_SIG_GENERATOR + 13,
record_sig_gen_timecode_snapshot1 = REGADDOFF__RECORD_SIG_GENERATOR + 14,
record_sig_gen_record_state = REGADDOFF__RECORD_SIG_GENERATOR + 15,
/*******************************************************************************
* camera_sync_module *

9
include/xsync_v2_sig_type.hpp

@ -136,10 +136,11 @@ list<string> SignalTypeStrSet();
*******************************************************************************/
typedef enum {
CONTROLMODE_ALWAYS_START = 0, // 总是启动
CONTROLMODE_MANUAL_TRIGGER = 1, // 手动,启动停止
CONTROLMODE_TIMECODE_TRIGGER = 2, // TIMECODE触发启动,手动控制停止
CONTROLMODE_EXTERNALTTL_TRIGGER = 3, // 外部TTL输入触发,高电平开始,低电平停止
CONTROLMODE_ALWAYS_START = 0, // 总是启动
CONTROLMODE_MANUAL_TRIGGER = 1, // 手动,启动停止
CONTROLMODE_TIMECODE_TRIGGER = 2, // TIMECODE触发启动,手动控制停止
CONTROLMODE_EXTERNALTTL_TRIGGER = 3, // 外部TTL输入触发,高电平开始,低电平停止
CONTROLMODE_EXTERNALTTL_EDGE_TRIGGER = 4, // 外部脉冲触发
} ControlMode_t;
string ControlMode2Str(ControlMode_t mode);

415
src/xsync_v2.cpp

@ -146,9 +146,9 @@ class Xsync : public IXsync {
if (m_on_timecode_msg_cb) m_on_timecode_msg_cb(&timecode);
} else if (packet->eventid == kxsync_work_state_report_event) {
// 信号发生器状态改变
Timecode64_t tc64;
Timecode64_t tc64 = {0};
tc64.tc0 = packet->data[1];
tc64.tc1 = packet->data[2];
tc64.tc1 = packet->data[2]; // TODO:需要锁存时码的子帧
XsyncTimecode_t timecode = timecode64ToXsyncTimeCode(tc64);
if (m_on_record_sig_change_msg_cb) m_on_record_sig_change_msg_cb(packet->data[0], &timecode);
@ -203,7 +203,7 @@ class Xsync : public IXsync {
virtual bool getConnectState() override { return _getConnectState(); }
virtual string getDeviceIp() override { return _getXsyncIp(); }
virtual xs_error_code_t NetworkConfig_setMode(NetworkMode_t mode) { REG_WRITE(reg::kstm32_obtaining_ip_mode, mode); }
virtual xs_error_code_t NetworkConfig_setMode(NetworkMode_t mode) override { REG_WRITE(reg::kstm32_obtaining_ip_mode, mode); }
virtual xs_error_code_t NetworkConfig_getMode(NetworkMode_t &mode) override {
uint32_t mode_u32;
DO_XSYNC(reg_read(reg::kstm32_obtaining_ip_mode, mode_u32, 10));
@ -272,24 +272,27 @@ class Xsync : public IXsync {
return kxs_ec_success;
}
virtual xs_error_code_t readSDKVersion(version_t &version) {
virtual xs_error_code_t readSDKVersion(version_t &version) override {
version.main = PC_VERSION >> 16;
version.sub = (PC_VERSION >> 8) & 0xff;
version.fix = PC_VERSION & 0xff;
return kxs_ec_success;
}
virtual xs_error_code_t readARMSoftwareVersion(version_t &version) {
virtual xs_error_code_t readARMSoftwareVersion(version_t &version) override {
uint32_t version_u32;
DO_XSYNC(reg_read(reg::ksoftware_version, version_u32, 10));
version.main = version_u32 >> 16;
version.sub = (version_u32 >> 8) & 0xff;
version.fix = version_u32 & 0xff;
return kxs_ec_success;
}
virtual xs_error_code_t readFPGASoftwareVersion(version_t &version) {
virtual xs_error_code_t readFPGASoftwareVersion(version_t &version) override {
uint32_t version_u32;
DO_XSYNC(reg_read(reg::kfpga_info_reg0, version_u32, 10));
version.main = version_u32 >> 16;
version.sub = (version_u32 >> 8) & 0xff;
version.fix = version_u32 & 0xff;
return kxs_ec_success;
}
virtual void registerOnTimecodeMsgCallback(xsync_on_timecode_msg_t cb) override { m_on_timecode_msg_cb = cb; }
@ -335,18 +338,16 @@ class Xsync : public IXsync {
return readTimecodeFormat(reg::external_timecode_freq, reg::external_timecode_timecode0, reg::external_timecode_timecode1, format);
}
virtual xs_error_code_t TTLInputModule1_detectFreq(float &freq) override;
virtual xs_error_code_t TTLInputModule2_detectFreq(float &freq) override;
virtual xs_error_code_t TTLInputModule3_detectFreq(float &freq) override;
virtual xs_error_code_t TTLInputModule4_detectFreq(float &freq) override;
virtual xs_error_code_t ExternalGenlock_detectFreq(float &freq) override;
/*******************************************************************************
* INTERNAL *
*******************************************************************************/
virtual xs_error_code_t InternalSigSrouce_start() override { //
DO_XSYNC(reg_write(reg::internal_sig_en_contrler_en, 0x7, 10));
return kxs_ec_success;
}
virtual xs_error_code_t InternalSigSrouce_stop() override { //
DO_XSYNC(reg_write(reg::internal_sig_en_contrler_en, 0x0, 10));
return kxs_ec_success;
}
virtual xs_error_code_t InternalSigSrouce_readState(bool &en) override {
uint32_t en_u32;
@ -366,56 +367,69 @@ class Xsync : public IXsync {
virtual xs_error_code_t InternalTimecode_getCode(XsyncTimecode_t &timecode) override { return readtimecode(reg::internal_timecode_data0, reg::internal_timecode_data1, timecode); }
virtual xs_error_code_t InternalTimecode_readFreq(float &freq) override { return readfreq(reg::internal_timecode_detect_freq, freq); };
virtual xs_error_code_t InternalGenlock_setFormat(GenlockFormat_t format) override;
virtual xs_error_code_t InternalGenlock_getFormat(GenlockFormat_t &format) override;
virtual xs_error_code_t InternalClock_setFreq(float freq) override;
virtual xs_error_code_t InternalClock_getFreq(float &freq) override;
xs_error_code_t SysTimecode_setSource(uint32_t sig) override { REG_WRITE(reg::sys_timecode_select, sig); }
xs_error_code_t SysTimecode_getSource(uint32_t &sig) override { REG_READ(reg::sys_timecode_select, sig); }
xs_error_code_t SysTimecode_readFormat(TimecodeFormat_t &format) override { return readTimecodeFormat(reg::sys_timecode_freq_detect, reg::sys_timecode_data0, reg::sys_timecode_data1, format); }
xs_error_code_t SysTimecode_readFreq(float &freq) override { return readfreq(reg::sys_timecode_freq_detect, freq); }
xs_error_code_t SysTimecode_readCode(XsyncTimecode_t &timecode) override { return readtimecode(reg::sys_timecode_data0, reg::sys_timecode_data1, timecode); }
virtual xs_error_code_t SysGenlock_setSrc(uint32_t source) override;
virtual xs_error_code_t SysGenlock_getSrc(uint32_t &source) override;
virtual xs_error_code_t SysGenlock_readFreq(float &freq) override;
virtual xs_error_code_t SysClock_setSrc(SignalType_t sig) override;
virtual xs_error_code_t SysClock_getSrc(SignalType_t &sig) override;
virtual xs_error_code_t SysClock_setTriggerEdge(TriggerEdge_t edge) override;
virtual xs_error_code_t SysClock_getTriggerEdge(TriggerEdge_t &edge) override;
virtual xs_error_code_t SysClock_setFreqDivision(uint32_t div) override;
virtual xs_error_code_t SysClock_geFreqtDivision(uint32_t &div) override;
virtual xs_error_code_t SysClock_setFreqMultiplication(uint32_t muti) override;
virtual xs_error_code_t SysClock_getFreqMultiplication(uint32_t &muti) override;
virtual xs_error_code_t SysClock_readOutSigFreq(float &freq) override;
virtual xs_error_code_t SysClock_readInSigFreq(float &freq) override;
virtual xs_error_code_t RecordSigGenerator_setContrlMode(ControlMode_t mode) override;
virtual xs_error_code_t RecordSigGenerator_getContrlMode(ControlMode_t &mode) override;
virtual xs_error_code_t RecordSigGenerator_manualStart() override;
virtual xs_error_code_t RecordSigGenerator_manualStop() override;
virtual xs_error_code_t RecordSigGenerator_setAutoStartTimecode(XsyncTimecode_t timecode) override;
virtual xs_error_code_t RecordSigGenerator_setAutoStopTimecode(XsyncTimecode_t timecode) override;
virtual xs_error_code_t RecordSigGenerator_getAutoStartTimecode(XsyncTimecode_t &timecode) override;
virtual xs_error_code_t RecordSigGenerator_getAutoStopTimecode(XsyncTimecode_t &timecode) override;
virtual xs_error_code_t RecordSigGenerator_setTimecodeCtrlFlag(uint32_t autoStart, uint32_t autoStop) override;
virtual xs_error_code_t RecordSigGenerator_getTimecodeCtrlFlag(uint32_t &autoStart, uint32_t &autoStop) override;
virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerSrc(InputInterface_t ttlPortNum); // 1- override4
virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerSrc(InputInterface_t &ttlPortNum) override;
virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerPolarity(uint32_t polarity) override;
virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerPolarity(uint32_t &polarity) override;
virtual xs_error_code_t RecordSigGenerator_getRecordState(uint32_t &state) override;
virtual xs_error_code_t RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode) override;
xs_error_code_t TimecodeOutputModule_setBncOutputLevel(int level); // 0:line,1:mi overridec
xs_error_code_t TimecodeOutputModule_getBncOutputLevel(int &level);
xs_error_code_t TimecodeOutputModule_setHeadphoneOutputLevel(int level); // 0:line,1:mi overridec
xs_error_code_t TimecodeOutputModule_getHeadphoneOutputLevel(int &level);
virtual xs_error_code_t TTLOutputModule_setSrcSigType(int index, SignalType_t source) {
virtual xs_error_code_t InternalGenlock_setFormat(GenlockFormat_t format) override { return reg_write(reg::internal_genlock_format, format); }
virtual xs_error_code_t InternalGenlock_getFormat(GenlockFormat_t &format) override { REG_READ(reg::internal_genlock_format, format); }
virtual xs_error_code_t InternalGenlock_readFreq(float &freq) override { return readfreq(reg::internal_genlock_freq, freq); }
virtual xs_error_code_t InternalClock_setFreq(float freq) override {
double T = 1.0 / freq;
double T_ns = T * 1000 * 1000 * 1000;
double cnt = T_ns / 100 + 0.5; // 10MHZ <=> 100ns
uint32_t cnt_u32 = uint32_t(cnt);
return reg_write(reg::internal_clock_freq, cnt_u32);
return kxs_ec_success;
}
virtual xs_error_code_t InternalClock_getFreq(float &freq) override { return readfreq(reg::internal_clock_freq, freq); }
virtual xs_error_code_t InternalClock_readOutFreq(float &freq) override { return readfreq(reg::internal_clock_freq_detect, freq); }
virtual xs_error_code_t SysTimecode_setSource(uint32_t sig) override { REG_WRITE(reg::sys_timecode_select, sig); }
virtual xs_error_code_t SysTimecode_getSource(uint32_t &sig) override { REG_READ(reg::sys_timecode_select, sig); }
virtual xs_error_code_t SysTimecode_readFormat(TimecodeFormat_t &format) override { return readTimecodeFormat(reg::sys_timecode_freq_detect, reg::sys_timecode_data0, reg::sys_timecode_data1, format); }
virtual xs_error_code_t SysTimecode_readFreq(float &freq) override { return readfreq(reg::sys_timecode_freq_detect, freq); }
virtual xs_error_code_t SysTimecode_readCode(XsyncTimecode_t &timecode) override { return readtimecode(reg::sys_timecode_data0, reg::sys_timecode_data1, timecode); }
virtual xs_error_code_t RecordSigGenerator_setContrlMode(ControlMode_t mode) override {
if (mode != CONTROLMODE_MANUAL_TRIGGER && mode != CONTROLMODE_TIMECODE_TRIGGER && mode != CONTROLMODE_EXTERNALTTL_TRIGGER) {
return kxs_ec_param_error;
}
return reg_write(reg::record_sig_gen_ctrl_control_mode, mode);
}
virtual xs_error_code_t RecordSigGenerator_getContrlMode(ControlMode_t &mode) override { return _reg_read(reg::record_sig_gen_ctrl_control_mode, mode); }
virtual xs_error_code_t RecordSigGenerator_manualStart() override { return reg_write(reg::record_sig_gen_manual_ctrl, 1, 10); }
virtual xs_error_code_t RecordSigGenerator_manualStop() override { return reg_write(reg::record_sig_gen_manual_ctrl, 0, 10); }
virtual xs_error_code_t RecordSigGenerator_setAutoStartTimecode(XsyncTimecode_t timecode) override { return writetimecode(reg::record_sig_gen_timecode_start0, reg::record_sig_gen_timecode_start1, timecode); }
virtual xs_error_code_t RecordSigGenerator_setAutoStopTimecode(XsyncTimecode_t timecode) override { return writetimecode(reg::record_sig_gen_timecode_stop0, reg::record_sig_gen_timecode_stop1, timecode); }
virtual xs_error_code_t RecordSigGenerator_getAutoStartTimecode(XsyncTimecode_t &timecode) override { return readtimecode(reg::record_sig_gen_timecode_start0, reg::record_sig_gen_timecode_start1, timecode); }
virtual xs_error_code_t RecordSigGenerator_getAutoStopTimecode(XsyncTimecode_t &timecode) override { return readtimecode(reg::record_sig_gen_timecode_stop0, reg::record_sig_gen_timecode_stop1, timecode); }
virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerSrc(InputInterface_t ttlPortNum) override {
if (ttlPortNum != INPUT_IF_TTL1 && ttlPortNum != INPUT_IF_TTL2 && ttlPortNum != INPUT_IF_TTL3 && ttlPortNum != INPUT_IF_TTL4) {
return kxs_ec_param_error;
}
return reg_write(reg::record_sig_gen_ttlin_trigger_sig_source, ttlPortNum);
}
virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerSrc(InputInterface_t &ttlPortNum) override { return _reg_read(reg::record_sig_gen_ttlin_trigger_sig_source, ttlPortNum); }
virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerPolarity(uint32_t polarity) override { return reg_write(reg::record_sig_gen_ttlin_trigger_level, polarity); }
virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerPolarity(uint32_t &polarity) override { return _reg_read(reg::record_sig_gen_ttlin_trigger_level, polarity); }
virtual xs_error_code_t RecordSigGenerator_setTimecodeCtrlFlag(uint32_t autoStart, uint32_t autoStop) override {
uint32_t flag = (autoStart & 0x01) | ((autoStop & 0x01) << 1);
return reg_write(reg::record_sig_gen_timecode_control_flag, flag);
}
virtual xs_error_code_t RecordSigGenerator_getTimecodeCtrlFlag(uint32_t &autoStart, uint32_t &autoStop) override {
uint32_t flag = 0;
auto ret = reg_read(reg::record_sig_gen_timecode_control_flag, flag);
autoStart = flag & 0x01;
autoStop = (flag >> 1) & 0x01;
return ret;
}
virtual xs_error_code_t RecordSigGenerator_getRecordState(uint32_t &state) override { return _reg_read(reg::record_sig_gen_record_state, state); }
virtual xs_error_code_t RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode) override { return readtimecode(reg::record_sig_gen_timecode_snapshot0, reg::record_sig_gen_timecode_snapshot1, timecode); }
virtual xs_error_code_t RecordSigGenerator_setTriggerEdge(TriggerEdge_t edge) override { return reg_write(reg::record_sig_gen_trigger_edge_select, edge); }
virtual xs_error_code_t RecordSigGenerator_getTriggerEdge(TriggerEdge_t &edge) override { return _reg_read(reg::record_sig_gen_trigger_edge_select, edge); }
virtual xs_error_code_t TTLOutputModule_setSrcSigType(int index, SignalType_t source) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
if (source == SIGNAL_LOGIC0 || //
@ -428,61 +442,68 @@ class Xsync : public IXsync {
REG_WRITE(reg::kreg_ttlout1_input_signal_select + (index - 1) * 16, source);
return kxs_ec_success;
}
virtual xs_error_code_t TTLOutputModule_getSrcSigType(int index, SignalType_t &source) {
virtual xs_error_code_t TTLOutputModule_getSrcSigType(int index, SignalType_t &source) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
uint32_t source_u32;
DO_XSYNC(reg_read(reg::kreg_ttlout1_input_signal_select + (index - 1) * 16, source_u32, 10));
source = (SignalType_t)source_u32;
return kxs_ec_success;
}
virtual xs_error_code_t TTLOutputModule_setFreqDivision(int index, uint32_t div) {
virtual xs_error_code_t TTLOutputModule_setFreqDivision(int index, uint32_t div) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_WRITE(reg::kreg_ttlout1_pllout_freq_division_ctrl + (index - 1) * 16, div);
}
virtual xs_error_code_t TTLOutputModule_getFreqDivision(int index, uint32_t &div) {
virtual xs_error_code_t TTLOutputModule_getFreqDivision(int index, uint32_t &div) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_READ(reg::kreg_ttlout1_pllout_freq_division_ctrl + (index - 1) * 16, div);
}
virtual xs_error_code_t TTLOutputModule_setFreqMultiplication(int index, uint32_t multi) {
virtual xs_error_code_t TTLOutputModule_setFreqMultiplication(int index, uint32_t multi) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_WRITE(reg::kreg_ttlout1_pllout_freq_multiplication_ctrl + (index - 1) * 16, multi);
}
virtual xs_error_code_t TTLOutputModule_getFreqMultiplication(int index, uint32_t &multi) {
virtual xs_error_code_t TTLOutputModule_getFreqMultiplication(int index, uint32_t &multi) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_READ(reg::kreg_ttlout1_pllout_freq_multiplication_ctrl + (index - 1) * 16, multi);
}
virtual xs_error_code_t TTLOutputModule_readOutFreq(int index, float &freq) {
virtual xs_error_code_t TTLOutputModule_readInFreq(int index, float &freq) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
return readfreq(reg::kreg_ttlout1_sig_in_freq_detect + (index - 1) * 16, freq);
}
virtual xs_error_code_t TTLOutputModule_readOutFreq(int index, float &freq) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
return readfreq(reg::kreg_ttlout1_sig_out_freq_detect + (index - 1) * 16, freq);
}
virtual xs_error_code_t TTLOutputModule_setPolarity(int index, uint32_t polarity) {
virtual xs_error_code_t TTLOutputModule_setPolarity(int index, uint32_t polarity) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_WRITE(reg::kreg_ttlout1_pllout_polarity_ctrl + (index - 1) * 16, polarity);
DO_XSYNC(reg_write(reg::kreg_ttlout1_pllout_polarity_ctrl + (index - 1) * 16, polarity, 10));
DO_XSYNC(reg_write(reg::kreg_ttlout1_forward_mode_polarity_ctrl + (index - 1) * 16, polarity, 10));
}
virtual xs_error_code_t TTLOutputModule_getPolarity(int index, uint32_t &polarity) {
virtual xs_error_code_t TTLOutputModule_getPolarity(int index, uint32_t &polarity) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_READ(reg::kreg_ttlout1_pllout_polarity_ctrl + (index - 1) * 16, polarity);
}
virtual xs_error_code_t TTLOutputModule_setTriggerEdge(int index, TriggerEdge_t edge) {
virtual xs_error_code_t TTLOutputModule_setTriggerEdge(int index, TriggerEdge_t edge) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_WRITE(reg::kreg_ttlout1_pllout_trigger_edge_select + (index - 1) * 16, edge);
}
virtual xs_error_code_t TTLOutputModule_getTriggerEdge(int index, TriggerEdge_t &edge) {
virtual xs_error_code_t TTLOutputModule_getTriggerEdge(int index, TriggerEdge_t &edge) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_READ(reg::kreg_ttlout1_pllout_trigger_edge_select + (index - 1) * 16, edge);
}
virtual xs_error_code_t TTLOutputModule_setPluseWidth(int index, uint32_t us) {
virtual xs_error_code_t TTLOutputModule_setPluseWidth(int index, uint32_t us) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_WRITE(reg::kreg_ttlout1_pluse_width_ctrl + (index - 1) * 16, us);
}
virtual xs_error_code_t TTLOutputModule_getPluseWidth(int index, uint32_t &us) {
virtual xs_error_code_t TTLOutputModule_getPluseWidth(int index, uint32_t &us) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_READ(reg::kreg_ttlout1_pluse_width_ctrl + (index - 1) * 16, us);
}
virtual xs_error_code_t TTLOutputModule_setOffsetTime(int index, uint32_t us) {
virtual xs_error_code_t TTLOutputModule_setOffsetTime(int index, uint32_t us) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_WRITE(reg::kreg_ttlout1_pluse_offset_ctrl + (index - 1) * 16, us);
}
virtual xs_error_code_t TTLOutputModule_getOffsetTime(int index, uint32_t &us) {
virtual xs_error_code_t TTLOutputModule_getOffsetTime(int index, uint32_t &us) override {
if (index < 1 || index > 4) return kxs_ec_param_error;
REG_READ(reg::kreg_ttlout1_pluse_offset_ctrl + (index - 1) * 16, us);
}
@ -516,10 +537,52 @@ class Xsync : public IXsync {
}
return kxs_ec_success;
}
virtual xs_error_code_t TTLInputModule1_detectFreq(float &freq) override { return readfreq(reg::k_ttlin1_freq_detector_reg, freq); }
virtual xs_error_code_t TTLInputModule2_detectFreq(float &freq) override { return readfreq(reg::k_ttlin2_freq_detector_reg, freq); }
virtual xs_error_code_t TTLInputModule3_detectFreq(float &freq) override { return readfreq(reg::k_ttlin3_freq_detector_reg, freq); }
virtual xs_error_code_t TTLInputModule4_detectFreq(float &freq) override { return readfreq(reg::k_ttlin4_freq_detector_reg, freq); }
virtual xs_error_code_t TimecodeOutputModule_setBncOutputLevel(int level) { REG_WRITE(reg::timecode_output_bnc_outut_level_select, level); }
virtual xs_error_code_t TimecodeOutputModule_getBncOutputLevel(int &level) { REG_READ(reg::timecode_output_bnc_outut_level_select, level); }
virtual xs_error_code_t TimecodeOutputModule_setHeadphoneOutputLevel(int level) { REG_WRITE(reg::timecode_output_headphone_outut_level_select, level); }
virtual xs_error_code_t TimecodeOutputModule_getHeadphoneOutputLevel(int &level) { REG_READ(reg::timecode_output_headphone_outut_level_select, level); }
virtual xs_error_code_t ExternalGenlock_detectFreq(float &freq) override { return readfreq(reg::external_genlock_freq, freq); }
virtual xs_error_code_t SysGenlock_setSrc(uint32_t source) override { return reg_write(reg::sys_genlock_source, source); }
virtual xs_error_code_t SysGenlock_getSrc(uint32_t &extern_or_internal) override {
REG_READ(reg::sys_genlock_source, extern_or_internal);
return kxs_ec_success;
}
virtual xs_error_code_t SysGenlock_readFreq(float &freq) override { return readfreq(reg::sys_genlock_freq, freq); }
virtual xs_error_code_t SysClock_setSrc(SignalType_t sig) override {
if (sig != SIGNAL_TTLIN1 && //
sig != SIGNAL_TTLIN2 && //
sig != SIGNAL_TTLIN3 && //
sig != SIGNAL_TTLIN4 && //
sig != SIGNAL_SYS_CLK_OUTPUT && //
sig != SIGNAL_SYS_GENLOCK_OUTPUT && //
sig != SIGNAL_SYS_TIMECODE_FREQ_OUTPUT) {
return kxs_ec_param_error;
}
return reg_write(reg::sys_clock_source, sig);
}
xs_error_code_t SysClock_getSrc(SignalType_t &sig) override { REG_READ(reg::sys_clock_source, sig); }
xs_error_code_t SysClock_setTriggerEdge(TriggerEdge_t edge) override {
if (edge != TRIGGER_EDGE_RISING && edge != TRIGGER_EDGE_FALLING) {
return kxs_ec_param_error;
}
return reg_write(reg::sys_clock_trigger_edge_select, edge);
}
xs_error_code_t SysClock_getTriggerEdge(TriggerEdge_t &edge) override { return _reg_read(reg::sys_clock_trigger_edge_select, edge); }
xs_error_code_t SysClock_setFreqDivision(uint32_t div) override { return reg_write(reg::sys_clock_freq_division_ctrl, div); }
xs_error_code_t SysClock_geFreqtDivision(uint32_t &div) override { return _reg_read(reg::sys_clock_freq_division_ctrl, div); }
xs_error_code_t SysClock_setFreqMultiplication(uint32_t muti) override { return reg_write(reg::sys_clock_freq_multiplication_ctrl, muti); }
xs_error_code_t SysClock_getFreqMultiplication(uint32_t &muti) override { return _reg_read(reg::sys_clock_freq_multiplication_ctrl, muti); }
xs_error_code_t SysClock_readOutSigFreq(float &freq) override { return readfreq(reg::sys_clock_outfreq_detect, freq); }
xs_error_code_t SysClock_readInSigFreq(float &freq) override { return readfreq(reg::sys_clock_infreq_detect, freq); }
xs_error_code_t storageConfig() override;
private:
xs_error_code_t doaction(uint32_t action, uint32_t actionval, uint32_t *ackreturn, int32_t overtime_ms = 100);
xs_error_code_t storageConfig();
xs_error_code_t xsync_send_cmd_block(iflytop_xsync_packet_header_t *cmd, iflytop_xsync_packet_header_t *rx_data, int32_t buffersize, int32_t overtime_ms);
xs_error_code_t readtimecode(uint32_t reg0, uint32_t reg1, XsyncTimecode_t &timecode);
@ -756,9 +819,9 @@ xs_error_code_t Xsync::readtimecode(uint32_t reg0, uint32_t reg1, XsyncTimecode_
ecode = reg_read(reg1, tc1, 10);
if (ecode != kxs_ec_success) return ecode;
Timecode64_t tc64;
tc64.tc0 = tc0;
tc64.tc1 = tc1;
Timecode64_t tc64 = {0};
tc64.tc0 = tc0;
tc64.tc1 = tc1;
timecode = timecode64ToXsyncTimeCode(tc64);
return ecode;
@ -829,193 +892,7 @@ xs_error_code_t Xsync::doaction(uint32_t action, uint32_t actionval, uint32_t *a
return ecode;
}
/*******************************************************************************
* TTLInputModule *
*******************************************************************************/
#define FREQ_CNT_TO_FREQ(cnt) ((cnt != 0) ? (uint32_t)(1.0 / (cnt * 1.0 / (10 * 1000 * 1000)) + 0.5) : 0) //+0.5是因为c++ 小数强转成整数时是取整,而非四舍五入
xs_error_code_t Xsync::TTLInputModule1_detectFreq(float &freq) { return readfreq(reg::k_ttlin1_freq_detector_reg, freq); }
xs_error_code_t Xsync::TTLInputModule2_detectFreq(float &freq) { return readfreq(reg::k_ttlin2_freq_detector_reg, freq); }
xs_error_code_t Xsync::TTLInputModule3_detectFreq(float &freq) { return readfreq(reg::k_ttlin3_freq_detector_reg, freq); }
xs_error_code_t Xsync::TTLInputModule4_detectFreq(float &freq) { return readfreq(reg::k_ttlin4_freq_detector_reg, freq); }
/*******************************************************************************
* TimecodeInputModule *
*******************************************************************************/
#if 0
xs_error_code_t Xsync::ExternalTimecode_setSource(InputInterface_t src) {
if (src == INPUT_IF_TIMECODE_BNC) {
DO_XSYNC(reg_write(reg::external_timecode_sig_selt, 1, 10)); // 0:off,1:bnc,2:headphone
} else if (src == INPUT_IF_TIMECODE_HEADPHONE) {
DO_XSYNC(reg_write(reg::external_timecode_sig_selt, 2, 10)); // 0:off,1:bnc,2:headphone
} else if (src == INPUT_IF_OFF) {
DO_XSYNC(reg_write(reg::external_timecode_sig_selt, 0, 10)); // 0:off,1:bnc,2:headphone
} else {
return kxs_ec_param_error;
}
return kxs_ec_success;
}
xs_error_code_t Xsync::ExternalTimecode_getSource(InputInterface_t &timecode_select) {
uint32_t readbak = 0;
DO_XSYNC(reg_read(reg::external_timecode_sig_selt, readbak, 10));
if (readbak == 1) {
timecode_select = INPUT_IF_TIMECODE_BNC;
} else if (readbak == 2) {
timecode_select = INPUT_IF_TIMECODE_HEADPHONE;
} else if (readbak == 0) {
timecode_select = INPUT_IF_OFF;
} else {
timecode_select = INPUT_IF_OFF;
}
return kxs_ec_success;
}
xs_error_code_t Xsync::ExternalTimecode_setFormat(TimecodeFormat_t format) { REG_WRITE(reg::external_timecode_format, format); }
xs_error_code_t Xsync::ExternalTimecode_getFormat(TimecodeFormat_t &format) { REG_READ(reg::external_timecode_format, format); }
xs_error_code_t Xsync::ExternalTimecode_readCode(XsyncTimecode_t &timecode) { return readtimecode(reg::external_timecode_code0, reg::external_timecode_code1, timecode); }
#endif
/*******************************************************************************
* InternalTimecode *
*******************************************************************************/
/*******************************************************************************
* SysTimecode *
*******************************************************************************/
/*******************************************************************************
* TimecodeOutputModule *
*******************************************************************************/
xs_error_code_t Xsync::TimecodeOutputModule_setBncOutputLevel(int level) { REG_WRITE(reg::timecode_output_bnc_outut_level_select, level); }
xs_error_code_t Xsync::TimecodeOutputModule_getBncOutputLevel(int &level) { REG_READ(reg::timecode_output_bnc_outut_level_select, level); }
xs_error_code_t Xsync::TimecodeOutputModule_setHeadphoneOutputLevel(int level) { REG_WRITE(reg::timecode_output_headphone_outut_level_select, level); }
xs_error_code_t Xsync::TimecodeOutputModule_getHeadphoneOutputLevel(int &level) { REG_READ(reg::timecode_output_headphone_outut_level_select, level); }
/*******************************************************************************
* GENLOCK *
*******************************************************************************/
xs_error_code_t Xsync::ExternalGenlock_detectFreq(float &freq) { return readfreq(reg::external_genlock_freq, freq); }
xs_error_code_t Xsync::InternalGenlock_setFormat(GenlockFormat_t format) { return reg_write(reg::internal_genlock_format, format); }
xs_error_code_t Xsync::InternalGenlock_getFormat(GenlockFormat_t &format) { REG_READ(reg::internal_genlock_format, format); }
xs_error_code_t Xsync::SysGenlock_setSrc(uint32_t source) { return reg_write(reg::sys_genlock_source, source); }
xs_error_code_t Xsync::SysGenlock_getSrc(uint32_t &extern_or_internal) {
REG_READ(reg::sys_genlock_source, extern_or_internal);
return kxs_ec_success;
}
xs_error_code_t Xsync::SysGenlock_readFreq(float &freq) { return readfreq(reg::sys_genlock_freq, freq); }
/*******************************************************************************
* INTERNAL_CLOCK *
*******************************************************************************/
xs_error_code_t Xsync::InternalClock_setFreq(float freq) {
double T = 1.0 / freq;
double T_ns = T * 1000 * 1000 * 1000;
double cnt = T_ns / 100 + 0.5; // 10MHZ <=> 100ns
uint32_t cnt_u32 = uint32_t(cnt);
return reg_write(reg::internal_clock_freq, cnt_u32);
return kxs_ec_success;
}
xs_error_code_t Xsync::InternalClock_getFreq(float &freq) { return readfreq(reg::internal_clock_freq, freq); }
/*******************************************************************************
* SysClock *
*******************************************************************************/
xs_error_code_t Xsync::SysClock_setSrc(SignalType_t sig) {
if (sig != SIGNAL_TTLIN1 && //
sig != SIGNAL_TTLIN2 && //
sig != SIGNAL_TTLIN3 && //
sig != SIGNAL_TTLIN4 && //
sig != SIGNAL_SYS_CLK_OUTPUT && //
sig != SIGNAL_SYS_GENLOCK_OUTPUT && //
sig != SIGNAL_SYS_TIMECODE_FREQ_OUTPUT) {
return kxs_ec_param_error;
}
return reg_write(reg::sys_clock_source, sig);
}
xs_error_code_t Xsync::SysClock_getSrc(SignalType_t &sig) { REG_READ(reg::sys_clock_source, sig); }
xs_error_code_t Xsync::SysClock_setTriggerEdge(TriggerEdge_t edge) {
if (edge != TRIGGER_EDGE_RISING && edge != TRIGGER_EDGE_FALLING) {
return kxs_ec_param_error;
}
return reg_write(reg::sys_clock_trigger_edge_select, edge);
}
xs_error_code_t Xsync::SysClock_getTriggerEdge(TriggerEdge_t &edge) { return _reg_read(reg::sys_clock_trigger_edge_select, edge); }
xs_error_code_t Xsync::SysClock_setFreqDivision(uint32_t div) { return reg_write(reg::sys_clock_freq_division_ctrl, div); }
xs_error_code_t Xsync::SysClock_geFreqtDivision(uint32_t &div) { return _reg_read(reg::sys_clock_freq_division_ctrl, div); }
xs_error_code_t Xsync::SysClock_setFreqMultiplication(uint32_t muti) { return reg_write(reg::sys_clock_freq_multiplication_ctrl, muti); }
xs_error_code_t Xsync::SysClock_getFreqMultiplication(uint32_t &muti) { return _reg_read(reg::sys_clock_freq_multiplication_ctrl, muti); }
xs_error_code_t Xsync::SysClock_readOutSigFreq(float &freq) { return readfreq(reg::sys_clock_outfreq_detect, freq); }
xs_error_code_t Xsync::SysClock_readInSigFreq(float &freq) { return readfreq(reg::sys_clock_infreq_detect, freq); }
xs_error_code_t Xsync::RecordSigGenerator_setContrlMode(ControlMode_t mode) {
if (mode != CONTROLMODE_MANUAL_TRIGGER && mode != CONTROLMODE_TIMECODE_TRIGGER && mode != CONTROLMODE_EXTERNALTTL_TRIGGER) {
return kxs_ec_param_error;
}
return reg_write(reg::record_sig_gen_ctrl_control_mode, mode);
}
xs_error_code_t Xsync::RecordSigGenerator_getContrlMode(ControlMode_t &mode) { //
return _reg_read(reg::record_sig_gen_ctrl_control_mode, mode);
}
xs_error_code_t Xsync::RecordSigGenerator_manualStart() { return reg_write(reg::record_sig_gen_manual_ctrl, 1, 10); }
xs_error_code_t Xsync::RecordSigGenerator_manualStop() { return reg_write(reg::record_sig_gen_manual_ctrl, 0, 10); }
xs_error_code_t Xsync::RecordSigGenerator_setAutoStartTimecode(XsyncTimecode_t timecode) { //
return writetimecode(reg::record_sig_gen_timecode_start0, reg::record_sig_gen_timecode_start1, timecode);
}
xs_error_code_t Xsync::RecordSigGenerator_setAutoStopTimecode(XsyncTimecode_t timecode) { //
return writetimecode(reg::record_sig_gen_timecode_stop0, reg::record_sig_gen_timecode_stop1, timecode);
}
xs_error_code_t Xsync::RecordSigGenerator_getAutoStartTimecode(XsyncTimecode_t &timecode) { //
return readtimecode(reg::record_sig_gen_timecode_start0, reg::record_sig_gen_timecode_start1, timecode);
}
xs_error_code_t Xsync::RecordSigGenerator_getAutoStopTimecode(XsyncTimecode_t &timecode) { return readtimecode(reg::record_sig_gen_timecode_stop0, reg::record_sig_gen_timecode_stop1, timecode); }
xs_error_code_t Xsync::RecordSigGenerator_setExternalTTLTriggerSrc(InputInterface_t ttlPortNum) {
if (ttlPortNum != INPUT_IF_TTL1 && ttlPortNum != INPUT_IF_TTL2 && ttlPortNum != INPUT_IF_TTL3 && ttlPortNum != INPUT_IF_TTL4) {
return kxs_ec_param_error;
}
return reg_write(reg::record_sig_gen_ttlin_trigger_sig_source, ttlPortNum);
}
xs_error_code_t Xsync::RecordSigGenerator_getExternalTTLTriggerSrc(InputInterface_t &ttlPortNum) { //
return _reg_read(reg::record_sig_gen_ttlin_trigger_sig_source, ttlPortNum);
}
xs_error_code_t Xsync::RecordSigGenerator_setExternalTTLTriggerPolarity(uint32_t polarity) { //
return reg_write(reg::record_sig_gen_ttlin_trigger_level, polarity);
}
xs_error_code_t Xsync::RecordSigGenerator_getExternalTTLTriggerPolarity(uint32_t &polarity) { //
return _reg_read(reg::record_sig_gen_ttlin_trigger_level, polarity);
}
// xs_error_code_t Xsync::RecordSigGenerator_setRecordExposureTime(uint32_t us) { //
// return reg_write(reg::record_sig_gen_exposure_time, us);
// }
// xs_error_code_t Xsync::RecordSigGenerator_getRecordExposureTime(uint32_t &us) {
// auto ret = reg_read(reg::record_sig_gen_exposure_time, us);
// // us = us / 10;1
// return ret;
// }
// xs_error_code_t Xsync::RecordSigGenerator_setRecordExposureOffsetTime(uint32_t us) { return reg_write(reg::record_sig_gen_exposure_offset_time, us); }
// xs_error_code_t Xsync::RecordSigGenerator_getRecordExposureOffsetTime(uint32_t &us) {
// auto ret = reg_read(reg::record_sig_gen_exposure_offset_time, us);
// // us = us / 10;
// return ret;
// }
xs_error_code_t Xsync::RecordSigGenerator_setTimecodeCtrlFlag(uint32_t autoStart, uint32_t autoStop) { //
uint32_t flag = (autoStart & 0x01) | ((autoStop & 0x01) << 1);
return reg_write(reg::record_sig_gen_timecode_control_flag, flag);
}
xs_error_code_t Xsync::RecordSigGenerator_getTimecodeCtrlFlag(uint32_t &autoStart, uint32_t &autoStop) {
uint32_t flag = 0;
auto ret = reg_read(reg::record_sig_gen_timecode_control_flag, flag);
autoStart = flag & 0x01;
autoStop = (flag >> 1) & 0x01;
return ret;
}
xs_error_code_t Xsync::RecordSigGenerator_getRecordState(uint32_t &state) { return _reg_read(reg::record_sig_gen_record_state, state); }
xs_error_code_t Xsync::RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode) { //
return readtimecode(reg::record_sig_gen_timecode_snapshot0, reg::record_sig_gen_timecode_snapshot1, timecode);
}
namespace xsync {
void XsyncInit(I_XSUDPFactory *xsync_udp_factory) { g_xsync_udp_factory = xsync_udp_factory; }
IXsync *XsyncIns() { return &Xsync::Ins(); }
} // namespace xsync
} // namespace xsync

12
src/xsync_v2_sig_type.cpp

@ -132,12 +132,12 @@ list<string> SignalTypeStrSet() {
/*******************************************************************************
* *
*******************************************************************************/
static map<string, ControlMode_t> ControlModeMap = {
{"CONTROLMODE_ALWAYS_START", CONTROLMODE_ALWAYS_START}, //
{"CONTROLMODE_MANUAL_TRIGGER", CONTROLMODE_MANUAL_TRIGGER}, //
{"CONTROLMODE_TIMECODE_TRIGGER", CONTROLMODE_TIMECODE_TRIGGER}, //
{"CONTROLMODE_EXTERNALTTL_TRIGGER", CONTROLMODE_EXTERNALTTL_TRIGGER}, //
};
static map<string, ControlMode_t> ControlModeMap = { //
{"ALWAYS_START", CONTROLMODE_ALWAYS_START}, //
{"MANUAL_TRIGGER", CONTROLMODE_MANUAL_TRIGGER}, //
{"TIMECODE_TRIGGER", CONTROLMODE_TIMECODE_TRIGGER}, //
{"EXTERNALTTL_TRIGGER", CONTROLMODE_EXTERNALTTL_TRIGGER}, //
{"EXTERNALTTL_EDGE_TRIGGER", CONTROLMODE_EXTERNALTTL_EDGE_TRIGGER}};
string ControlMode2Str(ControlMode_t mode) {
for (auto &item : ControlModeMap) {

Loading…
Cancel
Save