diff --git a/README.md b/README.md index 364ad6f..116d85f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,14 @@ # libxsync + +``` + +TimecodeInputModule_XXXXX --> ExternalTimecode_XXXXX +GenlockInputModule_XXXXX --> ExternalGenlock_XXXXX +XXXXFreq(uint32_t freq) --> XXXXFreq(float freq) + +Xsync --> IXsync + +删除 connect,disconnect, 添加方法 changeXsyncIp 和 isXsyncOnline + +``` \ No newline at end of file diff --git a/include/ixsync.hpp b/include/ixsync.hpp new file mode 100644 index 0000000..bba207a --- /dev/null +++ b/include/ixsync.hpp @@ -0,0 +1,176 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "i_xsync_udp.hpp" +#include "xsync_errcode.hpp" +#include "xsync_packet.hpp" +#include "xsync_regs.hpp" +#include "xsync_utils.hpp" +#include "xsync_v2_sig_type.hpp" +namespace xsync { +using namespace std; + +typedef function xsync_on_timecode_msg_t; +typedef function xsync_on_record_sig_change_msg_t; +typedef function xsync_on_camera_sync_msg_t; +typedef function xsync_devic_state_cb_t; + +class IXsync { + public: + virtual ~IXsync() {} + + public: + /*********************************************************************************************** + * 设备基本操作 * + ***********************************************************************************************/ + + virtual xs_error_code_t changeXsyncIp(string xsync_ip) = 0; + virtual bool isXsyncOnline() = 0; + + virtual void registerOnTimecodeMsgCallback(xsync_on_timecode_msg_t cb) = 0; + virtual void registerOnCameraSyncMsgCallback(xsync_on_camera_sync_msg_t cb) = 0; + virtual void registerOnRecordSigChangeMsgCallback(xsync_on_record_sig_change_msg_t cb) = 0; + virtual void registerDeviceStateCallback(xsync_devic_state_cb_t cb) = 0; + + virtual xs_error_code_t generatorNewMac() = 0; + virtual xs_error_code_t factoryReset() = 0; + virtual xs_error_code_t reboot() = 0; + virtual xs_error_code_t changeNetworkConfig(string ip, string mask, string gateway) = 0; + virtual xs_error_code_t readSn(string &sn) = 0; + virtual xs_error_code_t readMac(string &mac) = 0; + + public: + virtual xs_error_code_t reg_write(uint32_t regadd, uint32_t regvalue, uint32_t ®backvalue, int32_t overtime_ms = 100) = 0; + virtual xs_error_code_t reg_read(uint32_t regadd, uint32_t ®value, int32_t overtime_ms = 100) = 0; + + public: + /*********************************************************************************************** + * 输入组件 * + ***********************************************************************************************/ + + virtual xs_error_code_t ExternalTimecode_setSource(InputInterface_t src) = 0; + virtual xs_error_code_t ExternalTimecode_getSource(InputInterface_t &timecode_select) = 0; + virtual xs_error_code_t ExternalTimecode_setFormat(TimecodeFormat_t format) = 0; + virtual xs_error_code_t ExternalTimecode_getFormat(TimecodeFormat_t &format) = 0; + virtual xs_error_code_t ExternalTimecode_readCode(XsyncTimecode_t &timecode) = 0; + + virtual xs_error_code_t TTLInputModule1_detectFreq(uint32_t &freq) = 0; + virtual xs_error_code_t TTLInputModule2_detectFreq(uint32_t &freq) = 0; + virtual xs_error_code_t TTLInputModule3_detectFreq(uint32_t &freq) = 0; + virtual xs_error_code_t TTLInputModule4_detectFreq(uint32_t &freq) = 0; + + virtual xs_error_code_t ExternalGenlock_detectFreq(float &freq) = 0; + + /*********************************************************************************************** + * 内部组件 * + ***********************************************************************************************/ + + virtual xs_error_code_t InternalTimecode_setFormat(TimecodeFormat_t format) = 0; + virtual xs_error_code_t InternalTimecode_getFormat(TimecodeFormat_t &format) = 0; + virtual xs_error_code_t InternalTimecode_setCode(XsyncTimecode_t timecode) = 0; + virtual xs_error_code_t InternalTimecode_getCode(XsyncTimecode_t &timecode) = 0; + + virtual xs_error_code_t InternalGenlock_setFormat(GenlockFormat_t format) = 0; + virtual xs_error_code_t InternalGenlock_getFormat(GenlockFormat_t &format) = 0; + + virtual xs_error_code_t InternalClock_setFreq(float freq) = 0; + virtual xs_error_code_t InternalClock_getFreq(float &freq) = 0; + + virtual xs_error_code_t SysTimecode_setSource(uint32_t sig) = 0; + virtual xs_error_code_t SysTimecode_getSource(uint32_t &sig) = 0; + virtual xs_error_code_t SysTimecode_readFormat(TimecodeFormat_t &format) = 0; + virtual xs_error_code_t SysTimecode_readCode(XsyncTimecode_t &timecode) = 0; + + virtual xs_error_code_t SysGenlock_setSrc(uint32_t source) = 0; + virtual xs_error_code_t SysGenlock_getSrc(uint32_t &source) = 0; + virtual xs_error_code_t SysGenlock_readFreq(float &freq) = 0; + + virtual xs_error_code_t SysClock_setSrc(SignalType_t sig) = 0; + virtual xs_error_code_t SysClock_getSrc(SignalType_t &sig) = 0; + virtual xs_error_code_t SysClock_setTriggerEdge(TriggerEdge_t edge) = 0; + virtual xs_error_code_t SysClock_getTriggerEdge(TriggerEdge_t &edge) = 0; + virtual xs_error_code_t SysClock_setFreqDivision(uint32_t div) = 0; + virtual xs_error_code_t SysClock_geFreqtDivision(uint32_t &div) = 0; + virtual xs_error_code_t SysClock_setFreqMultiplication(uint32_t muti) = 0; + virtual xs_error_code_t SysClock_getFreqMultiplication(uint32_t &muti) = 0; + virtual xs_error_code_t SysClock_readOutSigFreq(float &freq) = 0; + virtual xs_error_code_t SysClock_readInSigFreq(float &freq) = 0; + + virtual xs_error_code_t RecordSigGenerator_setContrlMode(ControlMode_t mode) = 0; + virtual xs_error_code_t RecordSigGenerator_getContrlMode(ControlMode_t &mode) = 0; + virtual xs_error_code_t RecordSigGenerator_manualStart() = 0; + virtual xs_error_code_t RecordSigGenerator_manualStop() = 0; + virtual xs_error_code_t RecordSigGenerator_setAutoStartTimecode(XsyncTimecode_t timecode) = 0; + virtual xs_error_code_t RecordSigGenerator_setAutoStopTimecode(XsyncTimecode_t timecode) = 0; + virtual xs_error_code_t RecordSigGenerator_getAutoStartTimecode(XsyncTimecode_t &timecode) = 0; + virtual xs_error_code_t RecordSigGenerator_getAutoStopTimecode(XsyncTimecode_t &timecode) = 0; + virtual xs_error_code_t RecordSigGenerator_setTimecodeCtrlFlag(uint32_t autoStart, uint32_t autoStop) = 0; + virtual xs_error_code_t RecordSigGenerator_getTimecodeCtrlFlag(uint32_t &autoStart, uint32_t &autoStop) = 0; + virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerSrc(InputInterface_t ttlPortNum) = 0; + virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerSrc(InputInterface_t &ttlPortNum) = 0; + virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerPolarity(uint32_t polarity) = 0; + virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerPolarity(uint32_t &polarity) = 0; + virtual xs_error_code_t RecordSigGenerator_setRecordExposureTime(uint32_t us) = 0; + virtual xs_error_code_t RecordSigGenerator_getRecordExposureTime(uint32_t &us) = 0; + virtual xs_error_code_t RecordSigGenerator_setRecordExposureOffsetTime(uint32_t us) = 0; + virtual xs_error_code_t RecordSigGenerator_getRecordExposureOffsetTime(uint32_t &us) = 0; + virtual xs_error_code_t RecordSigGenerator_getRecordState(uint32_t &state) = 0; + virtual xs_error_code_t RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode) = 0; + + /*********************************************************************************************** + * 输出组件 * + ***********************************************************************************************/ + + virtual xs_error_code_t TimecodeOutputModule_setBncOutputLevel(int level) = 0; + virtual xs_error_code_t TimecodeOutputModule_getBncOutputLevel(int &level) = 0; + virtual xs_error_code_t TimecodeOutputModule_setHeadphoneOutputLevel(int level) = 0; + virtual xs_error_code_t TimecodeOutputModule_getHeadphoneOutputLevel(int &level) = 0; + + virtual xs_error_code_t TTLOutputModule1_setSrcSigType(SignalType_t source) = 0; + virtual xs_error_code_t TTLOutputModule1_getSrcSigType(SignalType_t &source) = 0; + virtual xs_error_code_t TTLOutputModule1_setFreqDivision(uint32_t div) = 0; + virtual xs_error_code_t TTLOutputModule1_getFreqDivision(uint32_t &div) = 0; + virtual xs_error_code_t TTLOutputModule1_setFreqMultiplication(uint32_t multi) = 0; + virtual xs_error_code_t TTLOutputModule1_getFreqMultiplication(uint32_t &multi) = 0; + virtual xs_error_code_t TTLOutputModule1_readInFreq(float &freq) = 0; + virtual xs_error_code_t TTLOutputModule1_readOutFreq(float &freq) = 0; + + virtual xs_error_code_t TTLOutputModule2_setSrcSigType(SignalType_t source) = 0; + virtual xs_error_code_t TTLOutputModule2_getSrcSigType(SignalType_t &source) = 0; + virtual xs_error_code_t TTLOutputModule2_setFreqDivision(uint32_t div) = 0; + virtual xs_error_code_t TTLOutputModule2_getFreqDivision(uint32_t &div) = 0; + virtual xs_error_code_t TTLOutputModule2_setFreqMultiplication(uint32_t multi) = 0; + virtual xs_error_code_t TTLOutputModule2_getFreqMultiplication(uint32_t &multi) = 0; + virtual xs_error_code_t TTLOutputModule2_readInFreq(float &freq) = 0; + virtual xs_error_code_t TTLOutputModule2_readOutFreq(float &freq) = 0; + + virtual xs_error_code_t TTLOutputModule3_setSrcSigType(SignalType_t source) = 0; + virtual xs_error_code_t TTLOutputModule3_getSrcSigType(SignalType_t &source) = 0; + virtual xs_error_code_t TTLOutputModule3_setFreqDivision(uint32_t div) = 0; + virtual xs_error_code_t TTLOutputModule3_getFreqDivision(uint32_t &div) = 0; + virtual xs_error_code_t TTLOutputModule3_setFreqMultiplication(uint32_t multi) = 0; + virtual xs_error_code_t TTLOutputModule3_getFreqMultiplication(uint32_t &multi) = 0; + virtual xs_error_code_t TTLOutputModule3_readInFreq(float &freq) = 0; + virtual xs_error_code_t TTLOutputModule3_readOutFreq(float &freq) = 0; + + virtual xs_error_code_t TTLOutputModule4_setSrcSigType(SignalType_t source) = 0; + virtual xs_error_code_t TTLOutputModule4_getSrcSigType(SignalType_t &source) = 0; + virtual xs_error_code_t TTLOutputModule4_setFreqDivision(uint32_t div) = 0; + virtual xs_error_code_t TTLOutputModule4_getFreqDivision(uint32_t &div) = 0; + virtual xs_error_code_t TTLOutputModule4_setFreqMultiplication(uint32_t multi) = 0; + virtual xs_error_code_t TTLOutputModule4_getFreqMultiplication(uint32_t &multi) = 0; + virtual xs_error_code_t TTLOutputModule4_readInFreq(float &freq) = 0; + virtual xs_error_code_t TTLOutputModule4_readOutFreq(float &freq) = 0; +}; + +} // namespace xsync diff --git a/include/xsync_v2.hpp b/include/xsync_v2.hpp new file mode 100644 index 0000000..688201d --- /dev/null +++ b/include/xsync_v2.hpp @@ -0,0 +1,29 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// +#include "i_xsync_udp.hpp" +#include "ixsync.hpp" +#include "xsync_errcode.hpp" +#include "xsync_packet.hpp" +#include "xsync_regs.hpp" +#include "xsync_utils.hpp" +#include "xsync_v2_sig_type.hpp" + +namespace xsync { +using namespace std; + +void XsyncInit(I_XSUDPFactory *xsync_udp_factory, string xsyncIp); +IXsync *XsyncIns(); + +} // namespace xsync diff --git a/xsync.cpp b/src/xsync_v2.cpp similarity index 72% rename from xsync.cpp rename to src/xsync_v2.cpp index 265bbb5..d56397a 100644 --- a/xsync.cpp +++ b/src/xsync_v2.cpp @@ -1,4 +1,4 @@ -#include "xsync.hpp" +#include "xsync_v2.hpp" #include @@ -43,6 +43,189 @@ using namespace std; return kxs_ec_success; \ } +class Xsync : public IXsync { + private: + /* data */ + + I_XSUDPFactory *m_xsync_udp_factory = nullptr; + shared_ptr m_xsync_reg_udp = nullptr; + shared_ptr m_xsync_timecode_udp_listener = nullptr; + shared_ptr m_xsync_camera_sync_udp_listener = nullptr; + + string m_xsync_ip; + bool m_is_connected = false; + + xsync_on_camera_sync_msg_t m_on_camera_sync_msg_cb = nullptr; + xsync_on_timecode_msg_t m_on_timecode_msg_cb = nullptr; + xsync_on_record_sig_change_msg_t m_on_record_sig_change_msg_cb = nullptr; + xsync_devic_state_cb_t m_xsync_devic_state_cb = nullptr; + + int txpacket_index = 0; + uint8_t m_xync_cmd_rxdata_cache[2560]; + xsync_net_state_t m_net_state = kxsync_net_state_disconnect; + std::recursive_mutex lock_; + + public: + static Xsync &Ins(); + + Xsync(/* args */); + virtual ~Xsync() {} + + void initialize(I_XSUDPFactory *xsync_udp_factory); + + xs_error_code_t connect(string xsync_ip); + xs_error_code_t disConnect(); + + virtual xs_error_code_t changeXsyncIp(string xsync_ip) override; + virtual bool isXsyncOnline() override; + + virtual void registerOnTimecodeMsgCallback(xsync_on_timecode_msg_t cb) override; + virtual void registerOnCameraSyncMsgCallback(xsync_on_camera_sync_msg_t cb) override; + virtual void registerOnRecordSigChangeMsgCallback(xsync_on_record_sig_change_msg_t cb) override; + virtual void registerDeviceStateCallback(xsync_devic_state_cb_t cb) override; + + virtual xs_error_code_t generatorNewMac() override; + virtual xs_error_code_t factoryReset() override; + virtual xs_error_code_t reboot() override; + virtual xs_error_code_t changeNetworkConfig(string ip, string mask, string gateway) override; + virtual xs_error_code_t readSn(string &sn) override; + virtual xs_error_code_t readMac(string &mac) override; + + public: + virtual xs_error_code_t reg_write(uint32_t regadd, uint32_t regvalue, uint32_t ®backvalue, int32_t overtime_ms = 100) override; + virtual xs_error_code_t reg_read(uint32_t regadd, uint32_t ®value, int32_t overtime_ms = 100) override; + + public: + virtual xs_error_code_t ExternalTimecode_setSource(InputInterface_t src) override; + virtual xs_error_code_t ExternalTimecode_getSource(InputInterface_t &timecode_select) override; + virtual xs_error_code_t ExternalTimecode_setFormat(TimecodeFormat_t format) override; + 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 ExternalGenlock_detectFreq(float &freq) override; + + virtual xs_error_code_t InternalTimecode_setFormat(TimecodeFormat_t format) override; + virtual xs_error_code_t InternalTimecode_getFormat(TimecodeFormat_t &format) override; + virtual xs_error_code_t InternalTimecode_setCode(XsyncTimecode_t timecode) override; + virtual xs_error_code_t InternalTimecode_getCode(XsyncTimecode_t &timecode) override; + + virtual xs_error_code_t InternalGenlock_setFormat(GenlockFormat_t format) override; + virtual xs_error_code_t InternalGenlock_getFormat(GenlockFormat_t &format) override; + + virtual xs_error_code_t InternalClock_setFreq(float freq) override; + virtual xs_error_code_t InternalClock_getFreq(float &freq) override; + + virtual xs_error_code_t SysTimecode_setSource(uint32_t sig) override; + virtual xs_error_code_t SysTimecode_getSource(uint32_t &sig) override; + virtual xs_error_code_t SysTimecode_readFormat(TimecodeFormat_t &format) override; + virtual xs_error_code_t SysTimecode_readCode(XsyncTimecode_t &timecode) override; + + virtual xs_error_code_t SysGenlock_setSrc(uint32_t source) override; + virtual xs_error_code_t SysGenlock_getSrc(uint32_t &source) override; + virtual xs_error_code_t SysGenlock_readFreq(float &freq) override; + + virtual xs_error_code_t SysClock_setSrc(SignalType_t sig) override; + virtual xs_error_code_t SysClock_getSrc(SignalType_t &sig) override; + virtual xs_error_code_t SysClock_setTriggerEdge(TriggerEdge_t edge) override; + virtual xs_error_code_t SysClock_getTriggerEdge(TriggerEdge_t &edge) override; + virtual xs_error_code_t SysClock_setFreqDivision(uint32_t div) override; + virtual xs_error_code_t SysClock_geFreqtDivision(uint32_t &div) override; + virtual xs_error_code_t SysClock_setFreqMultiplication(uint32_t muti) override; + virtual xs_error_code_t SysClock_getFreqMultiplication(uint32_t &muti) override; + virtual xs_error_code_t SysClock_readOutSigFreq(float &freq) override; + virtual xs_error_code_t SysClock_readInSigFreq(float &freq) override; + + virtual xs_error_code_t RecordSigGenerator_setContrlMode(ControlMode_t mode) override; + virtual xs_error_code_t RecordSigGenerator_getContrlMode(ControlMode_t &mode) override; + virtual xs_error_code_t RecordSigGenerator_manualStart() override; + virtual xs_error_code_t RecordSigGenerator_manualStop() override; + virtual xs_error_code_t RecordSigGenerator_setAutoStartTimecode(XsyncTimecode_t timecode) override; + virtual xs_error_code_t RecordSigGenerator_setAutoStopTimecode(XsyncTimecode_t timecode) override; + virtual xs_error_code_t RecordSigGenerator_getAutoStartTimecode(XsyncTimecode_t &timecode) override; + virtual xs_error_code_t RecordSigGenerator_getAutoStopTimecode(XsyncTimecode_t &timecode) override; + virtual xs_error_code_t RecordSigGenerator_setTimecodeCtrlFlag(uint32_t autoStart, uint32_t autoStop) override; + virtual xs_error_code_t RecordSigGenerator_getTimecodeCtrlFlag(uint32_t &autoStart, uint32_t &autoStop) override; + virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerSrc(InputInterface_t ttlPortNum); // 1- override4 + virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerSrc(InputInterface_t &ttlPortNum) override; + virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerPolarity(uint32_t polarity) override; + virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerPolarity(uint32_t &polarity) override; + virtual xs_error_code_t RecordSigGenerator_setRecordExposureTime(uint32_t us) override; + virtual xs_error_code_t RecordSigGenerator_getRecordExposureTime(uint32_t &us) override; + virtual xs_error_code_t RecordSigGenerator_setRecordExposureOffsetTime(uint32_t us) override; + virtual xs_error_code_t RecordSigGenerator_getRecordExposureOffsetTime(uint32_t &us) override; + 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; + + virtual xs_error_code_t TTLOutputModule1_setSrcSigType(SignalType_t source) override; + virtual xs_error_code_t TTLOutputModule1_getSrcSigType(SignalType_t &source) override; + virtual xs_error_code_t TTLOutputModule1_setFreqDivision(uint32_t div) override; + virtual xs_error_code_t TTLOutputModule1_getFreqDivision(uint32_t &div) override; + virtual xs_error_code_t TTLOutputModule1_setFreqMultiplication(uint32_t multi) override; + virtual xs_error_code_t TTLOutputModule1_getFreqMultiplication(uint32_t &multi) override; + virtual xs_error_code_t TTLOutputModule1_readInFreq(float &freq) override; + virtual xs_error_code_t TTLOutputModule1_readOutFreq(float &freq) override; + + virtual xs_error_code_t TTLOutputModule2_setSrcSigType(SignalType_t source) override; + virtual xs_error_code_t TTLOutputModule2_getSrcSigType(SignalType_t &source) override; + virtual xs_error_code_t TTLOutputModule2_setFreqDivision(uint32_t div) override; + virtual xs_error_code_t TTLOutputModule2_getFreqDivision(uint32_t &div) override; + virtual xs_error_code_t TTLOutputModule2_setFreqMultiplication(uint32_t multi) override; + virtual xs_error_code_t TTLOutputModule2_getFreqMultiplication(uint32_t &multi) override; + virtual xs_error_code_t TTLOutputModule2_readInFreq(float &freq) override; + virtual xs_error_code_t TTLOutputModule2_readOutFreq(float &freq) override; + + virtual xs_error_code_t TTLOutputModule3_setSrcSigType(SignalType_t source) override; + virtual xs_error_code_t TTLOutputModule3_getSrcSigType(SignalType_t &source) override; + virtual xs_error_code_t TTLOutputModule3_setFreqDivision(uint32_t div) override; + virtual xs_error_code_t TTLOutputModule3_getFreqDivision(uint32_t &div) override; + virtual xs_error_code_t TTLOutputModule3_setFreqMultiplication(uint32_t multi) override; + virtual xs_error_code_t TTLOutputModule3_getFreqMultiplication(uint32_t &multi) override; + virtual xs_error_code_t TTLOutputModule3_readInFreq(float &freq) override; + virtual xs_error_code_t TTLOutputModule3_readOutFreq(float &freq) override; + + virtual xs_error_code_t TTLOutputModule4_setSrcSigType(SignalType_t source) override; + virtual xs_error_code_t TTLOutputModule4_getSrcSigType(SignalType_t &source) override; + virtual xs_error_code_t TTLOutputModule4_setFreqDivision(uint32_t div) override; + virtual xs_error_code_t TTLOutputModule4_getFreqDivision(uint32_t &div) override; + virtual xs_error_code_t TTLOutputModule4_setFreqMultiplication(uint32_t multi) override; + virtual xs_error_code_t TTLOutputModule4_getFreqMultiplication(uint32_t &multi) override; + virtual xs_error_code_t TTLOutputModule4_readInFreq(float &freq) override; + virtual xs_error_code_t TTLOutputModule4_readOutFreq(float &freq) override; + + private: + xs_error_code_t doaction(uint32_t action, uint32_t actionval, uint32_t *ackreturn, int32_t overtime_ms = 100); + xs_error_code_t storageConfig(); + xs_error_code_t xsync_send_cmd_block(iflytop_xsync_packet_header_t *cmd, iflytop_xsync_packet_header_t *rx_data, int32_t buffersize, int32_t overtime_ms); + + xs_error_code_t readtimecode(uint32_t reg0, uint32_t reg1, XsyncTimecode_t &timecode); + xs_error_code_t writetimecode(uint32_t reg0, uint32_t reg1, XsyncTimecode_t timecode); + xs_error_code_t readfreq(uint32_t reg, float &freq); + xs_error_code_t reg_write(uint32_t regadd, uint32_t regvalue, int32_t overtime_ms = 100); + xs_error_code_t reg_read_muti(uint32_t regadd, uint32_t nreg, vector ®values, int32_t overtime_ms = 100); + + template + xs_error_code_t _reg_read(uint32_t regadd, T ®value, int32_t overtime_ms = 100) { + uint32_t regvalue_u32; + xs_error_code_t ret = reg_read(regadd, regvalue_u32, overtime_ms); + if (ret == kxs_ec_success) { + regvalue = (T)regvalue_u32; + } + return ret; + } + void parseTimecodeMsgAndReport(XsyncNetAdd &from, uint8_t *data, size_t length); + void parseCameraSyncMsgAndReport(XsyncNetAdd &from, uint8_t *data, size_t length); +}; + /******************************************************************************* * Xsync * *******************************************************************************/ @@ -54,6 +237,12 @@ Xsync &Xsync::Ins() { } void Xsync::initialize(I_XSUDPFactory *xsync_udp_factory) { m_xsync_udp_factory = xsync_udp_factory; } +xs_error_code_t Xsync::changeXsyncIp(string xsync_ip) { + disConnect(); + return connect(xsync_ip); +} +bool Xsync::isXsyncOnline() { return true; } + xs_error_code_t Xsync::connect(string xsync_ip) { lock_guard lock(lock_); @@ -126,11 +315,20 @@ xs_error_code_t Xsync::disConnect() { m_net_state = kxsync_net_state_disconnect; return kxs_ec_success; } -xsync_net_state_t Xsync::getNetState() { return m_net_state; } void Xsync::registerOnTimecodeMsgCallback(xsync_on_timecode_msg_t cb) { m_on_timecode_msg_cb = cb; } void Xsync::registerOnCameraSyncMsgCallback(xsync_on_camera_sync_msg_t cb) { m_on_camera_sync_msg_cb = cb; } void Xsync::registerOnRecordSigChangeMsgCallback(xsync_on_record_sig_change_msg_t cb) { m_on_record_sig_change_msg_cb = cb; } +void Xsync::registerDeviceStateCallback(xsync_devic_state_cb_t cb) { m_xsync_devic_state_cb = cb; } + +xs_error_code_t Xsync::readSn(string &sn) { + sn = ""; + return kxs_ec_success; +} +xs_error_code_t Xsync::readMac(string &mac) { + mac = ""; + return kxs_ec_success; +} xs_error_code_t Xsync::xsync_send_cmd_block(iflytop_xsync_packet_header_t *cmd, iflytop_xsync_packet_header_t *rx_data, int32_t buffersize, int32_t overtime_ms) { lock_guard lock(lock_); @@ -668,3 +866,12 @@ xs_error_code_t Xsync::RecordSigGenerator_getRecordState(uint32_t &state) { retu xs_error_code_t Xsync::RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode) { // return readtimecode(reg::record_sig_gen_timecode_snapshot0, reg::record_sig_gen_timecode_snapshot1, timecode); } + +namespace xsync { + +void XsyncInit(I_XSUDPFactory *xsync_udp_factory, string xsyncIp) { + Xsync::Ins().initialize(xsync_udp_factory); + Xsync::Ins().changeXsyncIp(xsyncIp); +} +IXsync *XsyncIns() { return &Xsync::Ins(); } +} // namespace xsync \ No newline at end of file diff --git a/xsync.hpp b/xsync.hpp deleted file mode 100644 index 535619c..0000000 --- a/xsync.hpp +++ /dev/null @@ -1,472 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// -#include "i_xsync_udp.hpp" -#include "xsync_errcode.hpp" -#include "xsync_packet.hpp" -#include "xsync_regs.hpp" -#include "xsync_v2_sig_type.hpp" -namespace xsync { -using namespace std; - -typedef function xsync_on_timecode_msg_t; -typedef function xsync_on_record_sig_change_msg_t; -typedef function xsync_on_camera_sync_msg_t; - -class Xsync { - public: - private: - /* data */ - - I_XSUDPFactory *m_xsync_udp_factory = nullptr; - shared_ptr m_xsync_reg_udp = nullptr; - shared_ptr m_xsync_timecode_udp_listener = nullptr; - shared_ptr m_xsync_camera_sync_udp_listener = nullptr; - - string m_xsync_ip; - bool m_is_connected = false; - - xsync_on_camera_sync_msg_t m_on_camera_sync_msg_cb = nullptr; - xsync_on_timecode_msg_t m_on_timecode_msg_cb = nullptr; - xsync_on_record_sig_change_msg_t m_on_record_sig_change_msg_cb = nullptr; - - int txpacket_index = 0; - - uint8_t m_xync_cmd_rxdata_cache[2560]; - - xsync_net_state_t m_net_state = kxsync_net_state_disconnect; - - std::recursive_mutex lock_; - - Xsync(/* args */); - - public: - static Xsync &Ins(); - - void initialize(I_XSUDPFactory *xsync_udp_factory); - - xs_error_code_t connect(string xsync_ip); - xs_error_code_t disConnect(); - xsync_net_state_t getNetState(); - bool ping(string xsync_ip); - - void registerOnTimecodeMsgCallback(xsync_on_timecode_msg_t cb); - void registerOnCameraSyncMsgCallback(xsync_on_camera_sync_msg_t cb); - void registerOnRecordSigChangeMsgCallback(xsync_on_record_sig_change_msg_t cb); - - xs_error_code_t reg_write(uint32_t regadd, uint32_t regvalue, uint32_t ®backvalue, int32_t overtime_ms = 100); - xs_error_code_t reg_write(uint32_t regadd, uint32_t regvalue, int32_t overtime_ms = 100); - xs_error_code_t reg_read(uint32_t regadd, uint32_t ®value, int32_t overtime_ms = 100); - xs_error_code_t reg_read_muti(uint32_t regadd, uint32_t nreg, vector ®values, int32_t overtime_ms = 100); - xs_error_code_t readSN(string &sn); - xs_error_code_t readMAC(string &mac); - - xs_error_code_t generatorNewMac(); - xs_error_code_t factoryReset(); - xs_error_code_t reboot(); - xs_error_code_t changeNetworkConfig(string ip, string mask, string gateway); - - public: - /******************************************************************************* - * 内部时码发生器 * - *******************************************************************************/ - /** - * @brief 内部Timecode信号发生器,设置Timecode格式 - * - * @param format - * 支持列表 - * TIMECODE_FPS2398 - * TIMECODE_FPS2400 - * TIMECODE_FPS2500 - * TIMECODE_FPS2997 - * TIMECODE_FPS2997Drop - * TIMECODE_FPS3000 - * - * @return xs_error_code_t - */ - xs_error_code_t InternalTimecode_setFormat(TimecodeFormat_t format); - xs_error_code_t InternalTimecode_getFormat(TimecodeFormat_t &format); - - /** - * @brief 内部Timecode信号发生器,设置Timecode值 - * - * @param timecode - * @return xs_error_code_t - */ - xs_error_code_t InternalTimecode_setCode(XsyncTimecode_t timecode); - xs_error_code_t InternalTimecode_getCode(XsyncTimecode_t &timecode); - - /******************************************************************************* - * 时码输入 * - *******************************************************************************/ - - /** - * @brief 选择时码输入源 - * - * @param src - * INPUT_IF_TIMECODE_BNC - * INPUT_IF_TIMECODE_HEADPHONE - * - * @return xs_error_code_t - */ - xs_error_code_t ExternalTimecode_setSource(InputInterface_t src); - xs_error_code_t ExternalTimecode_getSource(InputInterface_t &timecode_select); - - /** - * @brief 设置时码格式 - * - * @param format - * @return xs_error_code_t - */ - xs_error_code_t ExternalTimecode_setFormat(TimecodeFormat_t format); - xs_error_code_t ExternalTimecode_getFormat(TimecodeFormat_t &format); - - // ExternalTimecode_readCode - xs_error_code_t ExternalTimecode_readCode(XsyncTimecode_t &timecode); - - /** - * @brief 系统Timecode选择时钟源 - * - * @param internal - * 0: 内部Timecode - * 1: 外部Timecode - * @return xs_error_code_t - */ - xs_error_code_t SysTimecode_setSource(uint32_t sig); - xs_error_code_t SysTimecode_getSource(uint32_t &sig); - - /** - * @brief 读取系统Timecode格式 - * - * @param format - * @return xs_error_code_t - */ - xs_error_code_t SysTimecode_readFormat(TimecodeFormat_t &format); - /** - * @brief 读取系统Timecode值 - * - * @param timecode - * @return xs_error_code_t - */ - xs_error_code_t SysTimecode_readCode(XsyncTimecode_t &timecode); - - /** - * @brief TIMECODE输出模块 - * - * 信号源: SYS_TIMECODE - */ - - /** - * @brief 设置时码输出模块的BNC输出电平 - * - * @param level - * @return xs_error_code_t - */ - xs_error_code_t TimecodeOutputModule_setBncOutputLevel(int level); // 0:line,1:mic - xs_error_code_t TimecodeOutputModule_getBncOutputLevel(int &level); - /** - * @brief 设置时码输出模块的耳机输出电平 - * - * @param level - * @return xs_error_code_t - */ - xs_error_code_t TimecodeOutputModule_setHeadphoneOutputLevel(int level); // 0:line,1:mic - xs_error_code_t TimecodeOutputModule_getHeadphoneOutputLevel(int &level); - - /** - * @brief 读取TTL输入模块的频率 - * - * @param index - * @param freq - * @return xs_error_code_t - */ - xs_error_code_t TTLInputModule1_detectFreq(uint32_t &freq); - xs_error_code_t TTLInputModule2_detectFreq(uint32_t &freq); - xs_error_code_t TTLInputModule3_detectFreq(uint32_t &freq); - xs_error_code_t TTLInputModule4_detectFreq(uint32_t &freq); - - /** - * @brief TTLOutputModuleX_setSrcSigType TTL输出口设置信号源 - * - * @param source - * 支持列表: - * SIGNAL_TTLIN1 - * SIGNAL_TTLIN2 - * SIGNAL_TTLIN3 - * SIGNAL_TTLIN4 - * SIGNAL_SYS_CLK_OUTPUT - * SIGNAL_SYS_GENLOCK_OUTPUT - * SIGNAL_SYS_TIMECODE_FREQ_OUTPUT - * SIGNAL_BUSINESS_RECORD_SIG - * SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG - * - * @return xs_error_code_t - */ - xs_error_code_t TTLOutputModule1_setSrcSigType(SignalType_t source); - xs_error_code_t TTLOutputModule2_setSrcSigType(SignalType_t source); - xs_error_code_t TTLOutputModule3_setSrcSigType(SignalType_t source); - xs_error_code_t TTLOutputModule4_setSrcSigType(SignalType_t source); - - xs_error_code_t TTLOutputModule1_getSrcSigType(SignalType_t &source); - xs_error_code_t TTLOutputModule2_getSrcSigType(SignalType_t &source); - xs_error_code_t TTLOutputModule3_getSrcSigType(SignalType_t &source); - xs_error_code_t TTLOutputModule4_getSrcSigType(SignalType_t &source); - - xs_error_code_t TTLOutputModule1_setFreqDivision(uint32_t div); - xs_error_code_t TTLOutputModule2_setFreqDivision(uint32_t div); - xs_error_code_t TTLOutputModule3_setFreqDivision(uint32_t div); - xs_error_code_t TTLOutputModule4_setFreqDivision(uint32_t div); - - xs_error_code_t TTLOutputModule1_getFreqDivision(uint32_t &div); - xs_error_code_t TTLOutputModule2_getFreqDivision(uint32_t &div); - xs_error_code_t TTLOutputModule3_getFreqDivision(uint32_t &div); - xs_error_code_t TTLOutputModule4_getFreqDivision(uint32_t &div); - - xs_error_code_t TTLOutputModule1_setFreqMultiplication(uint32_t multi); - xs_error_code_t TTLOutputModule2_setFreqMultiplication(uint32_t multi); - xs_error_code_t TTLOutputModule3_setFreqMultiplication(uint32_t multi); - xs_error_code_t TTLOutputModule4_setFreqMultiplication(uint32_t multi); - - xs_error_code_t TTLOutputModule1_getFreqMultiplication(uint32_t &multi); - xs_error_code_t TTLOutputModule2_getFreqMultiplication(uint32_t &multi); - xs_error_code_t TTLOutputModule3_getFreqMultiplication(uint32_t &multi); - xs_error_code_t TTLOutputModule4_getFreqMultiplication(uint32_t &multi); - - xs_error_code_t TTLOutputModule1_readInFreq(float &freq); - xs_error_code_t TTLOutputModule2_readInFreq(float &freq); - xs_error_code_t TTLOutputModule3_readInFreq(float &freq); - xs_error_code_t TTLOutputModule4_readInFreq(float &freq); - - xs_error_code_t TTLOutputModule1_readOutFreq(float &freq); - xs_error_code_t TTLOutputModule2_readOutFreq(float &freq); - xs_error_code_t TTLOutputModule3_readOutFreq(float &freq); - xs_error_code_t TTLOutputModule4_readOutFreq(float &freq); - - /** - * @brief 读取Genlock输入模块的频率 - * - * @param freq - * @return xs_error_code_t - */ - xs_error_code_t ExternalGenlock_detectFreq(float &freq); - /** - * @brief 内部Genlock信号发生器,设置格式 - * - * @param format - * 支持列表: - * GENLOCK_FPS2397 - * GENLOCK_FPS2398 - * GENLOCK_FPS2400 - * GENLOCK_FPS2500 - * GENLOCK_FPS2997 - * GENLOCK_FPS3000 - * GENLOCK_FPS5000 - * GENLOCK_FPS5994 - * GENLOCK_FPS6000 - * @return xs_error_code_t - */ - xs_error_code_t InternalGenlock_setFormat(GenlockFormat_t format); - xs_error_code_t InternalGenlock_getFormat(GenlockFormat_t &format); - /** - * @brief 系统Genlock选择时钟源 - * - * @param sig - * 支持列表: - * 0: 内部 - * 1: 外部 - * - * @return xs_error_code_t - */ - xs_error_code_t SysGenlock_setSrc(uint32_t source); - xs_error_code_t SysGenlock_getSrc(uint32_t &source); - - /** - * @brief 读取系统Genlock频率 - * - * @param freq - * @return xs_error_code_t - */ - xs_error_code_t SysGenlock_readFreq(float &freq); - - /** - * @brief 设备内部时钟发生器频率 - * - * @param freq 单位为HZ,最小频率变化支持0.1HZ - * @return xs_error_code_t - */ - xs_error_code_t InternalClock_setFreq(float freq); - xs_error_code_t InternalClock_getFreq(float &freq); - - /** - * @brief 系统时钟选择时钟源 - * - * @param mode - * 支持列表: - * SIGNAL_TTLIN1 - * SIGNAL_TTLIN1 - * SIGNAL_TTLIN2 - * SIGNAL_TTLIN3 - * SIGNAL_TTLIN4 - * SIGNAL_INTERNAL_CLOCK_SIG - * SIGNAL_SYS_GENLOCK_OUTPUT - * - * @return xs_error_code_t - */ - xs_error_code_t SysClock_setSrc(SignalType_t sig); - xs_error_code_t SysClock_getSrc(SignalType_t &sig); - - /** - * @brief 设置触发边沿 - * - * @param edge - * TRIGGER_EDGE_RISING - * TRIGGER_EDGE_FALLING - * @return xs_error_code_t - */ - xs_error_code_t SysClock_setTriggerEdge(TriggerEdge_t edge); - xs_error_code_t SysClock_getTriggerEdge(TriggerEdge_t &edge); - - /** - * @brief 设置主时钟分频系数 - * - * @param div - * @return xs_error_code_t - */ - xs_error_code_t SysClock_setFreqDivision(uint32_t div); - xs_error_code_t SysClock_geFreqtDivision(uint32_t &div); - - /** - * @brief 设置主时钟倍频系数 - * - * @param muti - * @return xs_error_code_t - */ - xs_error_code_t SysClock_setFreqMultiplication(uint32_t muti); - xs_error_code_t SysClock_getFreqMultiplication(uint32_t &muti); - - /** - * @brief 读取主时钟频率 - * - * @param freq - * @return xs_error_code_t - */ - xs_error_code_t SysClock_readOutSigFreq(float &freq); - /** - * @brief 读取系统时钟输入频率 - * - * @param freq - * @return xs_error_code_t - */ - xs_error_code_t SysClock_readInSigFreq(float &freq); - - /** - * @brief 业务信号发生器,设置启停控制方式 - * - * @param mode - * 支持列表: - * CONTROLMODE_MANUAL_TRIGGER - * CONTROLMODE_TIMECODE_TRIGGER - * CONTROLMODE_EXTERNALTTL_TRIGGER - * @return xs_error_code_t - */ - xs_error_code_t RecordSigGenerator_setContrlMode(ControlMode_t mode); - xs_error_code_t RecordSigGenerator_getContrlMode(ControlMode_t &mode); - - // 手动控制 - xs_error_code_t RecordSigGenerator_manualStart(); - xs_error_code_t RecordSigGenerator_manualStop(); - - // timecode控制启停 - xs_error_code_t RecordSigGenerator_setAutoStartTimecode(XsyncTimecode_t timecode); - xs_error_code_t RecordSigGenerator_setAutoStopTimecode(XsyncTimecode_t timecode); - - xs_error_code_t RecordSigGenerator_getAutoStartTimecode(XsyncTimecode_t &timecode); - xs_error_code_t RecordSigGenerator_getAutoStopTimecode(XsyncTimecode_t &timecode); - - xs_error_code_t RecordSigGenerator_setTimecodeCtrlFlag(uint32_t autoStart, uint32_t autoStop); - xs_error_code_t RecordSigGenerator_getTimecodeCtrlFlag(uint32_t &autoStart, uint32_t &autoStop); - - // 外部TTL触发控制 - /** - * @brief - * - * @param ttlPortNum - * INPUT_IF_TTL1 - * INPUT_IF_TTL2 - * INPUT_IF_TTL3 - * INPUT_IF_TTL4 - * @return xs_error_code_t - */ - xs_error_code_t RecordSigGenerator_setExternalTTLTriggerSrc(InputInterface_t ttlPortNum); // 1-4 - xs_error_code_t RecordSigGenerator_getExternalTTLTriggerSrc(InputInterface_t &ttlPortNum); - - /** - * @brief 设置外部触发电平,有效电平 - * - * @param polarity 0:低电平 1:高电平 - * @return xs_error_code_t - */ - xs_error_code_t RecordSigGenerator_setExternalTTLTriggerPolarity(uint32_t polarity); - xs_error_code_t RecordSigGenerator_getExternalTTLTriggerPolarity(uint32_t &polarity); - - /** - * @brief 设置录制曝光信号的曝光时间 - * - * @param us - * @return xs_error_code_t - */ - xs_error_code_t RecordSigGenerator_setRecordExposureTime(uint32_t us); - xs_error_code_t RecordSigGenerator_getRecordExposureTime(uint32_t &us); - /** - * @brief 设置录制曝光信号的偏移 - * - * @param us - * @return xs_error_code_t - */ - xs_error_code_t RecordSigGenerator_setRecordExposureOffsetTime(uint32_t us); - xs_error_code_t RecordSigGenerator_getRecordExposureOffsetTime(uint32_t &us); - - /** - * @brief 录制信号生成器,读取录制状态 - * - * @param state 0:没有录制,1:录制中 - * @return xs_error_code_t - */ - xs_error_code_t RecordSigGenerator_getRecordState(uint32_t &state); - xs_error_code_t RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode); - - private: - xs_error_code_t doaction(uint32_t action, uint32_t actionval, uint32_t *ackreturn, int32_t overtime_ms = 100); - xs_error_code_t storageConfig(); - xs_error_code_t xsync_send_cmd_block(iflytop_xsync_packet_header_t *cmd, iflytop_xsync_packet_header_t *rx_data, int32_t buffersize, int32_t overtime_ms); - - xs_error_code_t readtimecode(uint32_t reg0, uint32_t reg1, XsyncTimecode_t &timecode); - xs_error_code_t writetimecode(uint32_t reg0, uint32_t reg1, XsyncTimecode_t timecode); - xs_error_code_t readfreq(uint32_t reg, float &freq); - - template - xs_error_code_t _reg_read(uint32_t regadd, T ®value, int32_t overtime_ms = 100) { - uint32_t regvalue_u32; - xs_error_code_t ret = reg_read(regadd, regvalue_u32, overtime_ms); - if (ret == kxs_ec_success) { - regvalue = (T)regvalue_u32; - } - return ret; - } - - void parseTimecodeMsgAndReport(XsyncNetAdd &from, uint8_t *data, size_t length); - void parseCameraSyncMsgAndReport(XsyncNetAdd &from, uint8_t *data, size_t length); -}; - -} // namespace xsync