From a11e18e086f23c2d51169a2f0b17f55a467c582a Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 11 Jan 2024 16:26:29 +0800 Subject: [PATCH] update --- xsync.cpp | 101 ++++++++++++++++++++++++++++++++++++-------------------------- xsync.hpp | 71 +++++++++++++++++++++++++++---------------- 2 files changed, 104 insertions(+), 68 deletions(-) diff --git a/xsync.cpp b/xsync.cpp index 32c844c..3f52d58 100644 --- a/xsync.cpp +++ b/xsync.cpp @@ -1,5 +1,7 @@ #include "xsync.hpp" +#include + #include #define ENABLE_LOG #ifdef ENABLE_LOG @@ -83,13 +85,13 @@ static map TriggerSigType2StrMap = { {"internal_100hz", tri_internal_100hz}, }; static map Str2TriggerSigTypeMap = { - {"ot_logic0", ot_logic0}, // - {"ot_logic1", ot_logic1}, // - {"ot_test_signal", ot_test_signal}, // - {"ot_input_signal", ot_input_signal}, // - {"ot_input_signal_mirror", ot_input_signal_mirror}, // - {"ot_trigger_mode_signal", ot_trigger_mode_signal}, // - {"ot_trigger_mode_signal_mirror", ot_trigger_mode_signal_mirror}, + {"OutSigType_logic0", OutSigType_logic0}, // + {"OutSigType_logic1", OutSigType_logic1}, // + {"OutSigType_test_signal", OutSigType_test_signal}, // + {"OutSigType_input_signal", OutSigType_input_signal}, // + {"OutSigType_input_signal_mirror", OutSigType_input_signal_mirror}, // + {"OutSigType_trigger_mode_signal", OutSigType_trigger_mode_signal}, // + {"OutSigType_trigger_mode_signal_mirror", OutSigType_trigger_mode_signal_mirror}, }; string TriggerSigType2Str(TriggerSigType_t type) { @@ -116,7 +118,7 @@ OutputSigType_t Str2OutputSigType(string type) { if (it != Str2TriggerSigTypeMap.end()) { return it->second; } - return ot_logic0; + return OutSigType_logic0; } list TriggerSigTypeStrSet() { @@ -137,31 +139,31 @@ list OutputSigTypeStrSet() { } // namespace ttlout_module namespace sig_generator_module { -static map Str2ContrlModeMap = { - {"manualTrigger", kContrlMode_manualTrigger}, // - {"extTimecodeTrigger", kContrlMode_externalTimecodeTrigger}, - {"ttl1Trigger", kContrlMode_externalTTL1Trigger}, - {"ttl2Trigger", kContrlMode_externalTTL2Trigger}, - {"ttl3Trigger", kContrlMode_externalTTL3Trigger}, - {"ttl4Trigger", kContrlMode_externalTTL4Trigger}, +static map Str2ControlModeMap = { + {"manualTrigger", kControlMode_manualTrigger}, // + {"extTimecodeTrigger", kControlMode_externalTimecodeTrigger}, + {"ttl1Trigger", kControlMode_externalTTL1Trigger}, + {"ttl2Trigger", kControlMode_externalTTL2Trigger}, + {"ttl3Trigger", kControlMode_externalTTL3Trigger}, + {"ttl4Trigger", kControlMode_externalTTL4Trigger}, }; -string ContrlMode2Str(ContrlMode_t mode) { - for (auto &item : Str2ContrlModeMap) { +string ControlMode2Str(ControlMode_t mode) { + for (auto &item : Str2ControlModeMap) { if (item.second == mode) return item.first; } return "unkown"; } -ContrlMode_t Str2ContrlMode(string mode) { - auto it = Str2ContrlModeMap.find(mode); - if (it != Str2ContrlModeMap.end()) { +ControlMode_t Str2ControlMode(string mode) { + auto it = Str2ControlModeMap.find(mode); + if (it != Str2ControlModeMap.end()) { return it->second; } - return kContrlMode_manualTrigger; + return kControlMode_manualTrigger; } -list ContrlModeStrSet() { +list ControlModeStrSet() { list ret; - for (auto &item : Str2ContrlModeMap) { + for (auto &item : Str2ControlModeMap) { ret.push_back(item.first); } return ret; @@ -234,6 +236,19 @@ list TimecodeFormatStrSet() { return ret; } +string XsyncTimecodeToStr(XsyncTimecode_t timecode) { + char buf[32] = {0}; + sprintf(buf, "%02d:%02d:%02d:%02d", timecode.hour, timecode.minute, timecode.second, timecode.frame); + return string(buf); +} +XsyncTimecode_t Str2XsyncTimecode(string timecode) { + XsyncTimecode_t ret; + char buf[128] = {0}; + strncpy(buf, timecode.c_str(), 127); + sscanf(buf, "%02d:%02d:%02d:%02d", &ret.hour, &ret.minute, &ret.second, &ret.frame); + return ret; +} + } // namespace xsync static XsyncTimecode_t timecode64ToXsyncTimeCode(Timecode64_t tc64) { @@ -760,24 +775,24 @@ xs_error_code_t Xsync::TTLOutputModule_getTriggerModePulseDelay(int32_t index, u pulse_delay_ms = readbak / 1000; return ecode; } -xs_error_code_t Xsync::SigGenerator_setContrlMode(sig_generator_module::ContrlMode_t mode) { +xs_error_code_t Xsync::SigGenerator_setControlMode(sig_generator_module::ControlMode_t mode) { uint32_t readbak = 0; - return reg_write(reg::kSigGenerator_ctl, mode, readbak, 100); + return reg_write(reg::kSigGenerator_ctl, mode, readbak, 10); } -xs_error_code_t Xsync::SigGenerator_getContrlMode(sig_generator_module::ContrlMode_t &mode) { +xs_error_code_t Xsync::SigGenerator_getControlMode(sig_generator_module::ControlMode_t &mode) { uint32_t readbak = 0; - auto ecode = reg_read(reg::kSigGenerator_ctl, readbak, 100); + auto ecode = reg_read(reg::kSigGenerator_ctl, readbak, 10); if (ecode != kxs_ec_success) return ecode; - mode = (sig_generator_module::ContrlMode_t)readbak; + mode = (sig_generator_module::ControlMode_t)readbak; return ecode; } xs_error_code_t Xsync::SigGenerator_manualStart() { uint32_t readbak = 0; - return reg_write(reg::kSigGenerator_control_trigger_reg, 1, readbak, 100); + return reg_write(reg::kSigGenerator_control_trigger_reg, 1, readbak, 10); } xs_error_code_t Xsync::SigGenerator_manualStop() { uint32_t readbak = 0; - return reg_write(reg::kSigGenerator_control_trigger_reg, 0, readbak, 100); + return reg_write(reg::kSigGenerator_control_trigger_reg, 0, readbak, 10); } xs_error_code_t Xsync::SigGenerator_setTimecode(XsyncTimecode_t timecode) { uint32_t readbak = 0; @@ -785,9 +800,9 @@ xs_error_code_t Xsync::SigGenerator_setTimecode(XsyncTimecode_t timecode) { Timecode64_t tc64 = timecodeTo64(timecode); - ecode = reg_write(reg::kSigGenerator_timecode0, tc64.tc0, readbak, 100); + ecode = reg_write(reg::kSigGenerator_timecode0, tc64.tc0, readbak, 10); if (ecode != kxs_ec_success) return ecode; - ecode = reg_write(reg::kSigGenerator_timecode1, tc64.tc1, readbak, 100); + ecode = reg_write(reg::kSigGenerator_timecode1, tc64.tc1, readbak, 10); if (ecode != kxs_ec_success) return ecode; return ecode; @@ -799,9 +814,9 @@ xs_error_code_t Xsync::SigGenerator_getTimecode(XsyncTimecode_t &timecode) { uint32_t tc0 = 0; uint32_t tc1 = 0; - ecode = reg_read(reg::kSigGenerator_timecode0, tc0, 100); + ecode = reg_read(reg::kSigGenerator_timecode0, tc0, 10); if (ecode != kxs_ec_success) return ecode; - ecode = reg_read(reg::kSigGenerator_timecode1, tc1, 100); + ecode = reg_read(reg::kSigGenerator_timecode1, tc1, 10); if (ecode != kxs_ec_success) return ecode; Timecode64_t tc64; @@ -817,9 +832,9 @@ xs_error_code_t Xsync::SigGenerator_setAutoStartTimecode(XsyncTimecode_t timecod Timecode64_t tc64 = timecodeTo64(timecode); - ecode = reg_write(reg::kSigGenerator_timecode_start0, tc64.tc0, readbak, 100); + ecode = reg_write(reg::kSigGenerator_timecode_start0, tc64.tc0, readbak, 10); if (ecode != kxs_ec_success) return ecode; - ecode = reg_write(reg::kSigGenerator_timecode_start1, tc64.tc1, readbak, 100); + ecode = reg_write(reg::kSigGenerator_timecode_start1, tc64.tc1, readbak, 10); if (ecode != kxs_ec_success) return ecode; return ecode; @@ -831,9 +846,9 @@ xs_error_code_t Xsync::SigGenerator_getAutoStartTimecode(XsyncTimecode_t &timeco uint32_t tc0 = 0; uint32_t tc1 = 0; - ecode = reg_read(reg::kSigGenerator_timecode_start0, tc0, 100); + ecode = reg_read(reg::kSigGenerator_timecode_start0, tc0, 10); if (ecode != kxs_ec_success) return ecode; - ecode = reg_read(reg::kSigGenerator_timecode_start1, tc1, 100); + ecode = reg_read(reg::kSigGenerator_timecode_start1, tc1, 10); if (ecode != kxs_ec_success) return ecode; Timecode64_t tc64; @@ -845,7 +860,7 @@ xs_error_code_t Xsync::SigGenerator_getAutoStartTimecode(XsyncTimecode_t &timeco } xs_error_code_t Xsync::SigGenerator_getWorkState(uint32_t &work_state) { uint32_t readbak = 0; - auto ecode = reg_read(reg::kSigGenerator_work_state, readbak, 100); + auto ecode = reg_read(reg::kSigGenerator_work_state, readbak, 10); if (ecode != kxs_ec_success) return ecode; work_state = readbak; return ecode; @@ -853,22 +868,22 @@ xs_error_code_t Xsync::SigGenerator_getWorkState(uint32_t &work_state) { xs_error_code_t Xsync::SigGenerator_setGenlockFormat(GenlockFormat_t format) { uint32_t readbak = 0; - return reg_write(reg::kSigGenerator_genlock_format, format, readbak, 100); + return reg_write(reg::kSigGenerator_genlock_format, format, readbak, 10); } xs_error_code_t Xsync::SigGenerator_getGenlockFormat(GenlockFormat_t &format) { uint32_t readbak = 0; - auto ecode = reg_read(reg::kSigGenerator_genlock_format, readbak, 100); + auto ecode = reg_read(reg::kSigGenerator_genlock_format, readbak, 10); if (ecode != kxs_ec_success) return ecode; format = (GenlockFormat_t)readbak; return ecode; } xs_error_code_t Xsync::SigGenerator_setTimecodeFormat(TimecodeFormat_t format) { uint32_t readbak = 0; - return reg_write(reg::kSigGenerator_timecode_format, format, readbak, 100); + return reg_write(reg::kSigGenerator_timecode_format, format, readbak, 10); } xs_error_code_t Xsync::SigGenerator_getTimecodeFormat(TimecodeFormat_t &format) { uint32_t readbak = 0; - auto ecode = reg_read(reg::kSigGenerator_timecode_format, readbak, 100); + auto ecode = reg_read(reg::kSigGenerator_timecode_format, readbak, 10); if (ecode != kxs_ec_success) return ecode; format = (TimecodeFormat_t)readbak; return ecode; diff --git a/xsync.hpp b/xsync.hpp index 9b10a17..03d676f 100644 --- a/xsync.hpp +++ b/xsync.hpp @@ -46,6 +46,13 @@ typedef enum { GENLOCK_FPS6000 = 8, } GenlockFormat_t; +string GenlockFormatToStr(GenlockFormat_t fomrat); +string TimecodeFormatToStr(TimecodeFormat_t fomrat); +GenlockFormat_t Str2GenlockFormat(string format); +TimecodeFormat_t Str2TimecodeFormat(string format); +list GenlockFormatStrSet(); +list TimecodeFormatStrSet(); + typedef struct { uint8_t hour; uint8_t minute; @@ -53,6 +60,9 @@ typedef struct { uint8_t frame; } XsyncTimecode_t; +string XsyncTimecodeToStr(XsyncTimecode_t timecode); +XsyncTimecode_t Str2XsyncTimecode(string timecode); + typedef struct { uint32_t tc0; uint32_t tc1; @@ -95,13 +105,13 @@ TriggerSigType_t Str2TriggerSigType(string type); list TriggerSigTypeStrSet(); typedef enum { - ot_logic0 = 0, // 0 - ot_logic1 = 1, // 1 - ot_test_signal = 2, // 测试信号,信号为ID*1000HZ方波信号 - ot_input_signal = 3, // 输入信号 - ot_input_signal_mirror = 4, // 翻转后的输入信号 - ot_trigger_mode_signal = 5, // 触发模式下的触发信号 - ot_trigger_mode_signal_mirror = 6, // 触发模式下的触发信号翻转 + OutSigType_logic0 = 0, // 0 + OutSigType_logic1 = 1, // 1 + OutSigType_test_signal = 2, // 测试信号,信号为ID*1000HZ方波信号 + OutSigType_input_signal = 3, // 输入信号 + OutSigType_input_signal_mirror = 4, // 翻转后的输入信号 + OutSigType_trigger_mode_signal = 5, // 触发模式下的触发信号 + OutSigType_trigger_mode_signal_mirror = 6, // 触发模式下的触发信号翻转 } OutputSigType_t; string OutputSigType2Str(OutputSigType_t type); @@ -116,17 +126,17 @@ list OutputSigTypeStrSet(); namespace sig_generator_module { typedef enum { - kContrlMode_manualTrigger, // 0.手动,启动停止 - kContrlMode_externalTimecodeTrigger, // 1.外部TIMECODE触发启动 - kContrlMode_externalTTL1Trigger, // 2.外部TTL输入1_高电平触发,低电平停止 - kContrlMode_externalTTL2Trigger, // 3.外部TTL输入2_高电平触发,低电平停止 - kContrlMode_externalTTL3Trigger, // 4.外部TTL输入3_高电平触发,低电平停止 - kContrlMode_externalTTL4Trigger, // 5.外部TTL输入4_高电平触发,低电平停止 -} ContrlMode_t; - -string ContrlMode2Str(ContrlMode_t mode); -ContrlMode_t Str2ContrlMode(string mode); -list ContrlModeStrSet(); + kControlMode_manualTrigger, // 0.手动,启动停止 + kControlMode_externalTimecodeTrigger, // 1.外部TIMECODE触发启动 + kControlMode_externalTTL1Trigger, // 2.外部TTL输入1_高电平触发,低电平停止 + kControlMode_externalTTL2Trigger, // 3.外部TTL输入2_高电平触发,低电平停止 + kControlMode_externalTTL3Trigger, // 4.外部TTL输入3_高电平触发,低电平停止 + kControlMode_externalTTL4Trigger, // 5.外部TTL输入4_高电平触发,低电平停止 +} ControlMode_t; + +string ControlMode2Str(ControlMode_t mode); +ControlMode_t Str2ControlMode(string mode); +list ControlModeStrSet(); } // namespace sig_generator_module @@ -213,14 +223,14 @@ class Xsync { * @param mode * @return xs_error_code_t */ - xs_error_code_t SigGenerator_setContrlMode(sig_generator_module::ContrlMode_t mode); + xs_error_code_t SigGenerator_setControlMode(sig_generator_module::ControlMode_t mode); /** * @brief 获取控制模式 * * @param mode * @return xs_error_code_t */ - xs_error_code_t SigGenerator_getContrlMode(sig_generator_module::ContrlMode_t &mode); + xs_error_code_t SigGenerator_getControlMode(sig_generator_module::ControlMode_t &mode); /** * @brief 手动启动信号发生器 @@ -272,11 +282,22 @@ class Xsync { */ xs_error_code_t SigGenerator_getWorkState(uint32_t &work_state); - private: - xs_error_code_t SigGenerator_setGenlockFormat(GenlockFormat_t format); // 不要使用这个方法,用Basic_setGenlockFormat - xs_error_code_t SigGenerator_getGenlockFormat(GenlockFormat_t &format); // 不要使用这个方法,用Basic_getGenlockFormat - xs_error_code_t SigGenerator_setTimecodeFormat(TimecodeFormat_t format); // 不要使用这个方法,用Basic_setTimecodeFormat - xs_error_code_t SigGenerator_getTimecodeFormat(TimecodeFormat_t &format); // 不要使用这个方法,用Basic_getTimecodeFormat + /** + * @brief 设置信号发生器的genlock格式 + * + * @param format + * @return xs_error_code_t + */ + xs_error_code_t SigGenerator_setGenlockFormat(GenlockFormat_t format); // 不建议使用这个方法,用Basic_setGenlockFormat + xs_error_code_t SigGenerator_getGenlockFormat(GenlockFormat_t &format); // 不建议使用这个方法,用Basic_getGenlockFormat + /** + * @brief 设置信号发生器的timecode格式 + * + * @param format + * @return xs_error_code_t + */ + xs_error_code_t SigGenerator_setTimecodeFormat(TimecodeFormat_t format); // 不建议使用这个方法,用Basic_setTimecodeFormat + xs_error_code_t SigGenerator_getTimecodeFormat(TimecodeFormat_t &format); // 不建议使用这个方法,用Basic_getTimecodeFormat public: /******************************************************************************* * TTL输出模块控制 *