You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

219 lines
8.3 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #pragma once
  2. #include <fstream>
  3. #include <functional>
  4. #include <iostream>
  5. #include <list>
  6. #include <map>
  7. #include <memory>
  8. #include <mutex>
  9. #include <set>
  10. #include <sstream>
  11. #include <string>
  12. #include <vector>
  13. //
  14. #include "i_xsync_udp.hpp"
  15. #include "iflytop_xsync_protocol/iflytop_xsync_protocol.h"
  16. #include "xsync_errcode.hpp"
  17. namespace iflytop {
  18. using namespace std;
  19. typedef enum {
  20. kxsync_net_state_disconnect,
  21. kxsync_net_state_connecting,
  22. kxsync_net_state_connected,
  23. } xsync_net_state_t;
  24. /*******************************************************************************
  25. * XSYNC内部信号 *
  26. *******************************************************************************/
  27. namespace xsync_internal_signal {
  28. typedef enum {
  29. level0 = 0, // 0
  30. level1 = 1, // 1
  31. ttlin1_module_raw_sig = 2, // ttl1输入模块原始信号
  32. ttlin1_module_sig_divide = 3, // ttl1输入模块分频信号
  33. ttlin2_module_raw_sig = 4, // ttl2输入模块原始信号
  34. ttlin2_module_sig_divide = 5, // ttl2输入模块分频信号
  35. ttlin3_module_raw_sig = 6, // ttl3输入模块原始信号
  36. ttlin3_module_sig_divide = 7, // ttl3输入模块分频信号
  37. ttlin4_module_raw_sig = 8, // ttl4输入模块原始信号
  38. ttlin4_module_sig_divide = 9, // ttl4输入模块分频信号
  39. genlockin_module_freq_sig = 10, // genlock输入模块频率信号
  40. timecodein_module_trigger_sig = 11, // timecode输入模块触发信号
  41. internal_camera_sync_sig = 12, // 内部相机同步信号
  42. internal_timecode_trigger_sig = 13, // 内部timecode触发信号
  43. internal_genlock_freq_sig = 14, // 内部genlock频率信号
  44. internal_work_state_sig = 15 // 内部工作状态信号
  45. } signal_type_t;
  46. string signal_type_to_str(signal_type_t type);
  47. signal_type_t str_to_signal_type(string type);
  48. } // namespace xsync_internal_signal
  49. /*******************************************************************************
  50. * TTL输出模块相关枚举 *
  51. *******************************************************************************/
  52. namespace xsync_ttlout_module {
  53. typedef enum {
  54. level0 = 0, // 0
  55. level1 = 1, // 1
  56. test_signal = 2, // 测试信号,信号为ID*1000HZ方波信号
  57. input_signal = 3, // 输入信号
  58. input_signal_mirror = 4, // 翻转后的输入信号
  59. trigger_mode_signal = 5, // 触发模式下的触发信号
  60. trigger_mode_signal_mirror = 6, // 触发模式下的触发信号翻转
  61. } output_signal_type_t;
  62. string output_signal_type_to_str(output_signal_type_t type);
  63. output_signal_type_t str_to_output_signal_type(string type);
  64. } // namespace xsync_ttlout_module
  65. typedef struct {
  66. uint8_t hour;
  67. uint8_t minute;
  68. uint8_t second;
  69. uint8_t frame;
  70. } xysnc_timecode_t;
  71. typedef struct {
  72. uint32_t frameIndex;
  73. } xysnc_camera_sync_data_t;
  74. typedef function<void(xysnc_timecode_t *timecode_msg)> xsync_on_timecode_msg_t;
  75. typedef function<void(xysnc_camera_sync_data_t *timecode_msg)> xsync_on_camera_sync_msg_t;
  76. class Xsync {
  77. public:
  78. private:
  79. /* data */
  80. I_XSUDPFactory *m_xsync_udp_factory = nullptr;
  81. shared_ptr<I_XSUDP> m_xsync_reg_udp = nullptr;
  82. shared_ptr<I_XSUDP> m_xsync_timecode_udp_listener = nullptr;
  83. shared_ptr<I_XSUDP> m_xsync_camera_sync_udp_listener = nullptr;
  84. string m_xsync_ip;
  85. bool m_is_connected = false;
  86. xsync_on_camera_sync_msg_t m_on_camera_sync_msg_cb = nullptr;
  87. xsync_on_timecode_msg_t m_on_timecode_msg_cb = nullptr;
  88. int txpacket_index = 0;
  89. uint8_t m_xync_cmd_rxdata_cache[2560];
  90. xsync_net_state_t m_net_state = kxsync_net_state_disconnect;
  91. std::recursive_mutex lock_;
  92. Xsync(/* args */);
  93. public:
  94. static Xsync &Ins();
  95. void initialize(I_XSUDPFactory *xsync_udp_factory);
  96. /*******************************************************************************
  97. * *
  98. *******************************************************************************/
  99. bool ping(string xsync_ip);
  100. xs_error_code_t connect(string xsync_ip);
  101. xs_error_code_t disConnect();
  102. xsync_net_state_t getNetState();
  103. /*******************************************************************************
  104. * *
  105. *******************************************************************************/
  106. void Basic_registerOnTimecodeMsgCallback(xsync_on_timecode_msg_t on_timecode_msg_cb);
  107. void Basic_registerOnCameraSyncMsgCallback(xsync_on_camera_sync_msg_t on_camera_sync_msg_cb);
  108. /*******************************************************************************
  109. * *
  110. *******************************************************************************/
  111. xs_error_code_t reg_write(uint32_t regadd, uint32_t regvalue, uint32_t &regbackvalue, int32_t overtime_ms = 100);
  112. xs_error_code_t reg_read(uint32_t regadd, uint32_t &regvalue, int32_t overtime_ms = 100);
  113. xs_error_code_t reg_read_muti(uint32_t regadd, uint32_t nreg, vector<uint32_t> &regvalues, int32_t overtime_ms = 100);
  114. /*******************************************************************************
  115. * *
  116. *******************************************************************************/
  117. xs_error_code_t Basic_generatorNewMac();
  118. xs_error_code_t Basic_factoryReset();
  119. xs_error_code_t Basic_reboot();
  120. xs_error_code_t Basic_changeNetworkConfig(string ip, string mask, string gateway);
  121. xs_error_code_t Basic_clearXsyncCameraSyncIndexCount();
  122. /*******************************************************************************
  123. * TTL输出模块控制 *
  124. *******************************************************************************/
  125. /**
  126. *
  127. * 1.
  128. * 2.
  129. * 3.
  130. * 4.
  131. *
  132. */
  133. /**
  134. * @brief TTL输出模块的输入信号
  135. *
  136. * @param index
  137. * @param source
  138. * @return xs_error_code_t
  139. */
  140. xs_error_code_t TTLOutputModule_setInputSigType(int32_t index, xsync_internal_signal::signal_type_t source);
  141. xs_error_code_t TTLOutputModule_getInputSigType(int32_t index, xsync_internal_signal::signal_type_t &source);
  142. /**
  143. * @brief TTL输出模块的输出信号
  144. *
  145. * @param index
  146. * @param output_type
  147. * @return xs_error_code_t
  148. */
  149. xs_error_code_t TTLOutputModule_setOutputSigType(int32_t index, xsync_ttlout_module::output_signal_type_t output_type);
  150. xs_error_code_t TTLOutputModule_getOutputSigType(int32_t index, xsync_ttlout_module::output_signal_type_t &output_type);
  151. /**
  152. * @brief
  153. *
  154. * @param index
  155. * @param pulse_width_ms
  156. * @return xs_error_code_t
  157. */
  158. xs_error_code_t TTLOutputModule_setTriggerModePulseWidth(int32_t index, uint32_t pulse_width_ms);
  159. xs_error_code_t TTLOutputModule_getTriggerModePulseWidth(int32_t index, uint32_t &pulse_width_ms);
  160. /**
  161. * @brief
  162. *
  163. * @param index
  164. * @param pulse_delay_ms
  165. * @return xs_error_code_t
  166. */
  167. xs_error_code_t TTLOutputModule_setTriggerModePulseDelay(int32_t index, uint32_t pulse_delay_ms);
  168. xs_error_code_t TTLOutputModule_getTriggerModePulseDelay(int32_t index, uint32_t &pulse_delay_ms);
  169. /**
  170. * @brief
  171. */
  172. private:
  173. xs_error_code_t doaction(uint32_t action, uint32_t actionval, uint32_t *ackreturn, int32_t overtime_ms = 100);
  174. xs_error_code_t storageConfig();
  175. 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);
  176. void parseTimecodeMsgAndReport(XsyncNetAdd &from, uint8_t *data, size_t length);
  177. void parseCameraSyncMsgAndReport(XsyncNetAdd &from, uint8_t *data, size_t length);
  178. xs_error_code_t TTLOutputModule_getRegOff(int32_t index, uint32_t &regadd);
  179. };
  180. } // namespace iflytop