|
|
@ -36,16 +36,75 @@ void StartDefaultTask(void const* argument) { umain(); } |
|
|
|
*/ |
|
|
|
|
|
|
|
xs_gpio_t m_debug_led; |
|
|
|
xs_gpio_t m_factory_reset_key; |
|
|
|
xs_gpio_t m_power_led; |
|
|
|
extern "C" { |
|
|
|
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { report_generator_service_irq_trigger(GPIO_Pin); } |
|
|
|
} |
|
|
|
|
|
|
|
void debug_light_ctrl() { |
|
|
|
static uint32_t lastcall = 0; |
|
|
|
static bool light_status = false; |
|
|
|
if (xs_has_passedms(lastcall) > 100) { |
|
|
|
light_status = !light_status; |
|
|
|
xs_gpio_write(&m_debug_led, 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)) { |
|
|
|
xs_gpio_write(&m_power_led, false); |
|
|
|
osDelay(100); |
|
|
|
xs_gpio_write(&m_power_led, true); |
|
|
|
osDelay(100); |
|
|
|
} |
|
|
|
ZLOGI(TAG, "system reset"); |
|
|
|
NVIC_SystemReset(); |
|
|
|
} |
|
|
|
} |
|
|
|
//
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void umain() { |
|
|
|
/**
|
|
|
|
* @brief device_info init |
|
|
|
*/ |
|
|
|
sn_t sn; |
|
|
|
device_info_init(); |
|
|
|
device_info_get_sn(&sn); |
|
|
|
XS_LOGI(TAG, "%s:%d", PC_PROJECT_NAME, PC_VERSION); |
|
|
|
XS_LOGI(TAG, "sn: %x:%x:%x", sn.sn0, sn.sn1, sn.sn2); |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 调试指示灯初始化 |
|
|
|
* @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); |
|
|
|
xs_gpio_init_as_input(&m_factory_reset_key, FACTORY_RESET_KEY, kxs_gpio_nopull, kxs_gpio_no_irq, true); |
|
|
|
// m_power_led
|
|
|
|
/**
|
|
|
|
* @brief 配置初始化 |
|
|
|
*/ |
|
|
@ -62,10 +121,7 @@ void umain() { |
|
|
|
* @brief report_generator init |
|
|
|
*/ |
|
|
|
report_generator_service_init(fpga_if_get_instance()->timecode_irq_pin, fpga_if_get_instance()->camera_sync_code_irq_pin); |
|
|
|
/**
|
|
|
|
* @brief device_info init |
|
|
|
*/ |
|
|
|
device_info_init(); |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief reg_manager init |
|
|
|
*/ |
|
|
@ -77,10 +133,11 @@ void umain() { |
|
|
|
*/ |
|
|
|
extern_if_service_init(); |
|
|
|
|
|
|
|
ZLOGI(TAG, "system init done"); |
|
|
|
|
|
|
|
while (true) { |
|
|
|
xs_gpio_write(&m_debug_led, true); |
|
|
|
xs_delay_ms(100); |
|
|
|
xs_gpio_write(&m_debug_led, false); |
|
|
|
xs_delay_ms(100); |
|
|
|
osDelay(10); |
|
|
|
debug_light_ctrl(); |
|
|
|
factory_reset_key_detect(); |
|
|
|
} |
|
|
|
} |