extern void cywee_int_callback(pin_t pin, uintptr_t param);
#endif
+#ifdef ROTARYENCODER_HX3508
+extern void hx3508_int_callback(pin_t pin, uintptr_t param);
+#endif
+
+
/**
* @addtogroup connectivity_config_boards
* @{
// #else
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚
// #endif
-#ifdef BOARD_N9
+
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_R3 NC
-#else
- { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE },
-#endif
+
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_R4 tp reset
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R5 touch int
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R6 PRG_INT 心率中断
/**S_AGPIO_L32 GPO gps reset*/
// { S_AGPIO_L32, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
#endif
-#ifdef ENABLE_BN02
- { S_AGPIO_R3, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, bp_int_callback },
-#endif
#ifdef SUPPORT_PPG_SERVICE
#ifdef PPG_GH3X2X
{ S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, ppg_int_callback},
#ifdef ROTARYENCODER_MIXO
{ S_AGPIO_L0, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_FALLING_EDGE, mixo_int_callback},
#endif
+#ifdef ROTARYENCODER_HX3508
+ { S_AGPIO_R3, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_FALLING_EDGE, hx3508_int_callback},
+#endif
};
/**
* @}
//custom to do here
#endif //NORDIC_SDK
+#define INT_PIN S_AGPIO_R3
+
#define HX3508_I2C_BUS I2C_BUS_2
#define HAISI_SDK
static uint8_t ost_init = 0;
+static uint16_t timer_cnt = 0;
+
/*--------以下为定时函数相关定义 建立/启动/停止定时器//定时中断处理-----------*/
*/
void ots_timer_start(void)
{
- if(ots_timer_running == false)
+ // printf("ots_timer_running:%d\n",ots_timer_running);
+ if(ots_timer_running == false && g_hx3508_timer)
{
// app_timer_start(g_hx3508_timer, APP_TIMER_TICKS(50), NULL);//定义为50ms定时器间隔
- osTimerStart(g_hx3508_timer,50);
+ int ret = osTimerStart(g_hx3508_timer,20);
+ // printf("ret:%d\n",ret);
ots_timer_running = true;
}
}
void ots_timer_stop(void)
{
// app_timer_stop(g_hx3508_timer);
- osTimerStop(g_hx3508_timer);
- ots_timer_running = false;
+ if(ots_timer_running == true && g_hx3508_timer)
+ {
+ osTimerStop(g_hx3508_timer);
+ ots_timer_running = false;
+ }
+
}
/**
* 定时器超时处理函数
void ots_data_handler(void *p_event_data, uint16_t event_size)
{
+ // printf("ots_data_handler \n");
int16_t deltax = 0;
int16_t deltay = 0;
uint8_t sleepstatus = 0;
// if((ots_read_reg(RA_MOTION_BIT)&0x80)||(nrf_gpio_pin_read(PIN_TYHX_MOT)==false))
if((ots_read_reg(RA_MOTION_BIT)&0x80))
{
+ timer_cnt = 0;
stand_still = 0;
//X Y的数据必须全部被读出,但是我们只需要X的结果来判断方向和速度
deltax = ots_read_reg(RA_ACC_DELTA_X_LOW) |(ots_read_reg(RA_ACC_DELTA_X_HIG)<<8);
//用户添加程序, deltay 是表冠产生数据, 上报给UI, 如果需要数据变化,
// 积攒到一定值再上报UI, 可以调用 ots_result_deal()函数处理.
- ots_result_deal(deltax);
+ ots_result_deal(deltay);
}
else
{
+ timer_cnt++;
+ if (timer_cnt >= 200) // 20*10 = // 200ms:200ms内sensor没有检测到表冠转动就会关闭定时器重新开启中断响应
+ {
+ // printf("hx3508 enter int mode\n");
+ ots_timer_stop(); // 关闭定时器
+ uapi_pin_set_ie(INT_PIN,HAL_PIO_IE_ENBALE);
+ }
if (stand_still == 0)
{
//上次是转动,上报状态改变
}
stand_still = 1;
+ //冠轴静止的时候, 打印图像的质量和PD的饱和度, 这两个参数读取要放在出货测试的程序里面,
+ // 图像质量应该>=80, 否则可能代表芯片表面有脏污等或者装配问题或者有漏光
+ // PD的饱和度应该>=100 且 <=180, 如果有漏光等问题, 结果>=240以上, 相关漏光等要处理
+ // TYHX_LOG("pic qulity =%d, pd saturation=%d\r\n",crown_read_reg(Img_Qa),crown_read_reg(PD_SAT));
+
//debug的时候, 可能用到, 看一下图像质量
TYHX_LOG("pic qulity =%d, agc num=%d\r\n",ots_read_reg(RA_DATA_2AGC),ots_read_reg(RA_EXP_NUM_SEL)&0x7F);
}
uapi_gpio_set_dir(POWER_3V3_PIN,GPIO_DIRECTION_OUTPUT);
uapi_gpio_set_val(POWER_3V3_PIN,GPIO_LEVEL_HIGH);
+ // uapi_gpio_set_dir(INT_PIN,GPIO_DIRECTION_INPUT);
+ // uapi_pin_set_ie(INT_PIN,HAL_PIO_IE_ENBALE);
+
LOS_Mdelay(20);
int i;
ots_timer_start();
#endif
+ // uapi_pin_set_ie(INT_PIN,HAL_PIO_IE_ENBALE);
}
/**
* 停止OTS 的工作, 并进入power down, 功耗<4uA
ots_write_reg(RA_DEBUG_CAS0,0x20); //power down
//LOS_Mdelay(20);
TYHX_LOG("[ots_stop]\r\n");
-
+ // uapi_pin_set_ie(INT_PIN,HAL_PIO_IE_DISABLE);
#endif
}
/**
}
}
+void hx3508_int_callback(pin_t pin, uintptr_t param)
+{
+ // printf("hx3508_int_callback %d 0x%X\n",pin,param);
+ uapi_gpio_clear_interrupt(pin);
+ uapi_pin_set_ie(INT_PIN,HAL_PIO_IE_DISABLE);
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_ROTARY_OPEN,NULL,0);
+}
+
+void hx3508_open(void)
+{
+ ots_init();
+ ots_start(); // 启动定时器
+}
+
#else //其他平台,由用户自行添加上面对应的程序
//custom to do here