MPyATE_Firmware/src/app_reg_if.c
Yilin Sun 41f64ce2f7
All checks were successful
continuous-integration/drone/push Build is passing
Sanity check for non-exist reg operations.
Signed-off-by: Yilin Sun <imi415@imi.moe>
2023-06-03 16:42:46 +08:00

57 lines
1.3 KiB
C

/* App */
#include "app_adc.h"
#include "app_gpio.h"
#include "app_sys_utils.h"
/* Private */
#include "app_reg_if.h"
#define MODULE_ID_SYS_UTILS 0
#define MODULE_ID_GPIO 1
#define MODULE_ID_ADC 2
#define MODULE_ID_END 3
typedef uint16_t (*module_reg_read_t)(uint8_t offset);
typedef void (*module_reg_write_t)(uint8_t offset, uint16_t data);
typedef struct {
module_reg_read_t read;
module_reg_write_t write;
} module_reg_t;
static const module_reg_t s_module_regs[] = {
[MODULE_ID_SYS_UTILS] =
{
.read = app_sys_utils_module_reg_read,
.write = app_sys_utils_module_reg_write,
},
[MODULE_ID_GPIO] =
{
.read = app_gpio_module_reg_read,
.write = app_gpio_module_reg_write,
},
[MODULE_ID_ADC] =
{
.read = app_adc_module_reg_read,
.write = app_adc_module_reg_write,
},
};
uint16_t app_reg_if_read(uint8_t reg) {
uint8_t module_id = (reg >> 4U) & 0x0FU;
if (module_id < MODULE_ID_END) {
return s_module_regs[module_id].read(reg & 0x0FU);
}
return 0x5555;
}
void app_reg_if_write(uint8_t reg, uint16_t data) {
uint8_t module_id = (reg >> 4U) & 0x0FU;
if (module_id < MODULE_ID_END) {
s_module_regs[module_id].write((reg & 0x0FU), data);
}
}