From 700aca785c195b6bb3c3a5f6629cad5e2ed3adfa Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 27 Mar 2024 11:27:09 +0800 Subject: [PATCH] update --- include/ixsync.hpp | 39 ++-- include/xsync_regs.hpp | 44 +++-- include/xsync_v2_sig_type.hpp | 9 +- src/xsync_v2.cpp | 415 +++++++++++++++--------------------------- src/xsync_v2_sig_type.cpp | 12 +- 5 files changed, 199 insertions(+), 320 deletions(-) diff --git a/include/ixsync.hpp b/include/ixsync.hpp index fdd08e7..76cc752 100644 --- a/include/ixsync.hpp +++ b/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; diff --git a/include/xsync_regs.hpp b/include/xsync_regs.hpp index 91b98f3..31f3f09 100644 --- a/include/xsync_regs.hpp +++ b/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 * diff --git a/include/xsync_v2_sig_type.hpp b/include/xsync_v2_sig_type.hpp index 2e351da..30a1eea 100644 --- a/include/xsync_v2_sig_type.hpp +++ b/include/xsync_v2_sig_type.hpp @@ -136,10 +136,11 @@ list 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); diff --git a/src/xsync_v2.cpp b/src/xsync_v2.cpp index dd92c07..90d66e4 100644 --- a/src/xsync_v2.cpp +++ b/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 \ No newline at end of file +} // namespace xsync diff --git a/src/xsync_v2_sig_type.cpp b/src/xsync_v2_sig_type.cpp index fb29705..a7eace6 100644 --- a/src/xsync_v2_sig_type.cpp +++ b/src/xsync_v2_sig_type.cpp @@ -132,12 +132,12 @@ list SignalTypeStrSet() { /******************************************************************************* * 控制模式 * *******************************************************************************/ -static map 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 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) {