|
|
@ -1,19 +1,152 @@ |
|
|
|
#include "reg_manager.h" |
|
|
|
|
|
|
|
uint32_t reg[MAX_REG_NUM]; |
|
|
|
#include "base_service/config_service.h" |
|
|
|
#include "base_service/fpga_if.h" |
|
|
|
#include "device_info.hpp" |
|
|
|
#include "iflytop_xsync_protocol/iflytop_xsync_protocol.h" |
|
|
|
#include "service/report_generator_service.h" |
|
|
|
|
|
|
|
uint32_t m_action_val0; |
|
|
|
uint32_t m_action_receipt; |
|
|
|
|
|
|
|
void reg_manager_init() {} |
|
|
|
|
|
|
|
uint32_t reg_manager_read_reg(uint32_t addr) { |
|
|
|
if (addr < MAX_REG_NUM) return reg[addr]; |
|
|
|
/******************************************************************************* |
|
|
|
* ACTION * |
|
|
|
*******************************************************************************/ |
|
|
|
static uint32_t doaction(uint32_t action, uint32_t val) { |
|
|
|
if (action == xsync_stm32_action_generator_new_mac) { |
|
|
|
config_get()->config0 = val; |
|
|
|
return 0; |
|
|
|
} else if (action == xsync_stm32_action_factory_reset) { |
|
|
|
config_factory_reset(); |
|
|
|
return 0; |
|
|
|
} else if (action == xsync_stm32_action_reboot) { |
|
|
|
config_generate_random_mac(); |
|
|
|
return 0; |
|
|
|
} else if (action == xsync_stm32_action_storage_cfg) { |
|
|
|
config_flush(); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
uint32_t reg_manager_read_reg(uint32_t addr) { |
|
|
|
uint32_t readbak = 0; |
|
|
|
static sn_t sncode; |
|
|
|
|
|
|
|
if (addr == kxsync_reg_software_version) { // read only |
|
|
|
readbak = PC_VERSION; |
|
|
|
} else if (addr == kxsync_reg_manufacturer0) { // read only |
|
|
|
readbak = PC_MANUFACTURER0; |
|
|
|
} else if (addr == kxsync_reg_manufacturer1) { // read only |
|
|
|
readbak = PC_MANUFACTURER1; |
|
|
|
} else if (addr == kxsync_reg_product_type_id) { // read only |
|
|
|
readbak = kxsync_device_type_xsync; |
|
|
|
} else if (addr == kxsync_reg_sn_id0) { // read only |
|
|
|
device_info_get_sn(&sncode); |
|
|
|
readbak = sncode.sn0; |
|
|
|
} else if (addr == kxsync_reg_sn_id1) { // read only |
|
|
|
device_info_get_sn(&sncode); |
|
|
|
readbak = sncode.sn1; |
|
|
|
} else if (addr == kxsync_reg_sn_id2) { // read only |
|
|
|
device_info_get_sn(&sncode); |
|
|
|
readbak = sncode.sn2; |
|
|
|
} else if (addr == kxsync_reg_mac0) { // read only |
|
|
|
memcpy(&readbak, config_get()->mac, 4); |
|
|
|
} else if (addr == kxsync_reg_mac1) { // read only |
|
|
|
memcpy(&readbak, config_get()->mac + 4, 4); |
|
|
|
} |
|
|
|
/******************************************************************************* |
|
|
|
* CONFIG * |
|
|
|
*******************************************************************************/ |
|
|
|
else if (addr == kxsync_reg_stm32_obtaining_ip_mode) { |
|
|
|
readbak = config_get()->obtaining_ip_mode; |
|
|
|
} else if (addr == kxsync_reg_stm32_ip) { |
|
|
|
readbak = config_get()->ip; |
|
|
|
} else if (addr == kxsync_reg_stm32_gw) { |
|
|
|
readbak = config_get()->gw; |
|
|
|
} else if (addr == kxsync_reg_stm32_netmask) { |
|
|
|
readbak = config_get()->netmask; |
|
|
|
} else if (addr == kxsync_reg_stm32_camera_sync_signal_count) { |
|
|
|
readbak = report_generator_service_xsync_get_count(); |
|
|
|
} else if (addr == kxsync_reg_stm32_config0) { |
|
|
|
readbak = config_get()->config0; |
|
|
|
} |
|
|
|
/******************************************************************************* |
|
|
|
* ACTION * |
|
|
|
*******************************************************************************/ |
|
|
|
else if (addr == kxsync_reg_stm32_action0) { |
|
|
|
readbak = m_action_receipt; |
|
|
|
} else if (addr == kxsync_reg_stm32_action_val0) { |
|
|
|
readbak = m_action_val0; |
|
|
|
} |
|
|
|
|
|
|
|
/******************************************************************************* |
|
|
|
* FPGA芯片寄存器读写 * |
|
|
|
*******************************************************************************/ |
|
|
|
else if (addr > XYSNC_REG_FPGA_REG_START) { |
|
|
|
fpga_if_spi_read_data_01(addr, &readbak); |
|
|
|
} |
|
|
|
return readbak; |
|
|
|
} |
|
|
|
uint32_t reg_manager_write_reg(uint32_t addr, uint32_t value) { |
|
|
|
if (addr < MAX_REG_NUM) { |
|
|
|
reg[addr] = value; |
|
|
|
return reg[addr]; |
|
|
|
uint32_t readbak = 0; |
|
|
|
|
|
|
|
/******************************************************************************* |
|
|
|
* INFO * |
|
|
|
*******************************************************************************/ |
|
|
|
if (addr == kxsync_reg_software_version) { // read only |
|
|
|
readbak = reg_manager_read_reg(addr); |
|
|
|
} else if (addr == kxsync_reg_manufacturer0) { // read only |
|
|
|
readbak = reg_manager_read_reg(addr); |
|
|
|
} else if (addr == kxsync_reg_manufacturer1) { // read only |
|
|
|
readbak = reg_manager_read_reg(addr); |
|
|
|
} else if (addr == kxsync_reg_product_type_id) { // read only |
|
|
|
readbak = reg_manager_read_reg(addr); |
|
|
|
} |
|
|
|
return 0; |
|
|
|
/******************************************************************************* |
|
|
|
* CONFIG * |
|
|
|
*******************************************************************************/ |
|
|
|
else if (addr == kxsync_reg_stm32_obtaining_ip_mode) { |
|
|
|
config_get()->obtaining_ip_mode = value; |
|
|
|
readbak = config_get()->obtaining_ip_mode; |
|
|
|
} else if (addr == kxsync_reg_stm32_ip) { |
|
|
|
config_get()->ip = value; |
|
|
|
readbak = config_get()->ip; |
|
|
|
} else if (addr == kxsync_reg_stm32_gw) { |
|
|
|
config_get()->gw = value; |
|
|
|
readbak = config_get()->gw; |
|
|
|
} else if (addr == kxsync_reg_stm32_netmask) { |
|
|
|
config_get()->netmask = value; |
|
|
|
readbak = config_get()->netmask; |
|
|
|
} else if (addr == kxsync_reg_stm32_camera_sync_signal_count) { |
|
|
|
// 清零 |
|
|
|
report_generator_service_xsync_clear_count(); |
|
|
|
readbak = report_generator_service_xsync_get_count(); |
|
|
|
} else if (addr == kxsync_reg_stm32_config0) { |
|
|
|
readbak = config_get()->config0; |
|
|
|
} |
|
|
|
|
|
|
|
/******************************************************************************* |
|
|
|
* ACTION * |
|
|
|
*******************************************************************************/ |
|
|
|
else if (addr == kxsync_reg_stm32_action0) { |
|
|
|
readbak = doaction(value, m_action_val0); |
|
|
|
m_action_receipt = readbak; |
|
|
|
} else if (addr == kxsync_reg_stm32_action_val0) { |
|
|
|
m_action_val0 = value; |
|
|
|
readbak = value; |
|
|
|
} |
|
|
|
|
|
|
|
/******************************************************************************* |
|
|
|
* FPGA芯片寄存器读写 * |
|
|
|
*******************************************************************************/ |
|
|
|
else if (addr > XYSNC_REG_FPGA_REG_START) { |
|
|
|
fpga_if_spi_write_data_01(addr, value, &readbak); |
|
|
|
} |
|
|
|
|
|
|
|
return readbak; |
|
|
|
} |
|
|
|
|
|
|
|
void reg_manager_read_regs(uint32_t start_addr, uint32_t nreg, uint32_t* datacache, uint32_t* len) { |
|
|
|