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.

376 lines
19 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year 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. #include "xsync_errcode.hpp"
  14. #include "xsync_v2_sig_type.hpp"
  15. namespace xsync {
  16. using namespace std;
  17. typedef function<void(XsyncTimecode_t *timecode_msg)> xsync_on_timecode_msg_t;
  18. typedef function<void(uint32_t recordSig, XsyncTimecode_t *timecode_msg)> xsync_on_record_sig_change_msg_t;
  19. typedef function<void(bool state, string targetIp)> xsync_on_connect_state_change_t;
  20. typedef function<void(xysnc_camera_sync_data_t *timecode_msg)> xsync_on_camera_sync_msg_t;
  21. typedef struct {
  22. bool listenCameraSyncPacket;
  23. } xsync_config_t;
  24. typedef struct {
  25. uint32_t main;
  26. uint32_t sub;
  27. uint32_t fix;
  28. } version_t;
  29. class IXsync {
  30. public:
  31. virtual ~IXsync() {}
  32. public:
  33. virtual xs_error_code_t initialize(xsync_config_t *config) = 0;
  34. virtual bool ping() = 0;
  35. virtual bool getConnectState() = 0;
  36. virtual string getDeviceIp() = 0;
  37. /*******************************************************************************
  38. * *
  39. *******************************************************************************/
  40. /**
  41. * @brief
  42. * :
  43. * 1. storageConfig才会持久化
  44. * 2. reboot方法
  45. */
  46. virtual xs_error_code_t NetworkConfig_setMode(NetworkMode_t mode) = 0;
  47. virtual xs_error_code_t NetworkConfig_getMode(NetworkMode_t &mode) = 0;
  48. virtual xs_error_code_t NetworkConfigStaticIpMode_setIp(string ip) = 0;
  49. virtual xs_error_code_t NetworkConfigStaticIpMode_setMask(string mask) = 0;
  50. virtual xs_error_code_t NetworkConfigStaticIpMode_setGateway(string gateway) = 0;
  51. virtual xs_error_code_t NetworkConfigStaticIpMode_getIp(string &ip) = 0;
  52. virtual xs_error_code_t NetworkConfigStaticIpMode_getMask(string &mask) = 0;
  53. virtual xs_error_code_t NetworkConfigStaticIpMode_getGateway(string &gateway) = 0;
  54. /*******************************************************************************
  55. * *
  56. *******************************************************************************/
  57. virtual void registerOnTimecodeMsgCallback(xsync_on_timecode_msg_t cb) = 0; // timecode 回调
  58. virtual void registerOnCameraSyncMsgCallback(xsync_on_camera_sync_msg_t cb) = 0; // 相机同步包 回调
  59. virtual void registerOnRecordSigChangeMsgCallback(xsync_on_record_sig_change_msg_t cb) = 0; // 录制信号变化 回调
  60. virtual void registerOnConnectStateChangeCallback(xsync_on_connect_state_change_t cb) = 0; // 连接状态变化 回调
  61. /*******************************************************************************
  62. * *
  63. *******************************************************************************/
  64. virtual xs_error_code_t generatorNewMac() = 0;
  65. virtual xs_error_code_t factoryReset() = 0;
  66. virtual xs_error_code_t reboot() = 0;
  67. virtual xs_error_code_t readSn(string &sn) = 0;
  68. virtual xs_error_code_t readMac(string &mac) = 0;
  69. virtual xs_error_code_t storageConfig() = 0;
  70. virtual xs_error_code_t readSDKVersion(version_t &version) = 0;
  71. virtual xs_error_code_t readARMSoftwareVersion(version_t &version) = 0;
  72. virtual xs_error_code_t readFPGASoftwareVersion(version_t &version) = 0;
  73. // virtual xs_error_code_t changeNetworkConfig(string ip, string mask, string gateway) = 0;
  74. public:
  75. virtual xs_error_code_t reg_write(uint32_t regadd, uint32_t regvalue, uint32_t &regbackvalue, int32_t overtime_ms = 100) = 0;
  76. virtual xs_error_code_t reg_read(uint32_t regadd, uint32_t &regvalue, int32_t overtime_ms = 100) = 0;
  77. public:
  78. /*******************************************************************************
  79. * *
  80. *******************************************************************************/
  81. virtual xs_error_code_t DelayContrl_setInputDelay(uint32_t delay_us) = 0;
  82. virtual xs_error_code_t DelayContrl_getInputDelay(uint32_t &delay_us) = 0;
  83. virtual xs_error_code_t DelayContrl_setOutputDelay(uint32_t delay_us) = 0;
  84. virtual xs_error_code_t DelayContrl_getOutputDelay(uint32_t &delay_us) = 0;
  85. /***********************************************************************************************
  86. * *
  87. ***********************************************************************************************/
  88. /**
  89. * @brief
  90. *
  91. * : 33
  92. * TTLInputModule1_XXXXX: TTL1_IN
  93. * TTLInputModule2_XXXXX: TTL2_IN
  94. * TTLInputModule3_XXXXX: TTL3_IN
  95. * TTLInputModule4_XXXXX:
  96. *
  97. * ExternalTimecode_XXXXX : BNC时码输入口
  98. *
  99. * ExternalGenlock_XXXXX : GENLOCK输入口
  100. *
  101. *
  102. *
  103. *
  104. * 使:
  105. * 使使
  106. *
  107. * ExternalTimecode_setSource
  108. * :
  109. * :
  110. * INPUT_IF_TIMECODE_BNC
  111. * INPUT_IF_TIMECODE_HEADPHONE
  112. *
  113. *
  114. * ExternalTimecode_setFormat
  115. * :
  116. * :
  117. * TIMECODE_FPS2398
  118. * TIMECODE_FPS2400
  119. * TIMECODE_FPS2500
  120. * TIMECODE_FPS2997
  121. * TIMECODE_FPS2997Drop
  122. * TIMECODE_FPS3000
  123. *
  124. *
  125. * TTLInputModuleX_detectFreq
  126. * :TTL输入频率
  127. *
  128. * ExternalGenlock_detectFreq
  129. * :GENLOCK信号频率
  130. *
  131. */
  132. virtual xs_error_code_t ExternalTimecode_readSrc(InputInterface_t &timecode) = 0;
  133. virtual xs_error_code_t ExternalTimecode_readCode(XsyncTimecode_t &timecode) = 0;
  134. virtual xs_error_code_t ExternalTimecode_readFreq(float &freq) = 0;
  135. virtual xs_error_code_t ExternalTimecode_readFormat(TimecodeFormat_t &timecode) = 0;
  136. virtual xs_error_code_t TTLInputModule1_detectFreq(float &freq) = 0;
  137. virtual xs_error_code_t TTLInputModule2_detectFreq(float &freq) = 0;
  138. virtual xs_error_code_t TTLInputModule3_detectFreq(float &freq) = 0;
  139. virtual xs_error_code_t TTLInputModule4_detectFreq(float &freq) = 0;
  140. virtual xs_error_code_t ExternalGenlock_detectFreq(float &freq) = 0;
  141. /***********************************************************************************************
  142. * *
  143. ***********************************************************************************************/
  144. /**
  145. * @brief
  146. *
  147. * : 7
  148. * InternalTimecode_XXXXX :
  149. * InternalGenlock_XXXXX :
  150. * InternalClock_XXXXX :
  151. *
  152. * SysTimecode_XXXXX :
  153. * SysGenlock_XXXXX :
  154. * SysClock_XXXXX :
  155. *
  156. *
  157. *
  158. * :
  159. * Xsync系统中一共有三个比较重要概念GenlockGenlock
  160. * GenlockGenlockGenlock
  161. * Genlock
  162. *
  163. *
  164. * ---|1
  165. * ---|0 ---->
  166. *
  167. *
  168. * Genlock ---|1
  169. * Genlock ---|0 ----> Genlock
  170. *
  171. *
  172. * ---|
  173. * Genlock ---|
  174. * ---| ---->
  175. * TTL输入信号 ---|
  176. * ---|
  177. *
  178. *
  179. * :
  180. * 1. GenlockAPI进行修改
  181. * 2. GenlockGenlock
  182. * 3. 沿
  183. *
  184. *
  185. */
  186. virtual xs_error_code_t InternalSigSrouce_start() = 0;
  187. virtual xs_error_code_t InternalSigSrouce_stop() = 0;
  188. virtual xs_error_code_t InternalSigSrouce_readState(bool &en) = 0;
  189. virtual xs_error_code_t InternalTimecode_setFormat(TimecodeFormat_t format) = 0;
  190. virtual xs_error_code_t InternalTimecode_getFormat(TimecodeFormat_t &format) = 0;
  191. virtual xs_error_code_t InternalTimecode_setCode(XsyncTimecode_t timecode) = 0;
  192. virtual xs_error_code_t InternalTimecode_getCode(XsyncTimecode_t &timecode) = 0;
  193. virtual xs_error_code_t InternalTimecode_readFreq(float &freq) = 0;
  194. virtual xs_error_code_t InternalGenlock_setFormat(GenlockFormat_t format) = 0;
  195. virtual xs_error_code_t InternalGenlock_getFormat(GenlockFormat_t &format) = 0;
  196. virtual xs_error_code_t InternalGenlock_readFreq(float &freq) = 0;
  197. virtual xs_error_code_t InternalClock_setFreq(float freq) = 0;
  198. virtual xs_error_code_t InternalClock_getFreq(float &freq) = 0;
  199. virtual xs_error_code_t InternalClock_readOutFreq(float &freq) = 0;
  200. /*******************************************************************************
  201. * *
  202. *******************************************************************************/
  203. virtual xs_error_code_t SysTimecode_setSource(uint32_t sig) = 0;
  204. virtual xs_error_code_t SysTimecode_getSource(uint32_t &sig) = 0;
  205. virtual xs_error_code_t SysTimecode_readFormat(TimecodeFormat_t &format) = 0;
  206. virtual xs_error_code_t SysTimecode_readCode(XsyncTimecode_t &timecode) = 0;
  207. virtual xs_error_code_t SysTimecode_readFreq(float &freq) = 0;
  208. virtual xs_error_code_t SysGenlock_setSrc(uint32_t source) = 0;
  209. virtual xs_error_code_t SysGenlock_getSrc(uint32_t &source) = 0;
  210. virtual xs_error_code_t SysGenlock_readFreq(float &freq) = 0;
  211. virtual xs_error_code_t SysClock_setSrc(SignalType_t sig) = 0;
  212. virtual xs_error_code_t SysClock_getSrc(SignalType_t &sig) = 0;
  213. virtual xs_error_code_t SysClock_setTriggerEdge(TriggerEdge_t edge) = 0;
  214. virtual xs_error_code_t SysClock_getTriggerEdge(TriggerEdge_t &edge) = 0;
  215. virtual xs_error_code_t SysClock_setFreqDivision(uint32_t div) = 0;
  216. virtual xs_error_code_t SysClock_geFreqtDivision(uint32_t &div) = 0;
  217. virtual xs_error_code_t SysClock_setFreqMultiplication(uint32_t muti) = 0;
  218. virtual xs_error_code_t SysClock_getFreqMultiplication(uint32_t &muti) = 0;
  219. virtual xs_error_code_t SysClock_readOutSigFreq(float &freq) = 0;
  220. virtual xs_error_code_t SysClock_readInSigFreq(float &freq) = 0;
  221. /***********************************************************************************************
  222. * *
  223. ***********************************************************************************************/
  224. /**
  225. * @brief
  226. *
  227. * :
  228. * 使
  229. * TimeCode启动TTL触发启动三种方式RecordSigGenerator_setContrlMode可以设置
  230. *
  231. * :
  232. *
  233. * RecordSigGenerator_setContrlMode将模式配置成CONTROLMODE_MANUAL_TRIGGER
  234. *
  235. * RecordSigGenerator_manualStart
  236. * RecordSigGenerator_manualStop
  237. *
  238. *
  239. * Timecode控制:
  240. *
  241. * Timecode控制启动RecordSigGenerator_setContrlMode将模式配置成CONTROLMODE_TIMECODE_TRIGGER
  242. * RecordSigGenerator_setTimecodeCtrlFlag方法使Timecode自动控制
  243. * 使Timecode自动控制停止
  244. * RecordSigGenerator_setAutoStartTimecode :
  245. * RecordSigGenerator_setAutoStopTimecode :
  246. * RecordSigGenerator_setTimecodeCtrlFlag :使使
  247. *
  248. * TTL控制:
  249. *
  250. * TTL触发启动RecordSigGenerator_setContrlMode将模式配置成CONTROLMODE_EXTERNALTTL_TRIGGER
  251. *
  252. * RecordSigGenerator_setExternalTTLTriggerSrc : TTL触发源INPUT_IF_TTL1->INPUT_IF_TTL4
  253. * RecordSigGenerator_setExternalTTLTriggerPolarity : (0:1:)
  254. *
  255. *
  256. *
  257. * RecordSigGenerator_setRecordExposureTime
  258. * RecordSigGenerator_setRecordExposureOffsetTime
  259. *
  260. *
  261. */
  262. virtual xs_error_code_t RecordSigGenerator_setContrlMode(ControlMode_t mode) = 0;
  263. virtual xs_error_code_t RecordSigGenerator_getContrlMode(ControlMode_t &mode) = 0;
  264. //------------------------------manual contrl mode-----------------------------------
  265. virtual xs_error_code_t RecordSigGenerator_manualStart() = 0;
  266. virtual xs_error_code_t RecordSigGenerator_manualStop() = 0;
  267. //------------------------------timecode contrl mode---------------------------------
  268. virtual xs_error_code_t RecordSigGenerator_setAutoStartTimecode(XsyncTimecode_t timecode) = 0;
  269. virtual xs_error_code_t RecordSigGenerator_setAutoStopTimecode(XsyncTimecode_t timecode) = 0;
  270. virtual xs_error_code_t RecordSigGenerator_getAutoStartTimecode(XsyncTimecode_t &timecode) = 0;
  271. virtual xs_error_code_t RecordSigGenerator_getAutoStopTimecode(XsyncTimecode_t &timecode) = 0;
  272. virtual xs_error_code_t RecordSigGenerator_setTimecodeCtrlFlag(uint32_t autoStart, uint32_t autoStop) = 0;
  273. virtual xs_error_code_t RecordSigGenerator_getTimecodeCtrlFlag(uint32_t &autoStart, uint32_t &autoStop) = 0;
  274. //------------------------------ttl level and edge contrl mode--------------------------------------
  275. virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerSrc(InputInterface_t ttlPortNum) = 0;
  276. virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerSrc(InputInterface_t &ttlPortNum) = 0;
  277. virtual xs_error_code_t RecordSigGenerator_setExternalTTLTriggerPolarity(uint32_t polarity) = 0;
  278. virtual xs_error_code_t RecordSigGenerator_getExternalTTLTriggerPolarity(uint32_t &polarity) = 0;
  279. virtual xs_error_code_t RecordSigGenerator_setTriggerEdge(TriggerEdge_t edge) = 0;
  280. virtual xs_error_code_t RecordSigGenerator_getTriggerEdge(TriggerEdge_t &edge) = 0;
  281. virtual xs_error_code_t RecordSigGenerator_getRecordState(uint32_t &state) = 0;
  282. virtual xs_error_code_t RecordSigGenerator_readTimecodeSnapshot(XsyncTimecode_t &timecode) = 0;
  283. /***********************************************************************************************
  284. * *
  285. ***********************************************************************************************/
  286. /**
  287. * @brief 4TTLTimecodeGenlockTTL输出()
  288. *
  289. *
  290. * TTL输出组件
  291. * :
  292. * SIGNAL_LOGIC0
  293. * SIGNAL_LOGIC1
  294. * SIGNAL_TTLIN1
  295. * SIGNAL_TTLIN2
  296. * SIGNAL_TTLIN3
  297. * SIGNAL_TTLIN4
  298. * SIGNAL_SYS_CLK_OUTPUT
  299. * SIGNAL_SYS_GENLOCK_OUTPUT
  300. * SIGNAL_SYS_TIMECODE_FREQ_OUTPUT
  301. * SIGNAL_BUSINESS_RECORD_SIG
  302. * SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG
  303. *
  304. * :
  305. * SIGNAL_BUSINESS_RECORD_SIG SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG
  306. * 012
  307. * 012
  308. *
  309. *
  310. */
  311. virtual xs_error_code_t TTLOutputModule_setSrcSigType(int index, SignalType_t source) = 0;
  312. virtual xs_error_code_t TTLOutputModule_getSrcSigType(int index, SignalType_t &source) = 0;
  313. virtual xs_error_code_t TTLOutputModule_setFreqDivision(int index, uint32_t div) = 0;
  314. virtual xs_error_code_t TTLOutputModule_getFreqDivision(int index, uint32_t &div) = 0;
  315. virtual xs_error_code_t TTLOutputModule_setFreqMultiplication(int index, uint32_t multi) = 0;
  316. virtual xs_error_code_t TTLOutputModule_getFreqMultiplication(int index, uint32_t &multi) = 0;
  317. virtual xs_error_code_t TTLOutputModule_readOutFreq(int index, float &freq) = 0;
  318. virtual xs_error_code_t TTLOutputModule_readInFreq(int index, float &freq) = 0;
  319. virtual xs_error_code_t TTLOutputModule_setPolarity(int index, uint32_t polarity) = 0;
  320. virtual xs_error_code_t TTLOutputModule_getPolarity(int index, uint32_t &polarity) = 0;
  321. virtual xs_error_code_t TTLOutputModule_setTriggerEdge(int index, TriggerEdge_t edge) = 0;
  322. virtual xs_error_code_t TTLOutputModule_getTriggerEdge(int index, TriggerEdge_t &edge) = 0;
  323. virtual xs_error_code_t TTLOutputModule_setPluseWidth(int index, uint32_t us) = 0;
  324. virtual xs_error_code_t TTLOutputModule_getPluseWidth(int index, uint32_t &us) = 0;
  325. virtual xs_error_code_t TTLOutputModule_setOffsetTime(int index, uint32_t us) = 0;
  326. virtual xs_error_code_t TTLOutputModule_getOffsetTime(int index, uint32_t &us) = 0;
  327. /*******************************************************************************
  328. * *
  329. *******************************************************************************/
  330. virtual xs_error_code_t Utils_readSigFreq(SignalType_t sig, float &freq) = 0;
  331. };
  332. } // namespace xsync