diff --git a/include/xsync_v2_sig_type.hpp b/include/xsync_v2_sig_type.hpp index 05dcec1..9b5fcb2 100644 --- a/include/xsync_v2_sig_type.hpp +++ b/include/xsync_v2_sig_type.hpp @@ -24,6 +24,7 @@ using namespace std; typedef struct { uint32_t tc0; uint32_t tc1; + uint32_t subframe; } Timecode64_t; typedef enum { @@ -44,6 +45,7 @@ typedef struct { uint8_t minute; uint8_t second; uint8_t frame; + uint8_t subframe; } XsyncTimecode_t; string XsyncTimecodeToStr(XsyncTimecode_t timecode); @@ -182,5 +184,4 @@ typedef enum { DHCP_MODE = 1, } NetworkMode_t; - } // namespace xsync diff --git a/src/xsync_utils.cpp b/src/xsync_utils.cpp index ca4ebdd..221cbd5 100644 --- a/src/xsync_utils.cpp +++ b/src/xsync_utils.cpp @@ -59,10 +59,11 @@ XsyncTimecode_t timecode64ToXsyncTimeCode(Timecode64_t tc64) { uint8_t hour10s = (tc64.tc1 >> 24) & 0x03; XsyncTimecode_t timecode; - timecode.hour = hour10s * 10 + houruints; - timecode.minute = minute10s * 10 + minuteuints; - timecode.second = second10s * 10 + seconduints; - timecode.frame = frame10s * 10 + frameuints; + timecode.hour = hour10s * 10 + houruints; + timecode.minute = minute10s * 10 + minuteuints; + timecode.second = second10s * 10 + seconduints; + timecode.frame = frame10s * 10 + frameuints; + timecode.subframe = tc64.subframe; return timecode; } @@ -79,8 +80,9 @@ Timecode64_t timecodeTo64(XsyncTimecode_t tc) { uint32_t houruints = tc.hour % 10; uint32_t hour10s = tc.hour / 10; - tc64.tc0 = frameuints + (frame10s << 8) + (seconduints << 16) + (second10s << 24); - tc64.tc1 = minuteuints + (minute10s << 8) + (houruints << 16) + (hour10s << 24); + tc64.tc0 = frameuints + (frame10s << 8) + (seconduints << 16) + (second10s << 24); + tc64.tc1 = minuteuints + (minute10s << 8) + (houruints << 16) + (hour10s << 24); + tc64.subframe = tc.subframe; return tc64; } diff --git a/src/xsync_v2.cpp b/src/xsync_v2.cpp index 3c68e8e..20d14b5 100644 --- a/src/xsync_v2.cpp +++ b/src/xsync_v2.cpp @@ -138,9 +138,11 @@ class Xsync : public IXsync { if (packet->eventid == ktimecode_report_event) { Timecode64_t tc64; - tc64.tc0 = packet->data[0]; - tc64.tc1 = packet->data[1]; + tc64.tc0 = packet->data[0]; + tc64.tc1 = packet->data[1]; + tc64.subframe = packet->data[2]; 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) { // 信号发生器状态改变 @@ -159,7 +161,9 @@ class Xsync : public IXsync { xsync_camera_sync_udp_listener = g_xsync_udp_factory->createXSUDP(); ecode = xsync_camera_sync_udp_listener->initialize("0.0.0.0", IFLYTOP_XSYNC_CAMERA_SYNC_PACKET_PC_PORT); if (ecode != kxs_ec_success) goto err; - ecode = xsync_camera_sync_udp_listener->startReceive([this](XsyncNetAdd &from, uint8_t *data, size_t length) { parseCameraSyncMsgAndReport(from, data, length); }); + ecode = xsync_camera_sync_udp_listener->startReceive([this](XsyncNetAdd &from, uint8_t *data, size_t length) { // + parseCameraSyncMsgAndReport(from, data, length); + }); if (ecode != kxs_ec_success) goto err; #endif