diff --git a/xsync.cpp b/xsync.cpp index dc02415..3ea704e 100644 --- a/xsync.cpp +++ b/xsync.cpp @@ -487,6 +487,7 @@ xsync_net_state_t Xsync::getNetState() { return m_net_state; } void Xsync::Basic_registerOnTimecodeMsgCallback(xsync_on_timecode_msg_t on_timecode_msg_cb) { m_on_timecode_msg_cb = on_timecode_msg_cb; } void Xsync::Basic_registerOnCameraSyncMsgCallback(xsync_on_camera_sync_msg_t on_camera_sync_msg_cb) { m_on_camera_sync_msg_cb = on_camera_sync_msg_cb; } +void Xsync::Basic_registerOnWorkstateChangeMsgCallback(xsync_on_workstate_change_msg_t on_workstate_change_msg_cb) { m_on_workstate_change_msg_cb = on_workstate_change_msg_cb; } 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_); @@ -619,14 +620,17 @@ xs_error_code_t Xsync::reg_read_muti(uint32_t regadd, uint32_t nreg, vectortimecode0; - tc64.tc1 = packet->timecode1; - - XsyncTimecode_t timecode = timecode64ToXsyncTimeCode(tc64); - if (m_on_timecode_msg_cb) m_on_timecode_msg_cb(&timecode); + iflytop_xsync_event_report_packet_t *packet = (iflytop_xsync_event_report_packet_t *)data; + if (packet->eventid == ktimecode_report_event) { + Timecode64_t tc64; + tc64.tc0 = packet->data[0]; + tc64.tc1 = packet->data[1]; + XsyncTimecode_t timecode = timecode64ToXsyncTimeCode(tc64); + if (m_on_timecode_msg_cb) m_on_timecode_msg_cb(&timecode); + } else if (packet->eventid == kxsync_work_state_report_event) { + // 信号发生器状态改变 + if (m_on_workstate_change_msg_cb) m_on_workstate_change_msg_cb(packet->data[0]); + } } void Xsync::parseCameraSyncMsgAndReport(XsyncNetAdd &from, uint8_t *data, size_t length) { uint32_t count = 0; @@ -704,14 +708,16 @@ xs_error_code_t Xsync::Basic_getGenlockFormat(GenlockFormat_t &format) { return kxs_ec_success; } 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) { - DO_XSYNC(SigGenerator_getTimecodeFormat(format)); + uint32_t readbak = 0; + DO_XSYNC(reg_write(reg::kSigGenerator_timecode_format, format, readbak, 10)); + DO_XSYNC(reg_write(reg::ktimecode_in_timecode_format, format, readbak, 10)); + // DO_XSYNC(reg_write(reg::ktimecode_out_timecode_format, format, readbak, 10)); //readonly return kxs_ec_success; } +// xs_error_code_t Xsync::Basic_getTimecodeFormat(TimecodeFormat_t &format) { +// DO_XSYNC(SigGenerator_getTimecodeFormat(format)); +// return kxs_ec_success; +// } /******************************************************************************* * TTLOutputModule * *******************************************************************************/ @@ -990,10 +996,7 @@ xs_error_code_t Xsync::SigGenerator_getGenlockFormat(GenlockFormat_t &format) { 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, 10); -} +xs_error_code_t Xsync::SigGenerator_setTimecodeFormat(TimecodeFormat_t format) { return Basic_setTimecodeFormat(format); } xs_error_code_t Xsync::SigGenerator_getTimecodeFormat(TimecodeFormat_t &format) { uint32_t readbak = 0; auto ecode = reg_read(reg::kSigGenerator_timecode_format, readbak, 10); @@ -1102,24 +1105,20 @@ xs_error_code_t Xsync::TimecodeInputModule_setSrcSelect(timecode_input_module::T 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) { +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_setTimecodeFormat(TimecodeFormat_t format) { return Basic_setTimecodeFormat(format); } 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) { +xs_error_code_t Xsync::TimecodeInputModule_getTimecode(XsyncTimecode_t &timecode) { uint32_t readbak = 0; xs_error_code_t ecode = kxs_ec_success; diff --git a/xsync.hpp b/xsync.hpp index 4a781e2..ab25ae4 100644 --- a/xsync.hpp +++ b/xsync.hpp @@ -73,6 +73,7 @@ typedef struct { } xysnc_camera_sync_data_t; typedef function xsync_on_timecode_msg_t; +typedef function xsync_on_workstate_change_msg_t; typedef function xsync_on_camera_sync_msg_t; /******************************************************************************* @@ -208,8 +209,9 @@ class Xsync { 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_camera_sync_msg_t m_on_camera_sync_msg_cb = nullptr; + xsync_on_timecode_msg_t m_on_timecode_msg_cb = nullptr; + xsync_on_workstate_change_msg_t m_on_workstate_change_msg_cb = nullptr; int txpacket_index = 0; @@ -240,6 +242,7 @@ class Xsync { *******************************************************************************/ void Basic_registerOnTimecodeMsgCallback(xsync_on_timecode_msg_t on_timecode_msg_cb); void Basic_registerOnCameraSyncMsgCallback(xsync_on_camera_sync_msg_t on_camera_sync_msg_cb); + void Basic_registerOnWorkstateChangeMsgCallback(xsync_on_workstate_change_msg_t on_workstate_change_msg_cb); /******************************************************************************* * 寄存器直接读写操作 * @@ -261,19 +264,19 @@ class Xsync { xs_error_code_t Basic_setGenlockFormat(GenlockFormat_t format); xs_error_code_t Basic_getGenlockFormat(GenlockFormat_t &format); xs_error_code_t Basic_setTimecodeFormat(TimecodeFormat_t format); - xs_error_code_t Basic_getTimecodeFormat(TimecodeFormat_t &format); + // 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_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); + xs_error_code_t TimecodeInputModule_getTimecode(XsyncTimecode_t &timecode); /******************************************************************************* * TTL输入模块 * diff --git a/xsync_packet.hpp b/xsync_packet.hpp index e1ce28d..ed9a39a 100644 --- a/xsync_packet.hpp +++ b/xsync_packet.hpp @@ -28,10 +28,14 @@ typedef struct { } iflytop_xsync_packet_header_t; typedef struct { - uint32_t timecode0; - uint32_t timecode1; -} iflytop_timecode_report_packet_t; -#pragma pack() + uint32_t eventid; + uint32_t data[]; +} iflytop_xsync_event_report_packet_t; + +typedef enum { + ktimecode_report_event = 0, + kxsync_work_state_report_event = 1, +} iflytop_event_type_t; typedef enum { kxsync_packet_type_none = 0,