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.
128 lines
4.8 KiB
128 lines
4.8 KiB
#include "reg_manager.h"
|
|
|
|
#include "base_service/config_service.h"
|
|
#include "base_service/fpga_if.h"
|
|
#include "device_info.hpp"
|
|
|
|
uint32_t m_action_val0;
|
|
uint32_t m_action_receipt;
|
|
|
|
void reg_manager_init() {}
|
|
uint32_t reg_manager_read_reg(uint32_t addr) {
|
|
uint32_t readbak = 0;
|
|
static sn_t sncode;
|
|
|
|
if (addr == kreg_software_version) { // read only
|
|
readbak = PC_VERSION;
|
|
} else if (addr == kreg_manufacturer0) { // read only
|
|
readbak = PC_MANUFACTURER0;
|
|
} else if (addr == kreg_manufacturer1) { // read only
|
|
readbak = PC_MANUFACTURER1;
|
|
} else if (addr == kreg_product_type_id) { // read only
|
|
readbak = PC_DEVICE_TYPE;
|
|
} else if (addr == kreg_sn_id0) { // read only
|
|
device_info_get_sn(&sncode);
|
|
readbak = sncode.sn0;
|
|
} else if (addr == kreg_sn_id1) { // read only
|
|
device_info_get_sn(&sncode);
|
|
readbak = sncode.sn1;
|
|
} else if (addr == kreg_sn_id2) { // read only
|
|
device_info_get_sn(&sncode);
|
|
readbak = sncode.sn2;
|
|
} else if (addr == kreg_mac0) { // read only
|
|
memcpy(&readbak, config_get()->mac, 4);
|
|
} else if (addr == kreg_mac1) { // read only
|
|
memcpy(&readbak, config_get()->mac + 4, 4);
|
|
}
|
|
/*******************************************************************************
|
|
* CONFIG *
|
|
*******************************************************************************/
|
|
else if (addr == kreg_stm32_obtaining_ip_mode) {
|
|
readbak = config_get()->obtaining_ip_mode;
|
|
} else if (addr == kreg_stm32_ip) {
|
|
readbak = config_get()->ip;
|
|
} else if (addr == kreg_stm32_gw) {
|
|
readbak = config_get()->gw;
|
|
} else if (addr == kreg_stm32_netmask) {
|
|
readbak = config_get()->netmask;
|
|
} else if (addr == kreg_stm32_config0) {
|
|
readbak = config_get()->config0;
|
|
}
|
|
|
|
/*******************************************************************************
|
|
* ACTION *
|
|
*******************************************************************************/
|
|
else if (addr == kreg_stm32_action0) {
|
|
readbak = m_action_receipt;
|
|
} else if (addr == kreg_stm32_action_val0) {
|
|
readbak = m_action_val0;
|
|
}
|
|
|
|
/*******************************************************************************
|
|
* FPGA芯片寄存器读写 *
|
|
*******************************************************************************/
|
|
else if (addr >= REGADD__FPGA_START) {
|
|
fpga_if_spi_read_data(addr, &readbak);
|
|
}
|
|
return readbak;
|
|
}
|
|
uint32_t reg_manager_write_reg(uint32_t addr, uint32_t value) {
|
|
uint32_t readbak = 0;
|
|
|
|
/*******************************************************************************
|
|
* INFO *
|
|
*******************************************************************************/
|
|
if (addr == kreg_software_version) { // read only
|
|
readbak = reg_manager_read_reg(addr);
|
|
} else if (addr == kreg_manufacturer0) { // read only
|
|
readbak = reg_manager_read_reg(addr);
|
|
} else if (addr == kreg_manufacturer1) { // read only
|
|
readbak = reg_manager_read_reg(addr);
|
|
} else if (addr == kreg_product_type_id) { // read only
|
|
readbak = reg_manager_read_reg(addr);
|
|
}
|
|
/*******************************************************************************
|
|
* CONFIG *
|
|
*******************************************************************************/
|
|
else if (addr == kreg_stm32_obtaining_ip_mode) {
|
|
config_get()->obtaining_ip_mode = value;
|
|
readbak = config_get()->obtaining_ip_mode;
|
|
} else if (addr == kreg_stm32_ip) {
|
|
config_get()->ip = value;
|
|
readbak = config_get()->ip;
|
|
} else if (addr == kreg_stm32_gw) {
|
|
config_get()->gw = value;
|
|
readbak = config_get()->gw;
|
|
} else if (addr == kreg_stm32_netmask) {
|
|
config_get()->netmask = value;
|
|
readbak = config_get()->netmask;
|
|
} else if (addr == kreg_stm32_config0) {
|
|
readbak = config_get()->config0;
|
|
}
|
|
|
|
/*******************************************************************************
|
|
* FPGA芯片寄存器读写 *
|
|
*******************************************************************************/
|
|
else if (addr >= REGADD__FPGA_START) {
|
|
fpga_if_spi_write_data(addr, value, &readbak);
|
|
config_update_reg(addr, value);
|
|
}
|
|
return readbak;
|
|
}
|
|
|
|
void reg_manager_read_regs(uint32_t start_addr, uint32_t nreg, uint32_t* datacache, uint32_t* len) {
|
|
uint32_t _nreg = nreg;
|
|
if (start_addr + nreg > MAX_REG_NUM) {
|
|
_nreg = MAX_REG_NUM - start_addr;
|
|
}
|
|
|
|
if (*len < _nreg) {
|
|
_nreg = *len;
|
|
}
|
|
|
|
for (size_t i = start_addr; i < _nreg; i++) {
|
|
datacache[i] = reg_manager_read_reg(i);
|
|
}
|
|
*len = _nreg;
|
|
return;
|
|
}
|