diff --git a/iflytop_xsync_protocol b/iflytop_xsync_protocol index 85b6bcc..cb1114b 160000 --- a/iflytop_xsync_protocol +++ b/iflytop_xsync_protocol @@ -1 +1 @@ -Subproject commit 85b6bcc87f9188f061402b6ff6bac7b226c0025c +Subproject commit cb1114b21bf415053cdaeb7ed2940406e48d378b diff --git a/xsync.cpp b/xsync.cpp index 03e20ae..ba72d5d 100644 --- a/xsync.cpp +++ b/xsync.cpp @@ -9,30 +9,56 @@ Xsync &Xsync::Ins() { } void Xsync::initialize(I_XSUDPFactory *xsync_udp_factory) { m_xsync_udp_factory = xsync_udp_factory; } -void Xsync::connect(string xsync_ip) { +xs_error_code_t Xsync::connect(string xsync_ip) { m_xsync_ip = xsync_ip; + disConnect(); /** * @brief 创建 m_xsync_reg_udp */ - m_xsync_reg_udp = m_xsync_udp_factory->createXSUDP(); - m_xsync_reg_udp->initialize(m_xsync_ip, IFLYTOP_XSYNC_SERVICE_PC_PORT); + + xs_error_code_t ecode = kxs_ec_success; + + auto xsync_reg_udp = m_xsync_udp_factory->createXSUDP(); + ecode = xsync_reg_udp->initialize("0.0.0.0", IFLYTOP_XSYNC_SERVICE_PC_PORT); + if (ecode != kxs_ec_success) { + return ecode; + } /** * @brief 创建 m_xsync_timecode_udp_listener */ - m_xsync_timecode_udp_listener = m_xsync_udp_factory->createXSUDP(); - m_xsync_timecode_udp_listener->initialize(m_xsync_ip, IFLYTOP_XSYNC_TIMECODE_REPORT_PC_PORT); - m_xsync_timecode_udp_listener->startReceive([this](XsyncNetAdd &from, uint8_t *data, size_t length) { parseTimecodeMsgAndReport(from, data, length); }); + auto xsync_timecode_udp_listener = m_xsync_udp_factory->createXSUDP(); + + ecode = xsync_timecode_udp_listener->initialize("0.0.0.0", IFLYTOP_XSYNC_TIMECODE_REPORT_PC_PORT); + if (ecode != kxs_ec_success) { + return ecode; + } + ecode = xsync_timecode_udp_listener->startReceive([this](XsyncNetAdd &from, uint8_t *data, size_t length) { parseTimecodeMsgAndReport(from, data, length); }); + if (ecode != kxs_ec_success) { + return ecode; + } /** * @brief 创建 m_xsync_camera_sync_udp_listener */ - m_xsync_camera_sync_udp_listener = m_xsync_udp_factory->createXSUDP(); - m_xsync_camera_sync_udp_listener->initialize(m_xsync_ip, IFLYTOP_XSYNC_CAMERA_SYNC_PACKET_PC_PORT); - m_xsync_camera_sync_udp_listener->startReceive([this](XsyncNetAdd &from, uint8_t *data, size_t length) { parseCameraSyncMsgAndReport(from, data, length); }); + auto xsync_camera_sync_udp_listener = m_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) { + return ecode; + } + 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) { + return ecode; + } + + m_xsync_reg_udp = xsync_reg_udp; + m_xsync_timecode_udp_listener = xsync_timecode_udp_listener; + m_xsync_camera_sync_udp_listener = xsync_camera_sync_udp_listener; m_net_state = kxsync_net_state_connected; + return ecode; } -void Xsync::disConnect() { +xs_error_code_t Xsync::disConnect() { if (m_xsync_reg_udp != nullptr) { m_xsync_reg_udp->stopReceive(); m_xsync_reg_udp = nullptr; @@ -56,11 +82,12 @@ void Xsync::regOnTimecodeMsg(xsync_on_timecode_msg_t on_timecode_msg_cb) { m_on_ void Xsync::regOnCameraSyncMsg(xsync_on_camera_sync_msg_t on_camera_sync_msg_cb) { m_on_camera_sync_msg_cb = on_camera_sync_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) { + if (!m_xsync_reg_udp) return kxs_ec_lose_connect; m_xsync_reg_udp->clearRxBuffer(); cmd->index = txpacket_index++; - XsyncNetAdd toadd = {m_xsync_ip, IFLYTOP_XSYNC_SERVICE_PC_PORT}; + XsyncNetAdd toadd = {m_xsync_ip, IFLYTOP_XSYNC_SERVICE_XSYNC_PORT}; xs_error_code_t ecode = // m_xsync_reg_udp->sendto(toadd, (const char *)cmd, sizeof(iflytop_xsync_packet_header_t) + cmd->ndata * 4, nullptr); if (ecode != kxs_ec_success) { @@ -68,7 +95,7 @@ xs_error_code_t Xsync::xsync_send_cmd_block(iflytop_xsync_packet_header_t *cmd, } XsyncNetAdd fromadd; - ecode = m_xsync_reg_udp->receive((char *)rx_data, buffersize, fromadd, 100); + ecode = m_xsync_reg_udp->receive((char *)rx_data, buffersize, fromadd, 10); if (ecode != kxs_ec_success) { return ecode; } diff --git a/xsync.hpp b/xsync.hpp index eba9134..1379cec 100644 --- a/xsync.hpp +++ b/xsync.hpp @@ -67,8 +67,8 @@ class Xsync { bool ping(string xsync_ip); - void connect(string xsync_ip); - void disConnect(); + xs_error_code_t connect(string xsync_ip); + xs_error_code_t disConnect(); xsync_net_state_t getNetState(); void regOnTimecodeMsg(xsync_on_timecode_msg_t on_timecode_msg_cb); @@ -80,6 +80,10 @@ class Xsync { xs_error_code_t xsync_send_cmd_block(iflytop_xsync_packet_header_t *cmd, iflytop_xsync_packet_header_t *rx_data, int32_t buffersize); + /** + * @brief + */ + private: void parseTimecodeMsgAndReport(XsyncNetAdd &from, uint8_t *data, size_t length); void parseCameraSyncMsgAndReport(XsyncNetAdd &from, uint8_t *data, size_t length);