|
|
@ -1,5 +1,7 @@ |
|
|
|
#include "xsync.hpp"
|
|
|
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include <map>
|
|
|
|
#define ENABLE_LOG
|
|
|
|
#ifdef ENABLE_LOG
|
|
|
@ -83,13 +85,13 @@ static map<string, TriggerSigType_t> TriggerSigType2StrMap = { |
|
|
|
{"internal_100hz", tri_internal_100hz}, |
|
|
|
}; |
|
|
|
static map<string, OutputSigType_t> 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<string> TriggerSigTypeStrSet() { |
|
|
@ -137,31 +139,31 @@ list<string> OutputSigTypeStrSet() { |
|
|
|
} // namespace ttlout_module
|
|
|
|
|
|
|
|
namespace sig_generator_module { |
|
|
|
static map<string, ContrlMode_t> Str2ContrlModeMap = { |
|
|
|
{"manualTrigger", kContrlMode_manualTrigger}, //
|
|
|
|
{"extTimecodeTrigger", kContrlMode_externalTimecodeTrigger}, |
|
|
|
{"ttl1Trigger", kContrlMode_externalTTL1Trigger}, |
|
|
|
{"ttl2Trigger", kContrlMode_externalTTL2Trigger}, |
|
|
|
{"ttl3Trigger", kContrlMode_externalTTL3Trigger}, |
|
|
|
{"ttl4Trigger", kContrlMode_externalTTL4Trigger}, |
|
|
|
static map<string, ControlMode_t> 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<string> ContrlModeStrSet() { |
|
|
|
list<string> ControlModeStrSet() { |
|
|
|
list<string> ret; |
|
|
|
for (auto &item : Str2ContrlModeMap) { |
|
|
|
for (auto &item : Str2ControlModeMap) { |
|
|
|
ret.push_back(item.first); |
|
|
|
} |
|
|
|
return ret; |
|
|
@ -234,6 +236,19 @@ list<string> 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; |
|
|
|