#include #include // #include "base_service/base_service.h" #include "base_service/fpga_if.h" #include "service/extern_if_service.h" #include "service/network_service.h" #include "service/reg_manager.h" #include "service/report_generator_service.h" // #include "iwdg.h" #define TAG "main" using namespace std; extern void umain(); extern "C" { extern void MX_LWIP_Init(void); void StartDefaultTask(void const* argument) { umain(); } } /******************************************************************************* * MAIN * *******************************************************************************/ /** * @brief * | extern_if_service | * ======================================== * | reg_manager | * config_service ======================================== * | report_generator | device_info | * =================== ============== * | fpage_if | * ======================================== * */ xs_gpio_t m_debug_led; xs_gpio_t m_factory_reset_key; xs_gpio_t m_power_led0; xs_gpio_t m_power_led1; xs_gpio_t m_power_led2; void power_light_init() { xs_gpio_init_as_output(&m_power_led0, PB6, kxs_gpio_nopull, false, true); // r xs_gpio_init_as_output(&m_power_led1, PB7, kxs_gpio_nopull, false, true); // g xs_gpio_init_as_output(&m_power_led2, PB8, kxs_gpio_nopull, false, true); // b } void power_light_ctrl(bool state) { xs_gpio_write(&m_power_led0, 0); xs_gpio_write(&m_power_led1, state); xs_gpio_write(&m_power_led2, state); } extern "C" { void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { ReportGeneratorService_irq_trigger(GPIO_Pin); } } void debug_light_ctrl() { static uint32_t lastcall = 0; static bool light_status = false; if (xs_has_passedms(lastcall) > 80) { light_status = !light_status; xs_gpio_write(&m_debug_led, light_status); if (network_service_network_is_ready()) { power_light_ctrl(1); } else { power_light_ctrl(light_status); } lastcall = xs_get_ticket(); } } void factory_reset_key_detect() { static uint32_t reset_key_trigger_tp = 0; static bool reset_key_triggered = false; if (!reset_key_triggered) { if (xs_gpio_read(&m_factory_reset_key)) { reset_key_trigger_tp = xs_get_ticket(); reset_key_triggered = true; } } if (reset_key_triggered) { if (!xs_gpio_read(&m_factory_reset_key)) { reset_key_triggered = false; } else { if (xs_has_passedms(reset_key_trigger_tp) > 3000) { ZLOGI(TAG, "factory reset key triggered"); config_factory_reset(); // m_power_led while (xs_gpio_read(&m_factory_reset_key)) { power_light_ctrl(false); osDelay(1000); power_light_ctrl(true); osDelay(1000); } ZLOGI(TAG, "system reset"); NVIC_SystemReset(); } } // } } // PB6 // PB7 // PB8 void umain() { XS_LOGI(TAG, "%s:%d-%d-%d", PC_PROJECT_NAME, VERSION_MAIN, VERSION_SUB, VERSION_FIX); XS_LOGI(TAG, "sn: %02d%02d%04d", xs_device_info_get()->year, xs_device_info_get()->weak, xs_device_info_get()->index); // XS_LOGI(TAG, "sn: %x:%x:%x", sn.sn0, sn.sn1, sn.sn2); /** * @brief * 1. 初始化调试指示灯 * 2. 初始化电源指示灯 * 3. 初始化工厂复位按键 */ xs_gpio_init_as_output(&m_debug_led, PC_DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false); // xs_gpio_init_as_output(&m_power_led, POWER_LED_PIN, kxs_gpio_nopull, false, true); power_light_init(); xs_gpio_init_as_input(&m_factory_reset_key, FACTORY_RESET_KEY, kxs_gpio_pullup, kxs_gpio_no_irq, true); // m_power_led /** * @brief 配置初始化 */ config_init(); /** * @brief 初始化网络服务 */ network_service_init(); /** * @brief fpga_interface init */ fpga_if_init(); /** * @brief reg_manager init */ reg_manager_init(); /** * @brief extern_if_service init * * 解析并处理外部指令 */ osDelay(1000); extern_if_service_init(); ReportGeneratorService_init(fpga_if_get_instance()->timecode_irq_pin, fpga_if_get_instance()->camera_sync_code_irq_pin); MX_IWDG_Init(); ZLOGI(TAG, "system init done"); int32_t count = 0; while (true) { // HAL_SPI_Transmit(&hspi1, (uint8_t*)"hello", 5, 1000); // HAL_SPI_Transmit(&hspi2, (uint8_t*)"hello", 5, 1000); osDelay(10); debug_light_ctrl(); factory_reset_key_detect(); network_service_schedule(); HAL_IWDG_Refresh(&hiwdg); // uint32_t val; // fpga_if_spi_read_data_02(0x0020, &val); // ZLOGI(TAG, "fpga_if_spi_read_data_02 %x", val); // if (xs_has_passedms(0) >= * 60 * 60 * 1000) { // 限制客户使用时长 // reset_pin_io // NVIC_SystemReset(); // } // ZLOGI(TAG,"factory_reset_key_state %d",xs_gpio_read(&m_factory_reset_key)); // osDelay(10); // fpga_if_spi_write_data_01(33, count, &rxdata); // osDelay(10); // fpga_if_spi_write_data_01(34, count, &rxdata); // osDelay(10); // fpga_if_spi_write_data_01(35, count, &rxdata); // osDelay(10); // fpga_if_spi_write_data_01(36, count, &rxdata); // osDelay(10); // if(count!=rxdata){ // ZLOGI(TAG, "fpga_if_spi_write_data_01 error count: %d, rxdata: %d", count, rxdata); // } // count++; // ZLOGI(TAG, "fpga_if_init: %d", xs_gpio_read(&fpga_if_get_instance()->xsync_workstate_start_sig_irq_io)); // ZLOGI(TAG, "rxdata: %x", rxdata); } }