Files
microchip-application-bmd38…/cpg.c
T
2024-11-25 11:08:57 +08:00

115 lines
2.4 KiB
C

#include "cpg11_dev_mode.h"
#include "elite_board.h"
#include "pel.h"
#include "elite_def.h"
#include "nrf_delay.h"
#include "nrf_gpio.h"
#include "nrf_log.h"
#include "tw1508.h"
#if (DEF_ELITE_MODEL == DEF_ELITE_CPG_V1_1)
#define VERSION_DATE_YEAR 24
#define VERSION_DATE_MONTH 11
#define VERSION_DATE_DAY 1
#define VERSION_DATE_HOUR 16
#define VERSION_DATE_MINUTE 48
static void cis_version(uint8_t *ins, uint16_t size)
{
NRF_LOG_INFO("%s", __FUNCTION__);
uint8_t cis_ver[] = {
CIS_VERSION,
VERSION_DATE_YEAR,
VERSION_DATE_MONTH,
VERSION_DATE_DAY,
VERSION_DATE_HOUR,
VERSION_DATE_MINUTE,
};
extern ret_code_t le_data_update(uint8_t * p_value, uint16_t len);
le_data_update((void *)cis_ver, sizeof(cis_ver));
}
static void vis_rst(uint8_t *ins, uint16_t size)
{
NRF_LOG_INFO("%s", __FUNCTION__);
}
void dev_mode(uint8_t *ins, uint16_t size)
{
NRF_LOG_INFO("%s", __FUNCTION__);
struct __PACKED
{
uint8_t id : 4;
uint8_t : 4;
uint16_t magic : 16;
uint8_t func_id;
uint8_t opcode;
uint8_t param[];
} *p_ins = (void *)ins;
switch (p_ins->func_id)
{
case 0x00:
dev_mode_electrode_switch(ins);
break;
case 0x01:
dev_mode_tw1508(ins);
break;
case 0x02:
dev_mode_ctrl_cpg11_electrodes_task(ins);
break;
case 0x03:
dev_mode_adapter_block_switch(ins);
break;
// 0xA0 to 0xBF are reserved for controlling the BMD380
case 0xA0:
dev_mode_gpio(ins);
break;
case 0xA1:
// spi
break;
case 0xA2:
// i2c
break;
// 0xF0 to 0xFF are reserved for calibration
case 0xF0:
// cali
break;
default:
break;
}
}
const elite_instance_t cpg_elite_instance = {
.cis_func = {
[CIS_VERSION] = cis_version,
},
.vis_func = {
[VIS_RST] = vis_rst,
},
.ris_func = {
[DEV_MODE] = dev_mode,
}
};
const elite_instance_t *cpg_init(void)
{
tw1508_init();
tw1508_set(5, 5); // 5*0.13= 0.65mA, formula:value*0.13=mA
return &cpg_elite_instance;
}
#endif