Browse Source

添加时码和TTL输入

xsync_v2
zhaohe 2 years ago
parent
commit
ae847b48f9
  1. 153
      xsync.cpp
  2. 49
      xsync.hpp
  3. 26
      xsync_regs.hpp

153
xsync.cpp

@ -333,6 +333,34 @@ list<string> TriggerSigTypeStrSet() {
} // namespace camera_sync_packet_generator_module
namespace timecode_input_module {
static map<string, TriggerSigType_t> Str2TriggerSigTypeMap = {
{"off", koff}, //
{"bnc_timecode", kbnc_timecode},
{"headphone_timecode", kheadphone_timecode},
};
string TriggerSigType2Str(TriggerSigType_t type) {
for (auto &item : Str2TriggerSigTypeMap) {
if (item.second == type) return item.first;
}
return "unkown";
}
TriggerSigType_t Str2TriggerSigType(string type) {
auto it = Str2TriggerSigTypeMap.find(type);
if (it != Str2TriggerSigTypeMap.end()) {
return it->second;
}
return koff;
}
list<string> TriggerSigTypeStrSet() {
list<string> ret;
for (auto &item : Str2TriggerSigTypeMap) {
ret.push_back(item.first);
}
return ret;
}
} // namespace timecode_input_module
} // namespace xsync
static XsyncTimecode_t timecode64ToXsyncTimeCode(Timecode64_t tc64) {
@ -677,6 +705,7 @@ xs_error_code_t Xsync::Basic_getGenlockFormat(GenlockFormat_t &format) {
}
xs_error_code_t Xsync::Basic_setTimecodeFormat(TimecodeFormat_t format) {
DO_XSYNC(SigGenerator_setTimecodeFormat(format));
DO_XSYNC(TimecodeInputModule_setTimecodeFormat(format));
return kxs_ec_success;
}
xs_error_code_t Xsync::Basic_getTimecodeFormat(TimecodeFormat_t &format) {
@ -1068,3 +1097,127 @@ xs_error_code_t Xsync::CameraSyncPacketGeneratorModule_clearPacketIndex() {
DO_XSYNC(reg_write(reg::kstm32_camera_sync_signal_count, 0, readbak, 10));
return kxs_ec_success;
}
xs_error_code_t Xsync::TimecodeInputModule_setSrcSelect(timecode_input_module::TriggerSigType_t timecode_select) {
uint32_t readbak = 0;
DO_XSYNC(reg_write(reg::ktimecode_in_timecode_sig_selt, timecode_select, readbak, 10));
return kxs_ec_success;
}
xs_error_code_t Xsync::TimecodeInputModule_getSrcSelect(timecode_input_module::TriggerSigType_t timecode_select) {
uint32_t readbak = 0;
DO_XSYNC(reg_read(reg::ktimecode_in_timecode_sig_selt, readbak, 10));
timecode_select = (timecode_input_module::TriggerSigType_t)readbak;
return kxs_ec_success;
}
xs_error_code_t Xsync::TimecodeInputModule_setTimecodeFormat(TimecodeFormat_t format) {
uint32_t readbak = 0;
DO_XSYNC(reg_write(reg::ktimecode_in_timecode_format, format, readbak, 10));
return kxs_ec_success;
}
xs_error_code_t Xsync::TimecodeInputModule_getTimecodeFormat(TimecodeFormat_t &format) {
uint32_t readbak = 0;
DO_XSYNC(reg_read(reg::ktimecode_in_timecode_format, readbak, 10));
format = (TimecodeFormat_t)readbak;
return kxs_ec_success;
}
xs_error_code_t Xsync::TimecodeInputModule_getTimecode(XsyncTimecode_t& timecode) {
uint32_t readbak = 0;
xs_error_code_t ecode = kxs_ec_success;
uint32_t tc0 = 0;
uint32_t tc1 = 0;
ecode = reg_read(reg::ktimecode_in_timecode0, tc0, 10);
if (ecode != kxs_ec_success) return ecode;
ecode = reg_read(reg::ktimecode_in_timecode1, tc1, 10);
if (ecode != kxs_ec_success) return ecode;
Timecode64_t tc64;
tc64.tc0 = tc0;
tc64.tc1 = tc1;
timecode = timecode64ToXsyncTimeCode(tc64);
return ecode;
}
xs_error_code_t Xsync::TTLInputModule_setEn(int32_t index, bool en) {
uint32_t readbak = 0;
DO_XSYNC(reg_read(reg::kttlin_en, readbak, 10));
if (en) {
readbak |= (1 << index);
} else {
readbak &= ~(1 << index);
}
DO_XSYNC(reg_write(reg::kttlin_en, readbak, readbak, 10));
return kxs_ec_success;
}
xs_error_code_t Xsync::TTLInputModule_getEn(int32_t index, bool &en) {
uint32_t readbak = 0;
DO_XSYNC(reg_read(reg::kttlin_en, readbak, 10));
en = (readbak & (1 << index)) != 0;
return kxs_ec_success;
}
xs_error_code_t Xsync::TTLInputModule_setFilterFactor(int32_t index, uint32_t factor) {
uint32_t readbak = 0;
if (index == 1) {
DO_XSYNC(reg_write(reg::kttlin1_filter_factor, factor, readbak, 10));
} else if (index == 2) {
DO_XSYNC(reg_write(reg::kttlin2_filter_factor, factor, readbak, 10));
} else if (index == 3) {
DO_XSYNC(reg_write(reg::kttlin3_filter_factor, factor, readbak, 10));
} else if (index == 4) {
DO_XSYNC(reg_write(reg::kttlin4_filter_factor, factor, readbak, 10));
} else {
return kxs_ec_param_error;
}
return kxs_ec_success;
}
xs_error_code_t Xsync::TTLInputModule_getFilterFactor(int32_t index, uint32_t &factor) {
uint32_t readbak = 0;
if (index == 1) {
DO_XSYNC(reg_read(reg::kttlin1_filter_factor, readbak, 10));
} else if (index == 2) {
DO_XSYNC(reg_read(reg::kttlin2_filter_factor, readbak, 10));
} else if (index == 3) {
DO_XSYNC(reg_read(reg::kttlin3_filter_factor, readbak, 10));
} else if (index == 4) {
DO_XSYNC(reg_read(reg::kttlin4_filter_factor, readbak, 10));
} else {
return kxs_ec_param_error;
}
factor = readbak;
return kxs_ec_success;
}
xs_error_code_t Xsync::TTLInputModule_setDivideFactor(int32_t index, uint32_t factor) {
uint32_t readbak = 0;
if (index == 1) {
DO_XSYNC(reg_write(reg::kttlin1_devide_factor, factor, readbak, 10));
} else if (index == 2) {
DO_XSYNC(reg_write(reg::kttlin2_devide_factor, factor, readbak, 10));
} else if (index == 3) {
DO_XSYNC(reg_write(reg::kttlin3_devide_factor, factor, readbak, 10));
} else if (index == 4) {
DO_XSYNC(reg_write(reg::kttlin4_devide_factor, factor, readbak, 10));
} else {
return kxs_ec_param_error;
}
return kxs_ec_success;
}
xs_error_code_t Xsync::TTLInputModule_getDivideFactor(int32_t index, uint32_t &factor) {
uint32_t readbak = 0;
if (index == 1) {
DO_XSYNC(reg_read(reg::kttlin1_devide_factor, readbak, 10));
} else if (index == 2) {
DO_XSYNC(reg_read(reg::kttlin2_devide_factor, readbak, 10));
} else if (index == 3) {
DO_XSYNC(reg_read(reg::kttlin3_devide_factor, readbak, 10));
} else if (index == 4) {
DO_XSYNC(reg_read(reg::kttlin4_devide_factor, readbak, 10));
} else {
return kxs_ec_param_error;
}
factor = readbak;
return kxs_ec_success;
}

49
xsync.hpp

@ -139,7 +139,9 @@ ControlMode_t Str2ControlMode(string mode);
list<string> ControlModeStrSet();
} // namespace sig_generator_module
/*******************************************************************************
* *
*******************************************************************************/
namespace timecode_output_module {
typedef enum {
koff = 0, // 关闭输出
@ -161,7 +163,9 @@ OutputSigLevelType_t Str2OutputSigLevelType(string type);
list<string> OutputSigLevelTypeStrSet();
} // namespace timecode_output_module
/*******************************************************************************
* *
*******************************************************************************/
namespace camera_sync_packet_generator_module {
typedef enum {
koff = 0, // 关闭输出
@ -175,6 +179,22 @@ list<string> TriggerSigTypeStrSet();
} // namespace camera_sync_packet_generator_module
/*******************************************************************************
* *
*******************************************************************************/
namespace timecode_input_module {
typedef enum {
koff = 0,
kbnc_timecode,
kheadphone_timecode,
} TriggerSigType_t;
string TriggerSigType2Str(TriggerSigType_t type);
TriggerSigType_t Str2TriggerSigType(string type);
list<string> TriggerSigTypeStrSet();
} // namespace timecode_input_module
class Xsync {
public:
private:
@ -244,6 +264,31 @@ class Xsync {
xs_error_code_t Basic_getTimecodeFormat(TimecodeFormat_t &format);
/*******************************************************************************
* *
*******************************************************************************/
xs_error_code_t TimecodeInputModule_setSrcSelect(timecode_input_module::TriggerSigType_t timecode_select);
xs_error_code_t TimecodeInputModule_getSrcSelect(timecode_input_module::TriggerSigType_t timecode_select);
xs_error_code_t TimecodeInputModule_setTimecodeFormat(TimecodeFormat_t format);
xs_error_code_t TimecodeInputModule_getTimecodeFormat(TimecodeFormat_t &format);
xs_error_code_t TimecodeInputModule_getTimecode(XsyncTimecode_t& timecode);
/*******************************************************************************
* TTL输入模块 *
*******************************************************************************/
xs_error_code_t TTLInputModule_setEn(int32_t index, bool en);
xs_error_code_t TTLInputModule_getEn(int32_t index, bool &en);
xs_error_code_t TTLInputModule_setFilterFactor(int32_t index, uint32_t factor);
xs_error_code_t TTLInputModule_getFilterFactor(int32_t index, uint32_t &factor);
xs_error_code_t TTLInputModule_setDivideFactor(int32_t index, uint32_t factor);
xs_error_code_t TTLInputModule_getDivideFactor(int32_t index, uint32_t &factor);
/*******************************************************************************
* *
*******************************************************************************/
/**

26
xsync_regs.hpp

@ -20,9 +20,6 @@ using namespace std;
#define REG_ADD_OFF_SIG_GENERATOR (0x00030)
// 输入组件
#define REG_ADD_OFF_TTLIN1 (0x0100)
#define REG_ADD_OFF_TTLIN2 (0x0110)
#define REG_ADD_OFF_TTLIN3 (0x0120)
#define REG_ADD_OFF_TTLIN4 (0x0130)
#define REG_ADD_OFF_TIMECODE_IN (0x0140)
#define REG_ADD_OFF_GENLOCK_IN (0x0150)
// 输出组件
@ -140,6 +137,29 @@ typedef enum {
kcamera_sync_out_camera_sync_select = REG_ADD_OFF_CAMERA_SYNC_OUT + 0,
/*******************************************************************************
* *
*******************************************************************************/
ktimecode_in_timecode_sig_selt = REG_ADD_OFF_TIMECODE_IN + 0,
ktimecode_in_timecode_format = REG_ADD_OFF_TIMECODE_IN + 1,
ktimecode_in_timecode0 = REG_ADD_OFF_TIMECODE_IN + 2,
ktimecode_in_timecode1 = REG_ADD_OFF_TIMECODE_IN + 3,
/*******************************************************************************
* TTL输入模块 *
*******************************************************************************/
kttlin_en = REG_ADD_OFF_TTLIN1 + 0,
kttlin1_devide_factor = REG_ADD_OFF_TTLIN1 + 1,
kttlin2_devide_factor = REG_ADD_OFF_TTLIN1 + 2,
kttlin3_devide_factor = REG_ADD_OFF_TTLIN1 + 3,
kttlin4_devide_factor = REG_ADD_OFF_TTLIN1 + 4,
kttlin1_filter_factor = REG_ADD_OFF_TTLIN1 + 5,
kttlin2_filter_factor = REG_ADD_OFF_TTLIN1 + 6,
kttlin3_filter_factor = REG_ADD_OFF_TTLIN1 + 7,
kttlin4_filter_factor = REG_ADD_OFF_TTLIN1 + 8,
} RegAdd_t;
} // namespace reg

Loading…
Cancel
Save