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.

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