diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index f0a485f..92b355c 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index 306fc9e..9ac4c07 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -13,7 +13,6 @@
"./Drivers/CMSIS/Include",
"C:/ST/STM32CubeIDE_1.13.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/arm-none-eabi/include",
"./usrc/",
- "./sdk",
"Middlewares/Third_Party/LwIP/src/include/",
"LWIP/Target/",
"LWIP/App/",
@@ -25,6 +24,7 @@
"USE_HAL_DRIVER",
"STM32F407xx"
],
+ "compilerPath": "C:/ST/STM32CubeIDE_1.13.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/arm-none-eabi-g++.exe",
"intelliSenseMode": "${default}"
}
],
diff --git a/.vscode/settings.json b/.vscode/settings.json
index f59270e..4cd6516 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -97,7 +97,14 @@
"fpga_if.h": "c",
"rng.h": "c",
"report_generator_service.h": "c",
- "task_level_config.h": "c"
+ "task_level_config.h": "c",
+ "charconv": "c",
+ "format": "c",
+ "ranges": "c",
+ "xutility": "c",
+ "cstring": "cpp",
+ "optional": "cpp",
+ "span": "cpp"
},
"files.autoGuessEncoding": false,
"files.encoding": "gbk"
diff --git a/iflytop_xsync_protocol b/iflytop_xsync_protocol
index 055f967..6f8c0e9 160000
--- a/iflytop_xsync_protocol
+++ b/iflytop_xsync_protocol
@@ -1 +1 @@
-Subproject commit 055f9672881d39e8fddcec7bc4e0a164245c797f
+Subproject commit 6f8c0e94e9d830196ae42bfa6ea7dc447fe230ad
diff --git a/usrc/base_service/fpga_if.c b/usrc/base_service/fpga_if.c
index 4191dcf..14b75fd 100644
--- a/usrc/base_service/fpga_if.c
+++ b/usrc/base_service/fpga_if.c
@@ -1,5 +1,6 @@
#include "fpga_if.h"
+#include "xsync_regs.hpp"
/**
* @brief fpga_if初始化
*/
@@ -41,48 +42,13 @@ void fpga_if_init() { //
xs_gpio_write(&fpga_if.reset_pin_io, true);
#endif
}
-/**
- * @brief 读取当前timecode
- *
- * @param timecode0
- * @param timecode1
- */
-
-static uint8_t _fpga_if_get_timecode_u8(uint8_t add) {
- xs_gpio_write(&fpga_if.timecode_add[0], add & 0x01);
- xs_gpio_write(&fpga_if.timecode_add[1], add & 0x02);
- xs_gpio_write(&fpga_if.timecode_add[2], add & 0x04);
- xs_gpio_write(&fpga_if.timecode_add[3], add & 0x08);
-
- xs_delay_us(2);
- uint8_t data = 0;
- for (size_t i = 0; i < 8; i++) {
- data |= xs_gpio_read(&fpga_if.timecode_data[i]) << i;
- }
- return data;
-}
void fpga_if_get_timecode(uint32_t *timecode0, uint32_t *timecode1) {
- // *timecode0 = 1;
- // *timecode1 = 2;
-#if 0
- *timecode0 = 0;
- *timecode1 = 0;
-
- *timecode0 |= fpga_if_get_timecode_u8(0) << 0;
- *timecode0 |= fpga_if_get_timecode_u8(1) << 8;
- *timecode0 |= fpga_if_get_timecode_u8(2) << 16;
- *timecode0 |= fpga_if_get_timecode_u8(3) << 24;
-
- *timecode1 |= fpga_if_get_timecode_u8(4) << 0;
- *timecode1 |= fpga_if_get_timecode_u8(5) << 8;
-#endif
- fpga_if_spi_read_data_02(577, timecode0);
- fpga_if_spi_read_data_02(578, timecode1);
-
+ fpga_if_spi_read_data_02(sys_timecode_data0, timecode0);
+ fpga_if_spi_read_data_02(sys_timecode_data1, timecode1);
return;
}
-void fpga_if_get_workstate(uint32_t *workstate) {
- fpga_if_spi_read_data_02(60, workstate);
+void fpga_if_get_record_state(uint32_t *recordstate) {
+ fpga_if_spi_read_data_02(record_sig_gen_record_state, recordstate);
return;
}
/**
diff --git a/usrc/base_service/fpga_if.h b/usrc/base_service/fpga_if.h
index 85b08d9..e40bf4d 100644
--- a/usrc/base_service/fpga_if.h
+++ b/usrc/base_service/fpga_if.h
@@ -78,7 +78,7 @@ void fpga_if_spi_write_data_02(uint32_t add, uint32_t txdata, uint32_t *rxdata);
*/
void fpga_if_spi_read_data_02(uint32_t add, uint32_t *rxdata);
-void fpga_if_get_workstate(uint32_t *workstate);
+void fpga_if_get_record_state(uint32_t *workstate);
fpga_if_t *fpga_if_get_instance();
diff --git a/usrc/base_service/xsync_regs.hpp b/usrc/base_service/xsync_regs.hpp
new file mode 100644
index 0000000..32e416f
--- /dev/null
+++ b/usrc/base_service/xsync_regs.hpp
@@ -0,0 +1,260 @@
+#pragma once
+#define REG_ADD_OFF_STM32 (0x0000)
+#define REG_ADD_OFF_STM32_CONFIG_START_ADD (0x0010)
+
+#define REGADDOFF__FPGA_INFO (0x0020)
+#define REGADDOFF__TTLIN (0x0100)
+#define REGADDOFF__EXTERNAL_TIMECODE (0x0120)
+#define REGADDOFF__EXTERNAL_GENLOCK (0x0130)
+#define REGADDOFF__INTERNAL_TIMECODE (0x0300)
+#define REGADDOFF__INTERNAL_GENLOCK (0x0310)
+#define REGADDOFF__INTERNAL_CLOCK (0x0320)
+#define REGADDOFF__TTLOUT1 (0x0200)
+#define REGADDOFF__TTLOUT2 (0x0210)
+#define REGADDOFF__TTLOUT3 (0x0220)
+#define REGADDOFF__TTLOUT4 (0x0230)
+#define REGADDOFF__TIMECODE_OUT (0x0240)
+#define REGADDOFF__GENLOCK_OUT (0x0250)
+#define REGADDOFF__CAMERA_SYNC_OUT (0x0260)
+#define REGADDOFF__SYS_TIMECODE (0x0400)
+#define REGADDOFF__SYS_GENLOCK (0x0410)
+#define REGADDOFF__SYS_CLOCK (0x0420)
+#define REGADDOFF__RECORD_SIG_GENERATOR (0x0500)
+
+typedef enum {
+ /**
+ * @brief
+ * REG 0(16) 设备信息基础寄存器
+ */
+ ksoftware_version = 0,
+ kmanufacturer0 = 1,
+ kmanufacturer1 = 2,
+ kproduct_type_id = 3,
+ ksn_id0 = 4,
+ ksn_id1 = 5,
+ ksn_id2 = 6,
+ kmac0 = 7,
+ kmac1 = 8,
+
+ /**
+ * @brief
+ * REG 16(32) STM32配置寄存器0
+ */
+ kstm32_obtaining_ip_mode = REG_ADD_OFF_STM32_CONFIG_START_ADD + 0,
+ kstm32_ip = REG_ADD_OFF_STM32_CONFIG_START_ADD + 1,
+ kstm32_gw = REG_ADD_OFF_STM32_CONFIG_START_ADD + 2,
+ kstm32_netmask = REG_ADD_OFF_STM32_CONFIG_START_ADD + 3,
+ kstm32_config0 = REG_ADD_OFF_STM32_CONFIG_START_ADD + 4, // bit0: timecode report enable, bit1: camera sync report enable
+ kstm32_camera_sync_signal_count = REG_ADD_OFF_STM32_CONFIG_START_ADD + 5, // 写任意数值之后清零
+ kstm32_camera_sync_signal_count_report_period = REG_ADD_OFF_STM32_CONFIG_START_ADD + 6, // 上报周期,单位为帧数
+
+ kstm32_action0 = REG_ADD_OFF_STM32_CONFIG_START_ADD + 14, // action reg
+ kstm32_action_val0 = REG_ADD_OFF_STM32_CONFIG_START_ADD + 15, // action val reg
+
+ /**
+ * @brief
+ * REG 48(32) FPGA配置寄存器0
+ */
+ kfpga_info_reg0 = REGADDOFF__FPGA_INFO + 0,
+ kfpga_info_reg1 = REGADDOFF__FPGA_INFO + 1,
+ kfpga_info_reg2 = REGADDOFF__FPGA_INFO + 2,
+ kfpga_info_reg3 = REGADDOFF__FPGA_INFO + 3,
+ kfpga_info_reg4 = REGADDOFF__FPGA_INFO + 4,
+ kfpga_info_reg5 = REGADDOFF__FPGA_INFO + 5,
+ kfpga_info_reg6 = REGADDOFF__FPGA_INFO + 6,
+ kfpga_info_reg7 = REGADDOFF__FPGA_INFO + 7,
+ kfpga_info_reg8 = REGADDOFF__FPGA_INFO + 8,
+ kfpga_info_reg9 = REGADDOFF__FPGA_INFO + 9,
+ kfpga_info_rega = REGADDOFF__FPGA_INFO + 10,
+ kfpga_info_regb = REGADDOFF__FPGA_INFO + 11,
+ kfpga_info_regc = REGADDOFF__FPGA_INFO + 12,
+ kfpga_info_regd = REGADDOFF__FPGA_INFO + 13,
+ kfpga_info_rege = REGADDOFF__FPGA_INFO + 14,
+ kfpga_info_regf = REGADDOFF__FPGA_INFO + 15,
+
+ /*******************************************************************************
+ * TTL输入模块 *
+ *******************************************************************************/
+
+ k_ttlin_module = REGADDOFF__TTLIN + 0,
+ k_ttlin_en_reg = REGADDOFF__TTLIN + 1,
+ k_ttlin1_freq_detector_reg = REGADDOFF__TTLIN + 2,
+ k_ttlin2_freq_detector_reg = REGADDOFF__TTLIN + 3,
+ k_ttlin3_freq_detector_reg = REGADDOFF__TTLIN + 4,
+ k_ttlin4_freq_detector_reg = REGADDOFF__TTLIN + 5,
+ k_ttlin1_filter_factor_reg = REGADDOFF__TTLIN + 6,
+ k_ttlin2_filter_factor_reg = REGADDOFF__TTLIN + 7,
+ k_ttlin3_filter_factor_reg = REGADDOFF__TTLIN + 8,
+ k_ttlin4_filter_factor_reg = REGADDOFF__TTLIN + 9,
+
+ /*******************************************************************************
+ * TTL输出模块 *
+ *******************************************************************************/
+
+ kreg_ttlout1_module = REGADDOFF__TTLOUT1 + 0,
+ kreg_ttlout1_signal_process_mode = REGADDOFF__TTLOUT1 + 1,
+ kreg_ttlout1_input_signal_select = REGADDOFF__TTLOUT1 + 2,
+ kreg_ttlout1_pllout_freq_division_ctrl = REGADDOFF__TTLOUT1 + 3,
+ kreg_ttlout1_pllout_freq_multiplication_ctrl = REGADDOFF__TTLOUT1 + 4,
+ kreg_ttlout1_pllout_polarity_ctrl = REGADDOFF__TTLOUT1 + 5,
+ kreg_ttlout1_pllout_trigger_edge_select = REGADDOFF__TTLOUT1 + 6,
+ kreg_ttlout1_forward_mode_polarity_ctrl = REGADDOFF__TTLOUT1 + 7,
+ kreg_ttlout1_placeholder0 = REGADDOFF__TTLOUT1 + 8,
+ kreg_ttlout1_freq_detect_bias = REGADDOFF__TTLOUT1 + 9,
+ kreg_ttlout1_sig_in_freq_detect = REGADDOFF__TTLOUT1 + 0xE,
+ kreg_ttlout1_sig_out_freq_detect = REGADDOFF__TTLOUT1 + 0xF,
+
+ kreg_ttlout2_module = REGADDOFF__TTLOUT2 + 0,
+ kreg_ttlout2_signal_process_mode = REGADDOFF__TTLOUT2 + 1,
+ kreg_ttlout2_input_signal_select = REGADDOFF__TTLOUT2 + 2,
+ kreg_ttlout2_pllout_freq_division_ctrl = REGADDOFF__TTLOUT2 + 3,
+ kreg_ttlout2_pllout_freq_multiplication_ctrl = REGADDOFF__TTLOUT2 + 4,
+ kreg_ttlout2_pllout_polarity_ctrl = REGADDOFF__TTLOUT2 + 5,
+ kreg_ttlout2_pllout_trigger_edge_select = REGADDOFF__TTLOUT2 + 6,
+ kreg_ttlout2_forward_mode_polarity_ctrl = REGADDOFF__TTLOUT2 + 7,
+ kreg_ttlout2_placeholder0 = REGADDOFF__TTLOUT2 + 8,
+ kreg_ttlout2_freq_detect_bias = REGADDOFF__TTLOUT2 + 9,
+ kreg_ttlout2_sig_in_freq_detect = REGADDOFF__TTLOUT2 + 0xE,
+ kreg_ttlout2_sig_out_freq_detect = REGADDOFF__TTLOUT2 + 0xF,
+
+ kreg_ttlout3_module = REGADDOFF__TTLOUT3 + 0,
+ kreg_ttlout3_signal_process_mode = REGADDOFF__TTLOUT3 + 1,
+ kreg_ttlout3_input_signal_select = REGADDOFF__TTLOUT3 + 2,
+ kreg_ttlout3_pllout_freq_division_ctrl = REGADDOFF__TTLOUT3 + 3,
+ kreg_ttlout3_pllout_freq_multiplication_ctrl = REGADDOFF__TTLOUT3 + 4,
+ kreg_ttlout3_pllout_polarity_ctrl = REGADDOFF__TTLOUT3 + 5,
+ kreg_ttlout3_pllout_trigger_edge_select = REGADDOFF__TTLOUT3 + 6,
+ kreg_ttlout3_forward_mode_polarity_ctrl = REGADDOFF__TTLOUT3 + 7,
+ kreg_ttlout3_placeholder0 = REGADDOFF__TTLOUT3 + 8,
+ kreg_ttlout3_freq_detect_bias = REGADDOFF__TTLOUT3 + 9,
+ kreg_ttlout3_sig_in_freq_detect = REGADDOFF__TTLOUT3 + 0xE,
+ kreg_ttlout3_sig_out_freq_detect = REGADDOFF__TTLOUT3 + 0xF,
+
+ kreg_ttlout4_module = REGADDOFF__TTLOUT4 + 0,
+ kreg_ttlout4_signal_process_mode = REGADDOFF__TTLOUT4 + 1,
+ kreg_ttlout4_input_signal_select = REGADDOFF__TTLOUT4 + 2,
+ kreg_ttlout4_pllout_freq_division_ctrl = REGADDOFF__TTLOUT4 + 3,
+ kreg_ttlout4_pllout_freq_multiplication_ctrl = REGADDOFF__TTLOUT4 + 4,
+ kreg_ttlout4_pllout_polarity_ctrl = REGADDOFF__TTLOUT4 + 5,
+ kreg_ttlout4_pllout_trigger_edge_select = REGADDOFF__TTLOUT4 + 6,
+ kreg_ttlout4_forward_mode_polarity_ctrl = REGADDOFF__TTLOUT4 + 7,
+ kreg_ttlout4_placeholder0 = REGADDOFF__TTLOUT4 + 8,
+ kreg_ttlout4_freq_detect_bias = REGADDOFF__TTLOUT4 + 9,
+ kreg_ttlout4_sig_in_freq_detect = REGADDOFF__TTLOUT4 + 0xE,
+ kreg_ttlout4_sig_out_freq_detect = REGADDOFF__TTLOUT4 + 0xF,
+
+ /*******************************************************************************
+ * TIMECODE输入模块 *
+ *******************************************************************************/
+
+ external_timecode_module = REGADDOFF__EXTERNAL_TIMECODE + 0,
+ external_timecode_sig_selt = REGADDOFF__EXTERNAL_TIMECODE + 1,
+ external_timecode_format = REGADDOFF__EXTERNAL_TIMECODE + 2,
+ external_timecode_code0 = REGADDOFF__EXTERNAL_TIMECODE + 3,
+ external_timecode_code1 = REGADDOFF__EXTERNAL_TIMECODE + 4,
+
+ /*******************************************************************************
+ * 内部TIMECODE模块 *
+ *******************************************************************************/
+
+ internal_timecode_module = REGADDOFF__INTERNAL_TIMECODE + 0,
+ internal_timecode_en = REGADDOFF__INTERNAL_TIMECODE + 1,
+ internal_timecode_format = REGADDOFF__INTERNAL_TIMECODE + 2,
+ internal_timecode_data0 = REGADDOFF__INTERNAL_TIMECODE + 3,
+ internal_timecode_data1 = REGADDOFF__INTERNAL_TIMECODE + 4,
+
+ /*******************************************************************************
+ * SYS_TIMECODE *
+ *******************************************************************************/
+
+ sys_timecode_module = REGADDOFF__SYS_TIMECODE,
+ sys_timecode_select = REGADDOFF__SYS_TIMECODE + 1,
+ sys_timecode_format = REGADDOFF__SYS_TIMECODE + 2,
+ sys_timecode_data0 = REGADDOFF__SYS_TIMECODE + 3,
+ sys_timecode_data1 = REGADDOFF__SYS_TIMECODE + 4,
+
+ /*******************************************************************************
+ * TIMECODE输出模块 *
+ *******************************************************************************/
+
+ timecode_output_module = REGADDOFF__TIMECODE_OUT + 0,
+ timecode_output_timecode0 = REGADDOFF__TIMECODE_OUT + 1,
+ timecode_output_timecode1 = REGADDOFF__TIMECODE_OUT + 2,
+ timecode_output_timecode_format = REGADDOFF__TIMECODE_OUT + 3,
+ timecode_output_bnc_outut_level_select = REGADDOFF__TIMECODE_OUT + 4,
+ timecode_output_headphone_outut_level_select = REGADDOFF__TIMECODE_OUT + 5,
+
+ /*******************************************************************************
+ * 外部GENLOCK *
+ *******************************************************************************/
+
+ external_genlock_module = REGADDOFF__EXTERNAL_GENLOCK + 0,
+ external_genlock_freq_detect_bias = REGADDOFF__EXTERNAL_GENLOCK + 1,
+ external_genlock_freq = REGADDOFF__EXTERNAL_GENLOCK + 2,
+
+ /*******************************************************************************
+ * 内部GENLOCK *
+ *******************************************************************************/
+ internal_genlock_module = REGADDOFF__INTERNAL_GENLOCK + 0,
+ internal_genlock_ctrl_mode = REGADDOFF__INTERNAL_GENLOCK + 1,
+ internal_genlock_en = REGADDOFF__INTERNAL_GENLOCK + 2,
+ internal_genlock_format = REGADDOFF__INTERNAL_GENLOCK + 3,
+ internal_genlock_freq = REGADDOFF__INTERNAL_GENLOCK + 4,
+
+ /*******************************************************************************
+ * SYSGENLOCK *
+ *******************************************************************************/
+ sys_genlock_module = REGADDOFF__SYS_GENLOCK,
+ sys_genlock_source = REGADDOFF__SYS_GENLOCK + 1,
+ sys_genlock_freq_detect_bias = REGADDOFF__SYS_GENLOCK + 2,
+ sys_genlock_freq = REGADDOFF__SYS_GENLOCK + 3,
+
+ /*******************************************************************************
+ * 内部CLOCK *
+ *******************************************************************************/
+
+ internal_clock_module = REGADDOFF__INTERNAL_CLOCK + 0,
+ internal_clock_ctrl_mode = REGADDOFF__INTERNAL_CLOCK + 1,
+ internal_clock_en = REGADDOFF__INTERNAL_CLOCK + 2,
+ internal_clock_freq = REGADDOFF__INTERNAL_CLOCK + 3,
+
+ /*******************************************************************************
+ * SYSCLOCK *
+ *******************************************************************************/
+ sys_clock_module = REGADDOFF__SYS_CLOCK,
+ sys_clock_source = REGADDOFF__SYS_CLOCK + 1,
+ sys_clock_freq_division_ctrl = REGADDOFF__SYS_CLOCK + 2,
+ sys_clock_freq_multiplication_ctrl = REGADDOFF__SYS_CLOCK + 3,
+ sys_clock_freq_detect_bias = REGADDOFF__SYS_CLOCK + 4,
+ sys_clock_trigger_edge_select = REGADDOFF__SYS_CLOCK + 5,
+ sys_clock_infreq_detect = REGADDOFF__SYS_CLOCK + 0xE,
+ sys_clock_outfreq_detect = REGADDOFF__SYS_CLOCK + 0xF,
+
+ /*******************************************************************************
+ * record_sig_gen *
+ *******************************************************************************/
+ record_sig_gen_module = REGADDOFF__RECORD_SIG_GENERATOR + 0,
+ record_sig_gen_ctrl_control_mode = REGADDOFF__RECORD_SIG_GENERATOR + 1,
+ record_sig_gen_timecode_start0 = REGADDOFF__RECORD_SIG_GENERATOR + 2,
+ record_sig_gen_timecode_start1 = REGADDOFF__RECORD_SIG_GENERATOR + 3,
+ record_sig_gen_timecode_stop0 = REGADDOFF__RECORD_SIG_GENERATOR + 4,
+ record_sig_gen_timecode_stop1 = REGADDOFF__RECORD_SIG_GENERATOR + 5,
+ record_sig_gen_timecode_control_flag = REGADDOFF__RECORD_SIG_GENERATOR + 6,
+
+ record_sig_gen_ttlin_trigger_sig_source = REGADDOFF__RECORD_SIG_GENERATOR + 7,
+ record_sig_gen_ttlin_trigger_level = REGADDOFF__RECORD_SIG_GENERATOR + 8,
+ record_sig_gen_exposure_time = REGADDOFF__RECORD_SIG_GENERATOR + 9,
+ record_sig_gen_exposure_offset_time = REGADDOFF__RECORD_SIG_GENERATOR + 10,
+ record_sig_gen_manual_ctrl = REGADDOFF__RECORD_SIG_GENERATOR + 11,
+
+ record_sig_gen_timecode_snapshot0 = REGADDOFF__RECORD_SIG_GENERATOR + 13,
+ record_sig_gen_timecode_snapshot1 = REGADDOFF__RECORD_SIG_GENERATOR + 14,
+ record_sig_gen_record_state = REGADDOFF__RECORD_SIG_GENERATOR + 15,
+
+ /*******************************************************************************
+ * camera_sync_module *
+ *******************************************************************************/
+ camera_sync_module = REGADDOFF__CAMERA_SYNC_OUT + 0,
+ camera_sync_pulse_mode_valid_len = REGADDOFF__CAMERA_SYNC_OUT + 1,
+
+} RegAdd_t;
diff --git a/usrc/service/reg_manager.c b/usrc/service/reg_manager.c
index f53a9c3..52df038 100644
--- a/usrc/service/reg_manager.c
+++ b/usrc/service/reg_manager.c
@@ -73,9 +73,7 @@ uint32_t reg_manager_read_reg(uint32_t addr) {
readbak = config_get()->config0;
} else if (addr == kxsync_reg_stm32_camera_sync_signal_count) {
readbak = ReportGeneratorService_xsync_get_count();
- } else if (addr == kxsync_reg_stm32_camera_sync_signal_report_period) {
- readbak = ReportGeneratorService_get_camera_sync_code_report_period();
- }
+ }
/*******************************************************************************
* ACTION *
@@ -129,10 +127,7 @@ uint32_t reg_manager_write_reg(uint32_t addr, uint32_t value) {
} else if (addr == kxsync_reg_stm32_camera_sync_signal_count) {
ReportGeneratorService_xsync_set_count(value);
readbak = ReportGeneratorService_xsync_get_count();
- } else if (addr == kxsync_reg_stm32_camera_sync_signal_report_period) {
- readbak = ReportGeneratorService_set_camera_sync_code_report_period(value);
}
-
/*******************************************************************************
* ACTION *
*******************************************************************************/
diff --git a/usrc/service/report_generator_service.c b/usrc/service/report_generator_service.c
index 074eef1..34d0a22 100644
--- a/usrc/service/report_generator_service.c
+++ b/usrc/service/report_generator_service.c
@@ -4,6 +4,7 @@
//
#include "base_service/fpga_if.h"
#include "base_service/task_level_config.h"
+#include "base_service/xsync_regs.hpp"
#include "iflytop_xsync\xs_udp.h"
#include "reg_manager.h"
@@ -13,13 +14,13 @@ static udp_broadcast_handler_t m_udp_camera_timecode_sender; //
osThreadId timecode_report_thread_id;
osThreadId xync_signal_report_thread_id;
-static uint32_t m_sync_count = 0;
-static uint32_t m_camera_sync_packet_report_period = 1;
+static uint32_t m_sync_count = 0;
+// static uint32_t m_camera_sync_packet_report_period = 1;
static uint32_t m_xsync_workstate_start_sig_irq_pin_off;
static uint32_t m_timecode_trigger_input_off;
static uint32_t m_xync_trigger_input_off;
-static uint32_t m_xync_trigger_input_off;
+static uint32_t m_xyns_camera_sync_packet_last_report_tp;
#define TAG "timecode"
/**
* @brief 构建并发送时间码数据包
@@ -37,12 +38,16 @@ static void create_and_send_timecode(uint32_t timecode0, uint32_t timecode1) {
txpacket->data[1] = timecode1;
xs_udp_broadcast(&m_udp_camera_timecode_sender, IFLYTOP_XSYNC_EVENT_REPORT_PC_PORT, txbuf, sizeof(iflytop_xsync_event_report_packet_t) + 8);
}
-static void create_and_send_sync_workstate_packet(uint32_t workstate) {
+static void create_and_send_sync_record_state_packet(uint32_t workstate, uint32_t timecode0, uint32_t timecode1) {
static uint8_t txbuf[256];
- iflytop_xsync_event_report_packet_t *txpacket = (iflytop_xsync_event_report_packet_t *)txbuf;
- txpacket->eventid = kxsync_work_state_report_event;
- txpacket->data[0] = workstate;
- xs_udp_broadcast(&m_udp_camera_timecode_sender, IFLYTOP_XSYNC_EVENT_REPORT_PC_PORT, txbuf, sizeof(iflytop_xsync_event_report_packet_t) + 4);
+ uint32_t packetdatalen = 3;
+ iflytop_xsync_event_report_packet_t *txpacket = (iflytop_xsync_event_report_packet_t *)txbuf;
+ txpacket->eventid = kxsync_work_state_report_event;
+ txpacket->data[0] = workstate;
+ txpacket->data[1] = timecode0;
+ txpacket->data[2] = timecode1;
+
+ xs_udp_broadcast(&m_udp_camera_timecode_sender, IFLYTOP_XSYNC_EVENT_REPORT_PC_PORT, txbuf, sizeof(iflytop_xsync_event_report_packet_t) + 4 * packetdatalen);
}
/**
* @brief 构建并发送相机同步数据包
@@ -65,15 +70,26 @@ static void create_and_send_camera_sync_msg(uint32_t count) {
static void timecode_report_thread(void const *argument) {
while (true) {
- osEvent signal = osSignalWait(0x03, osWaitForever);
+ osEvent signal = osSignalWait(0x07, osWaitForever);
if (signal.value.signals & 0x01) {
uint32_t timecode0, timecode1;
fpga_if_get_timecode(&timecode0, &timecode1);
create_and_send_timecode(timecode0, timecode1);
} else if (signal.value.signals & 0x02) {
- uint32_t workstate;
- fpga_if_get_workstate(&workstate);
- create_and_send_sync_workstate_packet(workstate);
+ // 开始录制
+ uint32_t timecode0 = 0;
+ uint32_t timecode1 = 0;
+ fpga_if_spi_read_data_02(record_sig_gen_timecode_snapshot0, &timecode0);
+ fpga_if_spi_read_data_02(record_sig_gen_timecode_snapshot1, &timecode1);
+ create_and_send_sync_record_state_packet(1, timecode0, timecode1);
+ } else if (signal.value.signals & 0x04) {
+ // 结束录制
+ uint32_t timecode0 = 0;
+ uint32_t timecode1 = 0;
+ fpga_if_spi_read_data_02(record_sig_gen_timecode_snapshot0, &timecode0);
+ fpga_if_spi_read_data_02(record_sig_gen_timecode_snapshot1, &timecode1);
+ create_and_send_sync_record_state_packet(0, timecode0, timecode1);
+ m_sync_count = 0;
}
}
}
@@ -81,10 +97,18 @@ static void xync_signal_report_thread(void const *argument) {
while (true) {
osEvent signal = osSignalWait(0x01, osWaitForever);
if (signal.value.signals == 0x01) {
- if (m_sync_count % m_camera_sync_packet_report_period == 0) {
+ if (m_sync_count == 0) {
+ m_xyns_camera_sync_packet_last_report_tp = HAL_GetTick();
+ create_and_send_camera_sync_msg(m_sync_count);
+ m_sync_count++;
+ } else if (xs_has_passedms(m_xyns_camera_sync_packet_last_report_tp) >= 998) {
+ // TODO:此处这么写,当拍摄频率大于500HZ的时候,就不能完全满足刚好卡在1s上报一次消息
+ m_xyns_camera_sync_packet_last_report_tp = HAL_GetTick();
create_and_send_camera_sync_msg(m_sync_count);
+ m_sync_count++;
+ } else {
+ m_sync_count++;
}
- m_sync_count++;
}
// osSignalClear(xync_signal_report_thread_id, 0x01);
}
@@ -92,13 +116,18 @@ static void xync_signal_report_thread(void const *argument) {
void ReportGeneratorService_irq_trigger(uint16_t gpiopin) {
if (gpiopin == m_timecode_trigger_input_off) {
+ // timecode trigger sig
osSignalSet(timecode_report_thread_id, 0x01);
}
if (m_xsync_workstate_start_sig_irq_pin_off == gpiopin) {
- osSignalSet(timecode_report_thread_id, 0x02);
+ if (xs_gpio_read(&fpga_if_get_instance()->xsync_workstate_start_sig_irq_io)) {
+ osSignalSet(timecode_report_thread_id, 0x02); // 开始工作信号
+ } else {
+ osSignalSet(timecode_report_thread_id, 0x04); // 结束工作信号
+ }
}
if (gpiopin == m_xync_trigger_input_off) {
- // printf("2trigger\n");
+ // 相机同步信号
osSignalSet(xync_signal_report_thread_id, 0x01);
}
}
@@ -124,10 +153,3 @@ void ReportGeneratorService_init() {
void ReportGeneratorService_xsync_set_count(uint32_t count) { m_sync_count = count; }
uint32_t ReportGeneratorService_xsync_get_count(void) { return m_sync_count; }
-uint32_t ReportGeneratorService_set_camera_sync_code_report_period(uint32_t period) {
- if (period == 0) period = 1;
- m_camera_sync_packet_report_period = period;
- return period;
-}
-
-uint32_t ReportGeneratorService_get_camera_sync_code_report_period(void) { return m_camera_sync_packet_report_period; }