style: organize code
This commit is contained in:
@@ -140,50 +140,93 @@ static void set_single_pin_as_output(uint16_t pin_number, uint16_t high_low)
|
||||
}
|
||||
}
|
||||
|
||||
static void dev_mode_gpio(uint8_t *ins)
|
||||
static uint16_t current_mA_convert_tw1508_value(float current_mA)
|
||||
{
|
||||
struct __PACKED
|
||||
#define TW1508_REXR 1.5 // 1.5kohm
|
||||
|
||||
#define TW1508_BOUNDARY_GAIN0 13.3
|
||||
#define TW1508_BOUNDARY_GAIN1 26.6
|
||||
#define TW1508_BOUNDARY_GAIN2 39.9
|
||||
#define TW1508_BOUNDARY_GAIN3 53.3
|
||||
#define TW1508_BOUNDARY_GAIN4 66.6
|
||||
#define TW1508_BOUNDARY_GAIN5 79.9
|
||||
#define TW1508_BOUNDARY_GAIN6 93.3
|
||||
#define TW1508_BOUNDARY_GAIN7 106.6
|
||||
|
||||
uint16_t tw1508_value;
|
||||
uint8_t dac_7bit;
|
||||
uint8_t dac_3bit;
|
||||
float rext;
|
||||
|
||||
if (current_mA > TW1508_BOUNDARY_GAIN7)
|
||||
{
|
||||
uint8_t id : 4;
|
||||
uint8_t ins_type : 4;
|
||||
uint8_t pkg_size;
|
||||
uint8_t mode;
|
||||
uint8_t mode_opcode; // dev mode could ignore
|
||||
uint8_t dev_feat;
|
||||
uint8_t dev_feat_opcode;
|
||||
uint8_t param[];
|
||||
} *p_ins = (void *)ins;
|
||||
|
||||
switch (u8_to_u16(p_ins->dev_feat, p_ins->dev_feat_opcode))
|
||||
{
|
||||
case 0xA000: {
|
||||
// gpio - CPGv1.1 default gpio state
|
||||
// 3000FFFF A000
|
||||
cpg11_io_init();
|
||||
break;
|
||||
}
|
||||
|
||||
case 0xA001: {
|
||||
// gpio - set single pin as output
|
||||
// 3000FFFF A001 0006 0001
|
||||
uint16_t pin_number = u8_to_u16(p_ins->param[0], p_ins->param[1]);
|
||||
uint16_t high_low = u8_to_u16(p_ins->param[2], p_ins->param[3]);
|
||||
set_single_pin_as_output(pin_number, high_low);
|
||||
break;
|
||||
}
|
||||
|
||||
case 0xA002: {
|
||||
// gpio - set all pin as output
|
||||
// 3000FFFF A002 0001
|
||||
uint16_t high_low = u8_to_u16(p_ins->param[0], p_ins->param[1]);
|
||||
for (int i = 1; i < ARRAY_SIZE(pin_to_gpio_table); i++)
|
||||
{
|
||||
set_single_pin_as_output(i, high_low);
|
||||
nrf_delay_us(100);
|
||||
}
|
||||
break;
|
||||
}
|
||||
current_mA = TW1508_BOUNDARY_GAIN7;
|
||||
NRF_LOG_INFO("current is too large");
|
||||
}
|
||||
|
||||
if (current_mA <= TW1508_BOUNDARY_GAIN0)
|
||||
{
|
||||
dac_3bit = 0b000;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN1)
|
||||
{
|
||||
dac_3bit = 0b001;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN2)
|
||||
{
|
||||
dac_3bit = 0b010;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN3)
|
||||
{
|
||||
dac_3bit = 0b011;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN4)
|
||||
{
|
||||
dac_3bit = 0b100;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN5)
|
||||
{
|
||||
dac_3bit = 0b101;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN6)
|
||||
{
|
||||
dac_3bit = 0b110;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN7)
|
||||
{
|
||||
dac_3bit = 0b111;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
|
||||
dac_7bit = current_mA * 8 * TW1508_REXR / 1.25 / (dac_3bit + 1);
|
||||
tw1508_value = dac_3bit << 7 | dac_7bit;
|
||||
|
||||
return tw1508_value;
|
||||
}
|
||||
|
||||
static void tw1508_set_mA(float out_0_mA, float out_1_mA)
|
||||
{
|
||||
uint16_t out_0;
|
||||
uint16_t out_1;
|
||||
|
||||
{
|
||||
char str[128];
|
||||
snprintf(str, sizeof(str), "%s: %.3f", "out_0_mA float", out_0_mA);
|
||||
NRF_LOG_INFO("%s", str);
|
||||
snprintf(str, sizeof(str), "%s: %.3f", "out_1_mA float", out_1_mA);
|
||||
NRF_LOG_INFO("%s", str);
|
||||
}
|
||||
|
||||
out_0 = current_mA_convert_tw1508_value(out_0_mA);
|
||||
out_1 = current_mA_convert_tw1508_value(out_1_mA);
|
||||
tw1508_set(out_0, out_1);
|
||||
}
|
||||
|
||||
static void electrode_pulse_channel(uint16_t elec_ch_setting)
|
||||
@@ -275,7 +318,63 @@ static void electrode_pulse_channel(uint16_t elec_ch_setting)
|
||||
}
|
||||
}
|
||||
|
||||
void set_cpg_pulse_parameter(two_set_electrodes_task_t *params)
|
||||
static void adapter_channel(uint16_t channel)
|
||||
{
|
||||
union
|
||||
{
|
||||
uint16_t val;
|
||||
struct
|
||||
{
|
||||
uint16_t adpt0_s1 : 1;
|
||||
uint16_t adpt0_s2 : 1;
|
||||
uint16_t adpt0_s3 : 1;
|
||||
uint16_t adpt0_s4 : 1;
|
||||
uint16_t adpt1_s1 : 1;
|
||||
uint16_t adpt1_s2 : 1;
|
||||
uint16_t adpt1_s3 : 1;
|
||||
uint16_t adpt1_s4 : 1;
|
||||
uint16_t adpt_rsvd : 8;
|
||||
};
|
||||
} adap_ch;
|
||||
|
||||
adap_ch.val = channel;
|
||||
NRF_LOG_INFO("ADPT0_S1_PIN(%d)", adap_ch.adpt0_s1);
|
||||
NRF_LOG_INFO("ADPT0_S2_PIN(%d)", adap_ch.adpt0_s2);
|
||||
NRF_LOG_INFO("ADPT0_S3_PIN(%d)", adap_ch.adpt0_s3);
|
||||
NRF_LOG_INFO("ADPT0_S4_PIN(%d)", adap_ch.adpt0_s4);
|
||||
NRF_LOG_INFO("ADPT1_S1_PIN(%d)", adap_ch.adpt1_s1);
|
||||
NRF_LOG_INFO("ADPT1_S2_PIN(%d)", adap_ch.adpt1_s2);
|
||||
NRF_LOG_INFO("ADPT1_S3_PIN(%d)", adap_ch.adpt1_s3);
|
||||
NRF_LOG_INFO("ADPT1_S4_PIN(%d)", adap_ch.adpt1_s4);
|
||||
|
||||
adap_ch.adpt0_s1 ? nrf_gpio_pin_set(ADPT0_S1_PIN) : nrf_gpio_pin_clear(ADPT0_S1_PIN);
|
||||
adap_ch.adpt0_s2 ? nrf_gpio_pin_set(ADPT0_S2_PIN) : nrf_gpio_pin_clear(ADPT0_S2_PIN);
|
||||
adap_ch.adpt0_s3 ? nrf_gpio_pin_set(ADPT0_S3_PIN) : nrf_gpio_pin_clear(ADPT0_S3_PIN);
|
||||
adap_ch.adpt0_s4 ? nrf_gpio_pin_set(ADPT0_S4_PIN) : nrf_gpio_pin_clear(ADPT0_S4_PIN);
|
||||
adap_ch.adpt1_s1 ? nrf_gpio_pin_set(ADPT1_S1_PIN) : nrf_gpio_pin_clear(ADPT1_S1_PIN);
|
||||
adap_ch.adpt1_s2 ? nrf_gpio_pin_set(ADPT1_S2_PIN) : nrf_gpio_pin_clear(ADPT1_S2_PIN);
|
||||
adap_ch.adpt1_s3 ? nrf_gpio_pin_set(ADPT1_S3_PIN) : nrf_gpio_pin_clear(ADPT1_S3_PIN);
|
||||
adap_ch.adpt1_s4 ? nrf_gpio_pin_set(ADPT1_S4_PIN) : nrf_gpio_pin_clear(ADPT1_S4_PIN);
|
||||
}
|
||||
|
||||
static void high_volt_channel(uint16_t channel)
|
||||
{
|
||||
sw_t sw;
|
||||
sw.val = channel;
|
||||
NRF_LOG_INFO("HV_sw.val= 0x%04X", sw.val);
|
||||
{
|
||||
char str[128];
|
||||
snprintf(str, sizeof(str), "%4d, %4d, %4d, %4d, %4d, %4d, %3d, %3d", sw.sw15, sw.sw14, sw.sw13, sw.sw12, sw.sw11, sw.sw10, sw.sw9, sw.sw8);
|
||||
NRF_LOG_INFO("sw15, sw14, sw13, sw12, sw11, sw10, sw9, sw8");
|
||||
NRF_LOG_INFO("%s", str);
|
||||
snprintf(str, sizeof(str), "%3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d", sw.sw7, sw.sw6, sw.sw5, sw.sw4, sw.sw3, sw.sw2, sw.sw1, sw.sw0);
|
||||
NRF_LOG_INFO("sw7, sw6, sw5, sw4, sw3, sw2, sw1, sw0");
|
||||
NRF_LOG_INFO("%s", str);
|
||||
}
|
||||
sw_write(sw);
|
||||
}
|
||||
|
||||
static void set_cpg_pulse_parameter(two_set_electrodes_task_t *params)
|
||||
{
|
||||
NRF_LOG_INFO("%s", __FUNCTION__);
|
||||
|
||||
@@ -596,96 +695,7 @@ static void resume_which_electrodes(uint16_t channel)
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t current_mA_convert_tw1508_value(float current_mA)
|
||||
{
|
||||
#define TW1508_REXR 1.5 // 1.5kohm
|
||||
|
||||
#define TW1508_BOUNDARY_GAIN0 13.3
|
||||
#define TW1508_BOUNDARY_GAIN1 26.6
|
||||
#define TW1508_BOUNDARY_GAIN2 39.9
|
||||
#define TW1508_BOUNDARY_GAIN3 53.3
|
||||
#define TW1508_BOUNDARY_GAIN4 66.6
|
||||
#define TW1508_BOUNDARY_GAIN5 79.9
|
||||
#define TW1508_BOUNDARY_GAIN6 93.3
|
||||
#define TW1508_BOUNDARY_GAIN7 106.6
|
||||
|
||||
uint16_t tw1508_value;
|
||||
uint8_t dac_7bit;
|
||||
uint8_t dac_3bit;
|
||||
float rext;
|
||||
|
||||
if (current_mA > TW1508_BOUNDARY_GAIN7)
|
||||
{
|
||||
current_mA = TW1508_BOUNDARY_GAIN7;
|
||||
NRF_LOG_INFO("current is too large");
|
||||
}
|
||||
|
||||
if (current_mA <= TW1508_BOUNDARY_GAIN0)
|
||||
{
|
||||
dac_3bit = 0b000;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN1)
|
||||
{
|
||||
dac_3bit = 0b001;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN2)
|
||||
{
|
||||
dac_3bit = 0b010;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN3)
|
||||
{
|
||||
dac_3bit = 0b011;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN4)
|
||||
{
|
||||
dac_3bit = 0b100;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN5)
|
||||
{
|
||||
dac_3bit = 0b101;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN6)
|
||||
{
|
||||
dac_3bit = 0b110;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
else if (current_mA <= TW1508_BOUNDARY_GAIN7)
|
||||
{
|
||||
dac_3bit = 0b111;
|
||||
rext = TW1508_REXR;
|
||||
}
|
||||
|
||||
dac_7bit = current_mA * 8 * TW1508_REXR / 1.25 / (dac_3bit + 1);
|
||||
tw1508_value = dac_3bit << 7 | dac_7bit;
|
||||
|
||||
return tw1508_value;
|
||||
}
|
||||
|
||||
void tw1508_set_mA(float out_0_mA, float out_1_mA)
|
||||
{
|
||||
uint16_t out_0;
|
||||
uint16_t out_1;
|
||||
|
||||
{
|
||||
char str[128];
|
||||
snprintf(str, sizeof(str), "%s: %.3f", "out_0_mA float", out_0_mA);
|
||||
NRF_LOG_INFO("%s", str);
|
||||
snprintf(str, sizeof(str), "%s: %.3f", "out_1_mA float", out_1_mA);
|
||||
NRF_LOG_INFO("%s", str);
|
||||
}
|
||||
|
||||
out_0 = current_mA_convert_tw1508_value(out_0_mA);
|
||||
out_1 = current_mA_convert_tw1508_value(out_1_mA);
|
||||
tw1508_set(out_0, out_1);
|
||||
}
|
||||
|
||||
void start_electrodes_api(uint8_t *ins)
|
||||
static void start_electrodes_api(uint8_t *ins)
|
||||
{
|
||||
struct __PACKED
|
||||
{
|
||||
@@ -729,7 +739,7 @@ void start_electrodes_api(uint8_t *ins)
|
||||
NRF_LOG_INFO("...........................");
|
||||
}
|
||||
|
||||
void stop_electrodes_api(uint8_t *ins)
|
||||
static void stop_electrodes_api(uint8_t *ins)
|
||||
{
|
||||
struct __PACKED
|
||||
{
|
||||
@@ -752,86 +762,27 @@ void stop_electrodes_api(uint8_t *ins)
|
||||
NRF_LOG_INFO("HV_EN_PIN(0)");
|
||||
}
|
||||
|
||||
void dev_mode_electrode_switch(uint8_t *ins)
|
||||
static void cis_version(uint8_t *ins, uint16_t size)
|
||||
{
|
||||
struct __PACKED
|
||||
{
|
||||
uint8_t id : 4;
|
||||
uint8_t ins_type : 4;
|
||||
uint8_t pkg_size;
|
||||
uint8_t mode;
|
||||
uint8_t mode_opcode; // dev mode could ignore
|
||||
uint8_t dev_feat;
|
||||
uint8_t dev_feat_opcode;
|
||||
uint8_t param[];
|
||||
} *p_ins = (void *)ins;
|
||||
|
||||
switch (u8_to_u16(p_ins->dev_feat, p_ins->dev_feat_opcode))
|
||||
{
|
||||
case 0x0400: {
|
||||
// electrode_switch default
|
||||
// 3000FFFF 0400
|
||||
electrode_pulse_channel(ELEC_CH_ALL_HIGHZ);
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x0401: {
|
||||
// electrode_switch set val
|
||||
// 3000FFFF 0401 0000
|
||||
uint16_t elec_ch_setting = u8_to_u16(p_ins->param[0], p_ins->param[1]);
|
||||
electrode_pulse_channel(elec_ch_setting);
|
||||
break;
|
||||
}
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
||||
void dev_mode_tw1508(uint8_t *ins)
|
||||
static void vis_rst(uint8_t *ins, uint16_t size)
|
||||
{
|
||||
struct __PACKED
|
||||
{
|
||||
uint8_t id : 4;
|
||||
uint8_t ins_type : 4;
|
||||
uint8_t pkg_size;
|
||||
uint8_t mode;
|
||||
uint8_t mode_opcode; // dev mode could ignore
|
||||
uint8_t dev_feat;
|
||||
uint8_t dev_feat_opcode;
|
||||
uint8_t param[];
|
||||
} *p_ins = (void *)ins;
|
||||
|
||||
switch (u8_to_u16(p_ins->dev_feat, p_ins->dev_feat_opcode))
|
||||
{
|
||||
case 0x0100: {
|
||||
// tw1508 init
|
||||
// 3000FFFF 0100
|
||||
tw1508_init();
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x0101: {
|
||||
// tw1508 set raw value
|
||||
// 3000FFFF 0101 0005 0008
|
||||
uint16_t out_0 = u8_to_u16(p_ins->param[0], p_ins->param[1]);
|
||||
uint16_t out_1 = u8_to_u16(p_ins->param[2], p_ins->param[3]);
|
||||
tw1508_set(out_0, out_1);
|
||||
break;
|
||||
}
|
||||
case 0x0102: {
|
||||
// tw1508 set mA float value
|
||||
// 3000FFFF 0102 3F800000 40B00000
|
||||
uint32_t out_0_mA_u32 = u8_to_u32(p_ins->param[0], p_ins->param[1], p_ins->param[2], p_ins->param[3]);
|
||||
uint32_t out_1_mA_u32 = u8_to_u32(p_ins->param[4], p_ins->param[5], p_ins->param[6], p_ins->param[7]);
|
||||
float out_0_mA_f;
|
||||
float out_1_mA_f;
|
||||
memcpy(&out_0_mA_f, &out_0_mA_u32, sizeof(out_0_mA_f));
|
||||
memcpy(&out_1_mA_f, &out_1_mA_u32, sizeof(out_1_mA_f));
|
||||
tw1508_set_mA(out_0_mA_f, out_1_mA_f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
NRF_LOG_INFO("%s", __FUNCTION__);
|
||||
}
|
||||
|
||||
void dev_mode_ctrl_electrodes_task(uint8_t *ins)
|
||||
static void dev_mode_ctrl_electrodes_task(uint8_t *ins)
|
||||
{
|
||||
struct __PACKED
|
||||
{
|
||||
@@ -877,63 +828,86 @@ void dev_mode_ctrl_electrodes_task(uint8_t *ins)
|
||||
}
|
||||
}
|
||||
|
||||
void adapter_channel(uint16_t channel)
|
||||
static void dev_mode_tw1508(uint8_t *ins)
|
||||
{
|
||||
union
|
||||
struct __PACKED
|
||||
{
|
||||
uint16_t val;
|
||||
struct
|
||||
{
|
||||
uint16_t adpt0_s1 : 1;
|
||||
uint16_t adpt0_s2 : 1;
|
||||
uint16_t adpt0_s3 : 1;
|
||||
uint16_t adpt0_s4 : 1;
|
||||
uint16_t adpt1_s1 : 1;
|
||||
uint16_t adpt1_s2 : 1;
|
||||
uint16_t adpt1_s3 : 1;
|
||||
uint16_t adpt1_s4 : 1;
|
||||
uint16_t adpt_rsvd : 8;
|
||||
};
|
||||
} adap_ch;
|
||||
uint8_t id : 4;
|
||||
uint8_t ins_type : 4;
|
||||
uint8_t pkg_size;
|
||||
uint8_t mode;
|
||||
uint8_t mode_opcode; // dev mode could ignore
|
||||
uint8_t dev_feat;
|
||||
uint8_t dev_feat_opcode;
|
||||
uint8_t param[];
|
||||
} *p_ins = (void *)ins;
|
||||
|
||||
adap_ch.val = channel;
|
||||
NRF_LOG_INFO("ADPT0_S1_PIN(%d)", adap_ch.adpt0_s1);
|
||||
NRF_LOG_INFO("ADPT0_S2_PIN(%d)", adap_ch.adpt0_s2);
|
||||
NRF_LOG_INFO("ADPT0_S3_PIN(%d)", adap_ch.adpt0_s3);
|
||||
NRF_LOG_INFO("ADPT0_S4_PIN(%d)", adap_ch.adpt0_s4);
|
||||
NRF_LOG_INFO("ADPT1_S1_PIN(%d)", adap_ch.adpt1_s1);
|
||||
NRF_LOG_INFO("ADPT1_S2_PIN(%d)", adap_ch.adpt1_s2);
|
||||
NRF_LOG_INFO("ADPT1_S3_PIN(%d)", adap_ch.adpt1_s3);
|
||||
NRF_LOG_INFO("ADPT1_S4_PIN(%d)", adap_ch.adpt1_s4);
|
||||
|
||||
adap_ch.adpt0_s1 ? nrf_gpio_pin_set(ADPT0_S1_PIN) : nrf_gpio_pin_clear(ADPT0_S1_PIN);
|
||||
adap_ch.adpt0_s2 ? nrf_gpio_pin_set(ADPT0_S2_PIN) : nrf_gpio_pin_clear(ADPT0_S2_PIN);
|
||||
adap_ch.adpt0_s3 ? nrf_gpio_pin_set(ADPT0_S3_PIN) : nrf_gpio_pin_clear(ADPT0_S3_PIN);
|
||||
adap_ch.adpt0_s4 ? nrf_gpio_pin_set(ADPT0_S4_PIN) : nrf_gpio_pin_clear(ADPT0_S4_PIN);
|
||||
adap_ch.adpt1_s1 ? nrf_gpio_pin_set(ADPT1_S1_PIN) : nrf_gpio_pin_clear(ADPT1_S1_PIN);
|
||||
adap_ch.adpt1_s2 ? nrf_gpio_pin_set(ADPT1_S2_PIN) : nrf_gpio_pin_clear(ADPT1_S2_PIN);
|
||||
adap_ch.adpt1_s3 ? nrf_gpio_pin_set(ADPT1_S3_PIN) : nrf_gpio_pin_clear(ADPT1_S3_PIN);
|
||||
adap_ch.adpt1_s4 ? nrf_gpio_pin_set(ADPT1_S4_PIN) : nrf_gpio_pin_clear(ADPT1_S4_PIN);
|
||||
}
|
||||
|
||||
void high_volt_channel(uint16_t channel)
|
||||
{
|
||||
sw_t sw;
|
||||
sw.val = channel;
|
||||
NRF_LOG_INFO("HV_sw.val= 0x%04X", sw.val);
|
||||
switch (u8_to_u16(p_ins->dev_feat, p_ins->dev_feat_opcode))
|
||||
{
|
||||
char str[128];
|
||||
snprintf(str, sizeof(str), "%4d, %4d, %4d, %4d, %4d, %4d, %3d, %3d", sw.sw15, sw.sw14, sw.sw13, sw.sw12, sw.sw11, sw.sw10, sw.sw9, sw.sw8);
|
||||
NRF_LOG_INFO("sw15, sw14, sw13, sw12, sw11, sw10, sw9, sw8");
|
||||
NRF_LOG_INFO("%s", str);
|
||||
snprintf(str, sizeof(str), "%3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d", sw.sw7, sw.sw6, sw.sw5, sw.sw4, sw.sw3, sw.sw2, sw.sw1, sw.sw0);
|
||||
NRF_LOG_INFO("sw7, sw6, sw5, sw4, sw3, sw2, sw1, sw0");
|
||||
NRF_LOG_INFO("%s", str);
|
||||
case 0x0100: {
|
||||
// tw1508 init
|
||||
// 3000FFFF 0100
|
||||
tw1508_init();
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x0101: {
|
||||
// tw1508 set raw value
|
||||
// 3000FFFF 0101 0005 0008
|
||||
uint16_t out_0 = u8_to_u16(p_ins->param[0], p_ins->param[1]);
|
||||
uint16_t out_1 = u8_to_u16(p_ins->param[2], p_ins->param[3]);
|
||||
tw1508_set(out_0, out_1);
|
||||
break;
|
||||
}
|
||||
case 0x0102: {
|
||||
// tw1508 set mA float value
|
||||
// 3000FFFF 0102 3F800000 40B00000
|
||||
uint32_t out_0_mA_u32 = u8_to_u32(p_ins->param[0], p_ins->param[1], p_ins->param[2], p_ins->param[3]);
|
||||
uint32_t out_1_mA_u32 = u8_to_u32(p_ins->param[4], p_ins->param[5], p_ins->param[6], p_ins->param[7]);
|
||||
float out_0_mA_f;
|
||||
float out_1_mA_f;
|
||||
memcpy(&out_0_mA_f, &out_0_mA_u32, sizeof(out_0_mA_f));
|
||||
memcpy(&out_1_mA_f, &out_1_mA_u32, sizeof(out_1_mA_f));
|
||||
tw1508_set_mA(out_0_mA_f, out_1_mA_f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
sw_write(sw);
|
||||
}
|
||||
|
||||
void dev_mode_adapter_block_switch(uint8_t *ins)
|
||||
static void dev_mode_electrode_switch(uint8_t *ins)
|
||||
{
|
||||
struct __PACKED
|
||||
{
|
||||
uint8_t id : 4;
|
||||
uint8_t ins_type : 4;
|
||||
uint8_t pkg_size;
|
||||
uint8_t mode;
|
||||
uint8_t mode_opcode; // dev mode could ignore
|
||||
uint8_t dev_feat;
|
||||
uint8_t dev_feat_opcode;
|
||||
uint8_t param[];
|
||||
} *p_ins = (void *)ins;
|
||||
|
||||
switch (u8_to_u16(p_ins->dev_feat, p_ins->dev_feat_opcode))
|
||||
{
|
||||
case 0x0400: {
|
||||
// electrode_switch default
|
||||
// 3000FFFF 0400
|
||||
electrode_pulse_channel(ELEC_CH_ALL_HIGHZ);
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x0401: {
|
||||
// electrode_switch set val
|
||||
// 3000FFFF 0401 0000
|
||||
uint16_t elec_ch_setting = u8_to_u16(p_ins->param[0], p_ins->param[1]);
|
||||
electrode_pulse_channel(elec_ch_setting);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void dev_mode_adapter_block_switch(uint8_t *ins)
|
||||
{
|
||||
struct __PACKED
|
||||
{
|
||||
@@ -981,24 +955,50 @@ void dev_mode_adapter_block_switch(uint8_t *ins)
|
||||
}
|
||||
}
|
||||
|
||||
static void cis_version(uint8_t *ins, uint16_t size)
|
||||
static void dev_mode_gpio(uint8_t *ins)
|
||||
{
|
||||
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));
|
||||
}
|
||||
struct __PACKED
|
||||
{
|
||||
uint8_t id : 4;
|
||||
uint8_t ins_type : 4;
|
||||
uint8_t pkg_size;
|
||||
uint8_t mode;
|
||||
uint8_t mode_opcode; // dev mode could ignore
|
||||
uint8_t dev_feat;
|
||||
uint8_t dev_feat_opcode;
|
||||
uint8_t param[];
|
||||
} *p_ins = (void *)ins;
|
||||
|
||||
static void vis_rst(uint8_t *ins, uint16_t size)
|
||||
{
|
||||
NRF_LOG_INFO("%s", __FUNCTION__);
|
||||
switch (u8_to_u16(p_ins->dev_feat, p_ins->dev_feat_opcode))
|
||||
{
|
||||
case 0xA000: {
|
||||
// gpio - CPGv1.1 default gpio state
|
||||
// 3000FFFF A000
|
||||
cpg11_io_init();
|
||||
break;
|
||||
}
|
||||
|
||||
case 0xA001: {
|
||||
// gpio - set single pin as output
|
||||
// 3000FFFF A001 0006 0001
|
||||
uint16_t pin_number = u8_to_u16(p_ins->param[0], p_ins->param[1]);
|
||||
uint16_t high_low = u8_to_u16(p_ins->param[2], p_ins->param[3]);
|
||||
set_single_pin_as_output(pin_number, high_low);
|
||||
break;
|
||||
}
|
||||
|
||||
case 0xA002: {
|
||||
// gpio - set all pin as output
|
||||
// 3000FFFF A002 0001
|
||||
uint16_t high_low = u8_to_u16(p_ins->param[0], p_ins->param[1]);
|
||||
for (int i = 1; i < ARRAY_SIZE(pin_to_gpio_table); i++)
|
||||
{
|
||||
set_single_pin_as_output(i, high_low);
|
||||
nrf_delay_us(100);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dev_mode(uint8_t *ins, uint16_t size)
|
||||
|
||||
Reference in New Issue
Block a user