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.
 
 
 

171 lines
4.8 KiB

#include <stddef.h>
#include <stdio.h>
//
#include "base_service/base_service.h"
#include "base_service/fpga_if.h"
#include "service/device_info.hpp"
#include "service/extern_if_service.h"
#include "service/network_service.h"
#include "service/reg_manager.h"
#include "service/report_generator_service.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_led;
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) > 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
* 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 配置初始化
*/
config_init();
/**
* @brief 初始化网络服务
*/
network_service_init();
/**
* @brief fpga_interface init
*/
fpga_if_init();
/**
* @brief report_generator init
*/
ReportGeneratorService_init(fpga_if_get_instance()->timecode_irq_pin, fpga_if_get_instance()->camera_sync_code_irq_pin);
/**
* @brief reg_manager init
*/
reg_manager_init();
/**
* @brief extern_if_service init
*
* 解析并处理外部指令
*/
osDelay(1000);
extern_if_service_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();
// xs_gpio_write(&fpga_if.reset_pin_io, true);
//
// if (xs_has_passedms(0) >= 1* 60 * 60 * 1000) {
// 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);
}
}