|
|
@ -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); } |
|
|
|