|
|
@ -435,9 +435,10 @@ class Xsync : public IXsync { |
|
|
|
if (source == SIGNAL_LOGIC0 || //
|
|
|
|
source == SIGNAL_LOGIC1 || //
|
|
|
|
source == SIGNAL_BUSINESS_RECORD_SIG) { |
|
|
|
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode, 3, 10)); // 转发模式
|
|
|
|
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode + (index - 1) * 16, 3, 10)); // 转发模式
|
|
|
|
} else { |
|
|
|
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode, 2, 10)); // 分频倍频模式
|
|
|
|
ZLOGI(TAG, "TTLOutputModule_setSrcSigType %d %d", index, source); |
|
|
|
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode + (index - 1) * 16, 2, 10)); // 分频倍频模式
|
|
|
|
} |
|
|
|
REG_WRITE(reg::kreg_ttlout1_input_signal_select + (index - 1) * 16, source); |
|
|
|
return kxs_ec_success; |
|
|
@ -557,28 +558,87 @@ class Xsync : public IXsync { |
|
|
|
sig != SIGNAL_TTLIN2 && //
|
|
|
|
sig != SIGNAL_TTLIN3 && //
|
|
|
|
sig != SIGNAL_TTLIN4 && //
|
|
|
|
sig != SIGNAL_SYS_CLK_OUTPUT && //
|
|
|
|
sig != SIGNAL_INTERNAL_CLOCK_SIG && //
|
|
|
|
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; |
|
|
|
virtual xs_error_code_t SysClock_getSrc(SignalType_t &sig) override { REG_READ(reg::sys_clock_source, sig); } |
|
|
|
virtual xs_error_code_t SysClock_setTriggerEdge(TriggerEdge_t edge) override { return reg_write(reg::sys_clock_trigger_edge_select, edge); } |
|
|
|
virtual xs_error_code_t SysClock_getTriggerEdge(TriggerEdge_t &edge) override { return _reg_read(reg::sys_clock_trigger_edge_select, edge); } |
|
|
|
virtual xs_error_code_t SysClock_setFreqDivision(uint32_t div) override { return reg_write(reg::sys_clock_freq_division_ctrl, div); } |
|
|
|
virtual xs_error_code_t SysClock_geFreqtDivision(uint32_t &div) override { return _reg_read(reg::sys_clock_freq_division_ctrl, div); } |
|
|
|
virtual xs_error_code_t SysClock_setFreqMultiplication(uint32_t muti) override { return reg_write(reg::sys_clock_freq_multiplication_ctrl, muti); } |
|
|
|
virtual xs_error_code_t SysClock_getFreqMultiplication(uint32_t &muti) override { return _reg_read(reg::sys_clock_freq_multiplication_ctrl, muti); } |
|
|
|
virtual xs_error_code_t SysClock_readOutSigFreq(float &freq) override { return readfreq(reg::sys_clock_outfreq_detect, freq); } |
|
|
|
virtual xs_error_code_t SysClock_readInSigFreq(float &freq) override { return readfreq(reg::sys_clock_infreq_detect, freq); } |
|
|
|
virtual xs_error_code_t storageConfig() override; |
|
|
|
|
|
|
|
xs_error_code_t DelayContrl_setDelay(int index, uint32_t delay_us) { //
|
|
|
|
DO_XSYNC(reg_write(reg::delayer_delay_sig_index, index, 10)); |
|
|
|
DO_XSYNC(reg_write(reg::delayer_delay_us, delay_us, 10)); |
|
|
|
return kxs_ec_success; |
|
|
|
} |
|
|
|
xs_error_code_t DelayContrl_getDelay(int index, uint32_t &delay_us) { |
|
|
|
DO_XSYNC(reg_write(reg::delayer_delay_sig_index, index, 10)); |
|
|
|
DO_XSYNC(reg_read(reg::delayer_delay_us, delay_us, 10)); |
|
|
|
return kxs_ec_success; |
|
|
|
} |
|
|
|
|
|
|
|
// assign sys_sig_delay_in[0] = sync_ttl_in1; //
|
|
|
|
// assign sys_sig_delay_in[1] = sync_ttl_in2; //
|
|
|
|
// assign sys_sig_delay_in[2] = sync_ttl_in3; //
|
|
|
|
// assign sys_sig_delay_in[3] = sync_ttl_in4; //
|
|
|
|
// assign sys_sig_delay_in[4] = timecode_headphone_in; //
|
|
|
|
// assign sys_sig_delay_in[5] = timecode_bnc_in; //
|
|
|
|
// assign sys_sig_delay_in[6] = genlock_in_hsync; //
|
|
|
|
// assign sys_sig_delay_in[7] = genlock_in_vsync; //
|
|
|
|
// assign sys_sig_delay_in[8] = genlock_in_fsync; //
|
|
|
|
// assign sys_sig_delay_in[9] = before_delay__sync_ttl_out1; //
|
|
|
|
// assign sys_sig_delay_in[10] = before_delay__sync_ttl_out2; //
|
|
|
|
// assign sys_sig_delay_in[11] = before_delay__sync_ttl_out3; //
|
|
|
|
// assign sys_sig_delay_in[12] = before_delay__sync_ttl_out4; //
|
|
|
|
// assign sys_sig_delay_in[13] = before_delay__stm32if_start_signal_out; //
|
|
|
|
// assign sys_sig_delay_in[14] = before_delay__stm32if_camera_sync_out; //
|
|
|
|
// assign sys_sig_delay_in[15] = before_delay__stm32if_timecode_sync_out; //
|
|
|
|
|
|
|
|
virtual xs_error_code_t DelayContrl_setInputDelay(uint32_t delay_us) override { |
|
|
|
DO_XSYNC(DelayContrl_setDelay(0, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(1, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(2, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(3, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(4, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(5, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(6, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(7, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(8, delay_us * 10)); |
|
|
|
return kxs_ec_success; |
|
|
|
} |
|
|
|
virtual xs_error_code_t DelayContrl_getInputDelay(uint32_t &delay_us) override { |
|
|
|
uint32_t delay_cnt; |
|
|
|
DO_XSYNC(DelayContrl_getDelay(8, delay_cnt)); |
|
|
|
delay_us = delay_cnt / 10; |
|
|
|
return kxs_ec_success; |
|
|
|
} |
|
|
|
|
|
|
|
virtual xs_error_code_t DelayContrl_setOutputDelay(uint32_t delay_us) override { |
|
|
|
DO_XSYNC(DelayContrl_setDelay(9, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(10, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(11, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(12, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(13, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(14, delay_us * 10)); |
|
|
|
DO_XSYNC(DelayContrl_setDelay(15, delay_us * 10)); |
|
|
|
return kxs_ec_success; |
|
|
|
} |
|
|
|
virtual xs_error_code_t DelayContrl_getOutputDelay(uint32_t &delay_us) override { |
|
|
|
uint32_t delay_cnt; |
|
|
|
DO_XSYNC(DelayContrl_getDelay(15, delay_cnt)); |
|
|
|
delay_us = delay_cnt / 10; |
|
|
|
return kxs_ec_success; |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
xs_error_code_t doaction(uint32_t action, uint32_t actionval, uint32_t *ackreturn, int32_t overtime_ms = 100); |
|
|
|