Browse Source

V2.0

master
zhaohe 1 year ago
parent
commit
dda08a83fc
  1. 181
      include/ixsync.hpp
  2. 151
      src/xsync_v2.cpp

181
include/ixsync.hpp

@ -52,22 +52,109 @@ class IXsync {
* *
***********************************************************************************************/
/**
* @brief
*
* : 33
* TTLInputModule1_XXXXX: TTL1_IN
* TTLInputModule2_XXXXX: TTL2_IN
* TTLInputModule3_XXXXX: TTL3_IN
* TTLInputModule4_XXXXX:
*
* ExternalTimecode_XXXXX : BNC时码输入口
*
* ExternalGenlock_XXXXX : GENLOCK输入口
*
*
*
*
* 使:
* 使使
*
* ExternalTimecode_setSource
* :
* :
* INPUT_IF_TIMECODE_BNC
* INPUT_IF_TIMECODE_HEADPHONE
*
*
* ExternalTimecode_setFormat
* :
* :
* TIMECODE_FPS2398
* TIMECODE_FPS2400
* TIMECODE_FPS2500
* TIMECODE_FPS2997
* TIMECODE_FPS2997Drop
* TIMECODE_FPS3000
*
*
* TTLInputModuleX_detectFreq
* :TTL输入频率
*
* ExternalGenlock_detectFreq
* :GENLOCK信号频率
*
*/
virtual xs_error_code_t ExternalTimecode_setSource(InputInterface_t src) = 0;
virtual xs_error_code_t ExternalTimecode_getSource(InputInterface_t &timecode_select) = 0;
virtual xs_error_code_t ExternalTimecode_setFormat(TimecodeFormat_t format) = 0;
virtual xs_error_code_t ExternalTimecode_getFormat(TimecodeFormat_t &format) = 0;
virtual xs_error_code_t ExternalTimecode_readCode(XsyncTimecode_t &timecode) = 0;
virtual xs_error_code_t TTLInputModule1_detectFreq(uint32_t &freq) = 0;
virtual xs_error_code_t TTLInputModule2_detectFreq(uint32_t &freq) = 0;
virtual xs_error_code_t TTLInputModule3_detectFreq(uint32_t &freq) = 0;
virtual xs_error_code_t TTLInputModule4_detectFreq(uint32_t &freq) = 0;
virtual xs_error_code_t TTLInputModule1_detectFreq(float &freq) = 0;
virtual xs_error_code_t TTLInputModule2_detectFreq(float &freq) = 0;
virtual xs_error_code_t TTLInputModule3_detectFreq(float &freq) = 0;
virtual xs_error_code_t TTLInputModule4_detectFreq(float &freq) = 0;
virtual xs_error_code_t ExternalGenlock_detectFreq(float &freq) = 0;
/***********************************************************************************************
* *
* *
***********************************************************************************************/
/**
* @brief
*
* : 7
* InternalTimecode_XXXXX :
* InternalGenlock_XXXXX :
* InternalClock_XXXXX :
*
* SysTimecode_XXXXX :
* SysGenlock_XXXXX :
* SysClock_XXXXX :
*
*
*
* :
* Xsync系统中一共有三个比较重要概念GenlockGenlock
* GenlockGenlockGenlock
* Genlock
*
*
* ---|1
* ---|0 ---->
*
*
* Genlock ---|1
* Genlock ---|0 ----> Genlock
*
*
* ---|
* Genlock ---|
* ---| ---->
* TTL输入信号 ---|
* ---|
*
*
* :
* 1. GenlockAPI进行修改
* 2. GenlockGenlock
* 3. 沿
*
*
*/
virtual xs_error_code_t InternalTimecode_setFormat(TimecodeFormat_t format) = 0;
virtual xs_error_code_t InternalTimecode_getFormat(TimecodeFormat_t &format) = 0;
@ -100,6 +187,49 @@ class IXsync {
virtual xs_error_code_t SysClock_readOutSigFreq(float &freq) = 0;
virtual xs_error_code_t SysClock_readInSigFreq(float &freq) = 0;
/***********************************************************************************************
* *
***********************************************************************************************/
/**
* @brief
*
* :
* 使
* TimeCode启动TTL触发启动三种方式RecordSigGenerator_setContrlMode可以设置
*
* :
*
* RecordSigGenerator_setContrlMode将模式配置成CONTROLMODE_MANUAL_TRIGGER
*
* RecordSigGenerator_manualStart
* RecordSigGenerator_manualStop
*
*
* Timecode控制:
*
* Timecode控制启动RecordSigGenerator_setContrlMode将模式配置成CONTROLMODE_TIMECODE_TRIGGER
* RecordSigGenerator_setTimecodeCtrlFlag方法使Timecode自动控制
* 使Timecode自动控制停止
* RecordSigGenerator_setAutoStartTimecode :
* RecordSigGenerator_setAutoStopTimecode :
* RecordSigGenerator_setTimecodeCtrlFlag :使使
*
* TTL控制:
*
* TTL触发启动RecordSigGenerator_setContrlMode将模式配置成CONTROLMODE_EXTERNALTTL_TRIGGER
*
* RecordSigGenerator_setExternalTTLTriggerSrc : TTL触发源INPUT_IF_TTL1->INPUT_IF_TTL4
* RecordSigGenerator_setExternalTTLTriggerPolarity : (0:1:)
*
*
*
* RecordSigGenerator_setRecordExposureTime
* RecordSigGenerator_setRecordExposureOffsetTime
*
*
*/
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;
@ -125,10 +255,43 @@ class IXsync {
* *
***********************************************************************************************/
virtual xs_error_code_t TimecodeOutputModule_setBncOutputLevel(int level) = 0;
virtual xs_error_code_t TimecodeOutputModule_getBncOutputLevel(int &level) = 0;
virtual xs_error_code_t TimecodeOutputModule_setHeadphoneOutputLevel(int level) = 0;
virtual xs_error_code_t TimecodeOutputModule_getHeadphoneOutputLevel(int &level) = 0;
/**
* @brief 4TTLTimecodeGenlockTTL输出()
*
*
* TTL输出组件
* :
* SIGNAL_LOGIC0
* SIGNAL_LOGIC1
* SIGNAL_TTLIN1
* SIGNAL_TTLIN2
* SIGNAL_TTLIN3
* SIGNAL_TTLIN4
* SIGNAL_SYS_CLK_OUTPUT
* SIGNAL_SYS_GENLOCK_OUTPUT
* SIGNAL_SYS_TIMECODE_FREQ_OUTPUT
* SIGNAL_BUSINESS_RECORD_SIG
* SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG
*
* :
* SIGNAL_BUSINESS_RECORD_SIG SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG
* 012
* 012
*
*
*/
virtual xs_error_code_t TTLOutputModule1_setSrcSigType(SignalType_t source) = 0;
virtual xs_error_code_t TTLOutputModule1_getSrcSigType(SignalType_t &source) = 0;

151
src/xsync_v2.cpp

@ -102,10 +102,10 @@ class Xsync : public IXsync {
virtual xs_error_code_t ExternalTimecode_getFormat(TimecodeFormat_t &format) override;
virtual xs_error_code_t ExternalTimecode_readCode(XsyncTimecode_t &timecode) override;
virtual xs_error_code_t TTLInputModule1_detectFreq(uint32_t &freq) override;
virtual xs_error_code_t TTLInputModule2_detectFreq(uint32_t &freq) override;
virtual xs_error_code_t TTLInputModule3_detectFreq(uint32_t &freq) override;
virtual xs_error_code_t TTLInputModule4_detectFreq(uint32_t &freq) override;
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;
@ -161,10 +161,10 @@ class Xsync : public IXsync {
virtual xs_error_code_t RecordSigGenerator_getRecordState(uint32_t &state) override;
virtual xs_error_code_t RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode) override;
virtual xs_error_code_t TimecodeOutputModule_setBncOutputLevel(int level); // 0:line,1:mi overridec
virtual xs_error_code_t TimecodeOutputModule_getBncOutputLevel(int &level) override;
virtual xs_error_code_t TimecodeOutputModule_setHeadphoneOutputLevel(int level); // 0:line,1:mi overridec
virtual xs_error_code_t TimecodeOutputModule_getHeadphoneOutputLevel(int &level) 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 TTLOutputModule1_setSrcSigType(SignalType_t source) override;
virtual xs_error_code_t TTLOutputModule1_getSrcSigType(SignalType_t &source) override;
@ -601,33 +601,10 @@ xs_error_code_t Xsync::doaction(uint32_t action, uint32_t actionval, uint32_t *a
*******************************************************************************/
#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(uint32_t &freq) {
uint32_t freq_cnt = 0;
DO_XSYNC(reg_read(reg::k_ttlin1_freq_detector_reg, freq_cnt, 10));
if (freq_cnt == 0) {
freq = 0;
}
freq = FREQ_CNT_TO_FREQ(freq_cnt);
return kxs_ec_success;
}
xs_error_code_t Xsync::TTLInputModule2_detectFreq(uint32_t &freq) {
uint32_t freq_cnt = 0;
DO_XSYNC(reg_read(reg::k_ttlin2_freq_detector_reg, freq_cnt, 10));
freq = FREQ_CNT_TO_FREQ(freq_cnt);
return kxs_ec_success;
}
xs_error_code_t Xsync::TTLInputModule3_detectFreq(uint32_t &freq) {
uint32_t freq_cnt = 0;
DO_XSYNC(reg_read(reg::k_ttlin3_freq_detector_reg, freq_cnt, 10));
freq = FREQ_CNT_TO_FREQ(freq_cnt);
return kxs_ec_success;
}
xs_error_code_t Xsync::TTLInputModule4_detectFreq(uint32_t &freq) {
uint32_t freq_cnt = 0;
DO_XSYNC(reg_read(reg::k_ttlin4_freq_detector_reg, freq_cnt, 10));
freq = FREQ_CNT_TO_FREQ(freq_cnt);
return kxs_ec_success;
}
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); }
/*******************************************************************************
* TTLOutputModule *
@ -635,7 +612,29 @@ xs_error_code_t Xsync::TTLInputModule4_detectFreq(uint32_t &freq) {
// 0:固定输出低电平,1:固定输出高电平,2:分频倍频模式,3:转发模式,4:测试模式
xs_error_code_t Xsync::TTLOutputModule1_setSrcSigType(SignalType_t source) {
if (source == SIGNAL_TTLIN1 || source == SIGNAL_TTLIN2 || source == SIGNAL_TTLIN3 || source == SIGNAL_TTLIN4) {
if (source != SIGNAL_LOGIC0 && //
source != SIGNAL_LOGIC1 && //
source != SIGNAL_TTLIN1 && //
source != SIGNAL_TTLIN2 && //
source != SIGNAL_TTLIN3 && //
source != SIGNAL_TTLIN4 && //
source != SIGNAL_SYS_CLK_OUTPUT && //
source != SIGNAL_SYS_GENLOCK_OUTPUT && //
source != SIGNAL_SYS_TIMECODE_FREQ_OUTPUT && //
source != SIGNAL_BUSINESS_RECORD_SIG && //
source != SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG //
) {
return kxs_ec_param_error;
}
if (source == SIGNAL_TTLIN1 || //
source == SIGNAL_TTLIN2 || //
source == SIGNAL_TTLIN3 || //
source == SIGNAL_TTLIN4 || //
source == SIGNAL_SYS_CLK_OUTPUT || //
source == SIGNAL_SYS_GENLOCK_OUTPUT || //
source == SIGNAL_SYS_TIMECODE_FREQ_OUTPUT //
) {
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode, 2, 10)); // 分频倍频模式
} else {
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode, 3, 10)); // 转发模式
@ -643,7 +642,28 @@ xs_error_code_t Xsync::TTLOutputModule1_setSrcSigType(SignalType_t source) {
REG_WRITE(reg::kreg_ttlout1_input_signal_select, source);
}
xs_error_code_t Xsync::TTLOutputModule2_setSrcSigType(SignalType_t source) {
if (source == SIGNAL_TTLIN1 || source == SIGNAL_TTLIN2 || source == SIGNAL_TTLIN3 || source == SIGNAL_TTLIN4) {
if (source != SIGNAL_LOGIC0 && //
source != SIGNAL_LOGIC1 && //
source != SIGNAL_TTLIN1 && //
source != SIGNAL_TTLIN2 && //
source != SIGNAL_TTLIN3 && //
source != SIGNAL_TTLIN4 && //
source != SIGNAL_SYS_CLK_OUTPUT && //
source != SIGNAL_SYS_GENLOCK_OUTPUT && //
source != SIGNAL_SYS_TIMECODE_FREQ_OUTPUT && //
source != SIGNAL_BUSINESS_RECORD_SIG && //
source != SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG //
) {
return kxs_ec_param_error;
}
if (source == SIGNAL_TTLIN1 || //
source == SIGNAL_TTLIN2 || //
source == SIGNAL_TTLIN3 || //
source == SIGNAL_TTLIN4 || //
source == SIGNAL_SYS_CLK_OUTPUT || //
source == SIGNAL_SYS_GENLOCK_OUTPUT || //
source == SIGNAL_SYS_TIMECODE_FREQ_OUTPUT //
) {
DO_XSYNC(reg_write(reg::kreg_ttlout2_signal_process_mode, 2, 10)); // 分频倍频模式
} else {
DO_XSYNC(reg_write(reg::kreg_ttlout2_signal_process_mode, 3, 10)); // 转发模式
@ -651,7 +671,28 @@ xs_error_code_t Xsync::TTLOutputModule2_setSrcSigType(SignalType_t source) {
REG_WRITE(reg::kreg_ttlout2_input_signal_select, source);
}
xs_error_code_t Xsync::TTLOutputModule3_setSrcSigType(SignalType_t source) {
if (source == SIGNAL_TTLIN1 || source == SIGNAL_TTLIN2 || source == SIGNAL_TTLIN3 || source == SIGNAL_TTLIN4) {
if (source != SIGNAL_LOGIC0 && //
source != SIGNAL_LOGIC1 && //
source != SIGNAL_TTLIN1 && //
source != SIGNAL_TTLIN2 && //
source != SIGNAL_TTLIN3 && //
source != SIGNAL_TTLIN4 && //
source != SIGNAL_SYS_CLK_OUTPUT && //
source != SIGNAL_SYS_GENLOCK_OUTPUT && //
source != SIGNAL_SYS_TIMECODE_FREQ_OUTPUT && //
source != SIGNAL_BUSINESS_RECORD_SIG && //
source != SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG //
) {
return kxs_ec_param_error;
}
if (source == SIGNAL_TTLIN1 || //
source == SIGNAL_TTLIN2 || //
source == SIGNAL_TTLIN3 || //
source == SIGNAL_TTLIN4 || //
source == SIGNAL_SYS_CLK_OUTPUT || //
source == SIGNAL_SYS_GENLOCK_OUTPUT || //
source == SIGNAL_SYS_TIMECODE_FREQ_OUTPUT //
) {
DO_XSYNC(reg_write(reg::kreg_ttlout3_signal_process_mode, 2, 10)); // 分频倍频模式
} else {
DO_XSYNC(reg_write(reg::kreg_ttlout3_signal_process_mode, 3, 10)); // 转发模式
@ -659,6 +700,20 @@ xs_error_code_t Xsync::TTLOutputModule3_setSrcSigType(SignalType_t source) {
REG_WRITE(reg::kreg_ttlout3_input_signal_select, source);
}
xs_error_code_t Xsync::TTLOutputModule4_setSrcSigType(SignalType_t source) {
if (source != SIGNAL_LOGIC0 && //
source != SIGNAL_LOGIC1 && //
source != SIGNAL_TTLIN1 && //
source != SIGNAL_TTLIN2 && //
source != SIGNAL_TTLIN3 && //
source != SIGNAL_TTLIN4 && //
source != SIGNAL_SYS_CLK_OUTPUT && //
source != SIGNAL_SYS_GENLOCK_OUTPUT && //
source != SIGNAL_SYS_TIMECODE_FREQ_OUTPUT && //
source != SIGNAL_BUSINESS_RECORD_SIG && //
source != SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG //
) {
return kxs_ec_param_error;
}
if (source == SIGNAL_TTLIN1 || source == SIGNAL_TTLIN2 || source == SIGNAL_TTLIN3 || source == SIGNAL_TTLIN4) {
DO_XSYNC(reg_write(reg::kreg_ttlout4_signal_process_mode, 2, 10)); // 分频倍频模式
} else {
@ -793,9 +848,25 @@ xs_error_code_t Xsync::InternalClock_getFreq(float &freq) { return readfreq(reg:
/*******************************************************************************
* SysClock *
*******************************************************************************/
xs_error_code_t Xsync::SysClock_setSrc(SignalType_t sig) { return reg_write(reg::sys_clock_source, sig); }
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) { return reg_write(reg::sys_clock_trigger_edge_select, edge); }
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); }

Loading…
Cancel
Save