//#define DIGITAL_DIFF //Êý×Ö²î·Ö
#ifdef ANALOG_DIFF
-//#define INDEPENDDENT_CH // ¶ÀÁ¢Í¨µÀºê¶¨Òå, ¾ÍÊÇÒ»¸öPAD¶ÔÓ¦Ò»¸öCH
-#define DIFFERENCE_CH //²î·ÖͨµÀ¶¨Òå, Á½¸öPAD×÷Ϊһ¸öCHµÄ²î·ÖÕý¶ËºÍ¸º¶Ë, °¤×Ÿ첲µÄÅå´÷ΪÕý¶Ë
+#define INDEPENDDENT_CH // ¶ÀÁ¢Í¨µÀºê¶¨Òå, ¾ÍÊÇÒ»¸öPAD¶ÔÓ¦Ò»¸öCH
+//#define DIFFERENCE_CH //²î·ÖͨµÀ¶¨Òå, Á½¸öPAD×÷Ϊһ¸öCHµÄ²î·ÖÕý¶ËºÍ¸º¶Ë, °¤×Ÿ첲µÄÅå´÷ΪÕý¶Ë
#endif
+//#define HRS_VDD_ALWAYS_ON //HRS Ä£¿é³¤¹©µç
+
extern uint8_t hx3918_chip_id; // оƬID, Ó¦¸ÃµÈÓÚ0x27
int16_t nv_wear_offset[2] = {0}; // оƬ²ú²âУ׼µÄÁ½¸öͨµÀµÄOFFSETÖµ, Öµ¼Ç¼ÔÚfashÀïÃæ
-int16_t nv_base_data[2] = {0}; // оƬ²ú²âУ׼µÄÁ½¸öͨµÀµÄ¶Ô¿ÕLPÖµ, Öµ¼Ç¼ÔÚflashÀïÃæ
-uint32_t ai_tune_cnt[2] = {0}; //ai_tune_cnt[0] ¼Ç¼nv_base ×ÔѧϰÏòϸüеĴÎÊý,
-//extern uint16_t sendcnt; // À¶ÑÀÊý¾Ý²É¼¯¼ÆÊý, Õâ¸öÊDzÉÊýÓõÄ, ¿ÉÒÔ²»ÓÃ
+int16_t nv_base_data[2] = {0}; // оƬ²ú²âУ׼µÄÁ½¸öͨµÀµÄ¶Ô¿ÕLPÖµ, Öµ¼Ç¼ÔÚflashÀïÃæ
+//extern uint16_t sendcnt; // À¶ÑÀÊý¾Ý²É¼¯¼ÆÊý, Õâ¸öÊDzÉÊýÓõÄ, ¿ÉÒÔ²»ÓÃ
int16_t gdiff[2] = {0}; // gdiff[0], gdiff[1] ·Ö±ð±£´æCH0, CH1µÄ½á¹û
int16_t lp[2] = {0};
int16_t bl[2] = {0};
-//flash ¶Áд±äÁ¿, ÒÀ´Î¼Ç¼nv_wear_offset[0],nv_wear_offset[1],nv_base_data[0],nv_base_data[1],ai_tune_cnt[0],ai_tune_cnt[1]
-uint32_t fds_read[6] = {0}; //¶Á³öflash ´æ´¢Êý¾ÝµÄ±äÁ¿;
-uint32_t fds_write[6] = {0}; //дflashµÄ±äÁ¿, flashÀïÃæ·Ö±ð¼Ç¼
+//flash ¶Áд±äÁ¿, ÒÀ´Î¼Ç¼nv_wear_offset[0],nv_wear_offset[1],nv_base_data[0],nv_base_data[1]
+uint32_t fds_read[4] = {0}; //¶Á³öflash ´æ´¢Êý¾ÝµÄ±äÁ¿;
+uint32_t fds_write[4] = {0}; //дflashµÄ±äÁ¿, flashÀïÃæ·Ö±ð¼Ç¼
-//prox_work_mode = RELATIVE_MODE, Ïà¶Ôֵģʽ, ²âÁ¿½á¹û = LP-BL
-//prox_work_mode = ABSOLUTE_MODE, ¾ø¶Ôֵģʽ, ²âÁ¿½á¹û = LP - NV_BASE;
-uint8_t prox_work_mode = RELATIVE_MODE;
uint8_t is_factory_mode = 0; // ²ú²âģʽ, ÓÃÀ´¶ÁÈ¡Õû»ú¶Ô¿ÕʱOFFSETºÍ¶Ô¿ÕµÄnv_baseÖµ;
uint8_t wear_detect_mode = NORMAL_WEAR_MODE;
mid =(writeoffset+recordoffset)/2;
lp = readlp_after_writeoffset(mid,chx_offset);
- if(hx_abs(lp)>1300)
+ if(hx_abs(lp)>READ_DEVATION)
{
- if(lp>1300)
+ if(lp>READ_DEVATION)
{
writeoffset = mid+1;
}
write_ok &= hx3918_write_reg(0x53,0x00); //default??
-#ifdef INDEPENDDENT_CH //ÓÉʵ¼ÊÓ²¼þ¾ö¶¨, Òª¿´µç·ͼ
- write_ok &= hx3918_write_reg(0x55,0x0C); //CS1->CH0
- write_ok &= hx3918_write_reg(0x57,0x30); //CS2->CH1
-#elif defined(DIFFERENCE_CH) //ÓÉʵ¼ÊÓ²¼þ¾ö¶¨, Òª¿´µç·ͼ
- write_ok &= hx3918_write_reg(0x55,0x2c); //CS1->CH0[P],CS2->CH0[N]
- write_ok &= hx3918_write_reg(0x57,0x30); //CS2->CH1
+#ifdef INDEPENDDENT_CH //
+// write_ok &= hx3918_write_reg(0x55,0x0C); //CS1->CH0
+ write_ok &= hx3918_write_reg(0x55,0x03); //CS0->CH0
+
+
+// write_ok &= hx3918_write_reg(0x57,0x30); //CS2->CH1
+// write_ok &= hx3918_write_reg(0x57,0x03); //CS0->CH1
+ write_ok &= hx3918_write_reg(0x57,0x0c); //CS1->CH1
+
+#elif defined(DIFFERENCE_CH) //?????????????¡§, ???????¡¤??
+// write_ok &= hx3918_write_reg(0x55,0x2c); //CS1->CH0[P],CS2->CH0[N]
+// write_ok &= hx3918_write_reg(0x55,0x0e); //CS1->CH0[P],CS0->CH0[N]
+ write_ok &= hx3918_write_reg(0x55,0x0B); //CS0->CH0[P],CS1->CH0[N]
+// write_ok &= hx3918_write_reg(0x57,0x30); //CS2->CH1
+// write_ok &= hx3918_write_reg(0x57,0x03); //CS0->CH1
+ write_ok &= hx3918_write_reg(0x57,0x0c); //CS1->CH1
#endif
write_ok &= hx3918_write_reg(0x56,0x00); //default
write_ok &= hx3918_write_reg(0x58,0x00); //default
write_ok &= hx3918_write_reg(0x7A,0x07); //²¹³¥µçÈÝУ׼´¥·¢ÉèÖÃ=16384
-#ifdef INDEPENDDENT_CH
-
- prox_work_mode = RELATIVE_MODE;
-#endif
- if (prox_work_mode == RELATIVE_MODE)
+ if(is_factory_mode)
{
- TYHX_LOG("RELATIVE_MODE\r\n");
- write_ok &= hx3918_write_reg(0x70,0xaa);
- write_ok &= hx3918_write_reg(0x72,0x40);
+ TYHX_LOG("is_factory_mode\r\n");
+
+ write_ok &= hx3918_write_reg(0x70,0x66);
+ write_ok &= hx3918_write_reg(0x72,0x20);
write_ok &= hx3918_write_reg(0x73,0x04);
write_ok &= hx3918_write_reg(0x90,0x77);
write_ok &= hx3918_write_reg(0x8F,0x00);
write_ok &= hx3918_write_reg(0x95,0x00);
hx3918_config_thres(CH0,CH0_HIGH_DIFF, CH0_LOW_DIFF,0); // wear0
hx3918_config_thres(CH1,CH1_HIGH_DIFF, CH1_LOW_DIFF,0); // wear0
+
}
else
{
- TYHX_LOG("ABSOLUTE_MODE\r\n");
- write_ok &= hx3918_write_reg(0x70,0x22);
+ write_ok &= hx3918_write_reg(0x70,0x66);
write_ok &= hx3918_write_reg(0x72,0x20);
write_ok &= hx3918_write_reg(0x73,0x02);
- write_ok &= hx3918_write_reg(0x90,0x07);
+ write_ok &= hx3918_write_reg(0x90,0x77);//0x07
write_ok &= hx3918_write_reg(0x8F,0x07);
- write_ok &= hx3918_write_reg(0x95,0x0a);
+ write_ok &= hx3918_write_reg(0x95,0x00);//0x0a
hx3918_write_offset(nv_wear_offset[0], CH0_OFFSET);
hx3918_write_offset(nv_wear_offset[1], CH1_OFFSET);
hx3918_config_thres(CH0,CH0_HIGH_DIFF, CH0_LOW_DIFF,nv_base_data[0]); // wear0
hx3918_config_thres(CH1,CH1_HIGH_DIFF, CH1_LOW_DIFF,nv_base_data[1]); // wear0
hx3918_write_reg(0x7A,0x17);
}
- write_ok &= hx3918_write_reg(0x6a,0x03); //CH0, CH1 enable
+
+ write_ok &= hx3918_write_reg(0x6a,0x03); //CH0, CH1 enable
#endif
hx3918_delay(50);
return write_ok;
*/
uint8_t hx3918_report_prox_status(void)
{
-
-
+ static int16_t lp_old[2] = {0};
+ static int16_t bl_old[2] = {0};
+ uint8_t ret = 0;
lp[0] = hx3918_read_diff_lp(LP0);
bl[0] = hx3918_read_raw_bl(BL0);
lp[1] = hx3918_read_diff_lp(LP1);
bl[1] = hx3918_read_raw_bl(BL1);
- if (prox_work_mode == RELATIVE_MODE)
- {
- gdiff[0] = lp[0]- bl[0];
- gdiff[1] = lp[1]- bl[1];
- }
+
+ gdiff[0] = lp[0]- bl[0];
+ gdiff[1] = lp[1]- bl[1];
+
+
+ HX3918_LOG("result = %d %d %d %d %d %d\r\n",lp[0],bl[0],lp[1],bl[1],gdiff[0],gdiff[1]);
+ if(gdiff[0]>100)
+ ret = 1;
else
{
- gdiff[0] = lp[0]- nv_base_data[0];
- gdiff[1] = lp[1]- nv_base_data[1];
- }
- //sendDataToClient(lp[0],bl[0],lp[1],bl[1]);
- if(prox_work_mode==ABSOLUTE_MODE)
- {
- TYHX_LOG("[absolute mode] %d %d %d %d %d %d\r\n",lp[0],bl[0],lp[1],bl[1],gdiff[0],nv_base_data[0]);
- }
- else
- {
- TYHX_LOG("[relatvie mode] %d %d %d %d %d %d\r\n",lp[0],bl[0],lp[1],bl[1],gdiff[0],nv_base_data[0]);
- }
-
-#ifdef TEMP_COMPENSATION //ζȲ¹³¥
- //Õâ¸öÊÇÓ¦¶Ô¸ßλ·¾³ÒªÇó, ²»Óôò¿ª, Òª¿´¿´¾ßÌåÇé¿ö,
- if(gdiff[1]>20000)
- {
- gdiff[0] = gdiff[0]*0.9; // Èç¹ûËæ×ŸßÎÂ,¸ÐÓ¦ÖµÉÏÉý,Ϊ0.9, ¸ÐӦֵϽµ¸ÄΪ1.1
- }
-#endif
-
- if(gdiff[0]<WEARTHRES)
- {
- if((gdiff[0]>=SLEEPWEARTHRES)&&(wear_detect_mode == SLEEP_WEAR_MODE ))
+ if((lp_old[0] - lp[0]) > 40)
+ ret = 0;
+ else
{
- return prox_detect;
+ if(lp[0]>3300)
+ ret = 1;
+ else
+ ret = 0;
}
- return prox_no_detect;
- }
- else
- {
- return prox_detect;
+
}
+ lp_old[0] = lp[0];
+ lp_old[1] = lp[1];
+ bl_old[0] = bl[0];
+ bl_old[1] = bl[1];
+ return ret;
+// #ifdef TEMP_COMPENSATION //ζȲ¹³¥
+// //Õâ¸öÊÇÓ¦¶Ô¸ßλ·¾³ÒªÇó, ²»Óôò¿ª, Òª¿´¿´¾ßÌåÇé¿ö,
+// if(gdiff[1]>20000)
+// {
+// gdiff[0] = gdiff[0]*0.9; // Èç¹ûËæ×ŸßÎÂ,¸ÐÓ¦ÖµÉÏÉý,Ϊ0.9, ¸ÐӦֵϽµ¸ÄΪ1.1
+// }
+// #endif
+ // if(gdiff[0]<WEARTHRES)// WEARTHRES=9000/2
+ // {
+ // if((gdiff[0]>=SLEEPWEARTHRES)&&(wear_detect_mode == SLEEP_WEAR_MODE ))//SLEEPWEARTHRES=9000*0.3
+ // {
+ // return prox_detect;
+ // }
+ // return prox_no_detect;
+ // }
+ // else
+ // {
+ // return prox_detect;
+ // }
}
void hx3918_read_nv(void)
{
- //´Óflash¶ÁÈ¡6¸öÖµ, ·Ö±ðÊÇÒÔǰ±£´æµÄÖµ; Õâ¸öº¯ÊýÓû§ÐèÒª×Ô¼ºÍê³É, flash´æ´¢µÄλÖò»Äܱ»Óû§²Ù×÷ɾµô
- //flash_fds_data_get(6);
- nv_wear_offset[0] = fds_read[0];
- nv_wear_offset[1] = fds_read[1];
- nv_base_data[0] = fds_read[2];
- nv_base_data[1] = fds_read[3];
- ai_tune_cnt[0] = fds_read[4];
- ai_tune_cnt[1] = fds_read[5];
+ //´Óflash¶ÁÈ¡4¸öÖµ, ·Ö±ðÊÇÒÔǰ±£´æµÄÖµ; Õâ¸öº¯ÊýÓû§ÐèÒª×Ô¼ºÍê³É, flash´æ´¢µÄλÖò»Äܱ»Óû§²Ù×÷ɾµô
+ //flash_fds_data_get(4);
+ nv_wear_offset[0] = 468;
+ nv_wear_offset[1] = 82;
+ nv_base_data[0] = -382;
+ nv_base_data[1] = -389;
- TYHX_LOG("[hx3918_read_nv]\r\n");
- TYHX_LOG("OFF[0]: %d, OFF[1]:%d\r\n",nv_wear_offset[0],nv_wear_offset[1]);
- TYHX_LOG("BASE[0]: %d, BASE[1]:%d\r\n",nv_base_data[0],nv_base_data[1]);
- TYHX_LOG("ai_tune_cnt[0]: %d, ai_tune_cnt[1]:%d\r\n",ai_tune_cnt[0],ai_tune_cnt[1]);
-
- //Èç¹ûflash¼Ç¼µÄÖµ´óÓÚÉÏÏÞ, ÔòÈÿ¿½ü¸ÐÓ¦½øÈëÏà¶Ôֵģʽ
+ //Èç¹ûflash¼Ç¼µÄÖµ´óÓÚÉÏÏÞ, ÔòÈÿ¿½ü¸ÐÓ¦½øÈëÏà¶Ôֵģʽ
if(nv_wear_offset[0] > 1020)
{
- nv_wear_offset[0] = 0xffff;
+ nv_wear_offset[0] = 0;
nv_base_data[0] = 0;
+ nv_wear_offset[1] = 0;
+ nv_base_data[1] = 0;
}
+ TYHX_LOG("[hx3918_read_nv]\r\n");
+ TYHX_LOG("OFF[0]: %d, OFF[1]:%d\r\n",nv_wear_offset[0],nv_wear_offset[1]);
+ TYHX_LOG("BASE[0]: %d, BASE[1]:%d\r\n",nv_base_data[0],nv_base_data[1]);
- if (nv_wear_offset[0] == 0 && nv_base_data[0] == 0)
- {
- nv_wear_offset[0] = 0xFFFF;
- }
- if (nv_wear_offset[0] == 0xFFFF || is_factory_mode == 1 )
- {
- prox_work_mode = RELATIVE_MODE;//Ïà¶Ôֵģʽ
- }
- else
- {
- prox_work_mode = ABSOLUTE_MODE;//¾ø¶Ôֵģʽ
- }
+
+
}
/**
hx3918_power_restart();
//i2c_hrs_init();
- prox_work_mode = RELATIVE_MODE;
+
hx3918_ppg_on();
hx3918_prox_reg_init();
for (i = 0; i<5; i++)
lp[0] = hx3918_read_diff_lp(LP0);
lp[1] = hx3918_read_diff_lp(LP1);
- TYHX_LOG("offset0,offset1= %d %d\r\n", offset0,offset1);
+ HX3918_LOG("offset0,offset1= %d %d\r\n", offset0,offset1);
#ifdef INDEPENDDENT_CH
if((offset0-offset1)<100)
{
- TYHX_LOG("ERR, resize cap of ch0\r\n");
+ HX3918_LOG("ERR, resize cap of ch0\r\n");
}
#endif
nv_wear_offset[1] = offset1;
nv_base_data[0] = lp[0];
nv_base_data[1] = lp[1];
- TYHX_LOG("base0,base1= %d %d\r\n", lp[0],lp[1]);
+ HX3918_LOG("base0,base1= %d %d\r\n", lp[0],lp[1]);
#ifdef DIFFERENCE_CH
//½«²î·ÖÊý¾Ý¶Áµ½µÄOFFSET, NV_BASE¼Ç¼µ½FLASHÀïÃæ, У׼´æ´¢°Ñ×ÔѧϰµÄ¼Ç¼ҲÐèÒªÇåµôÖØÐ¼ÆËã
- ai_tune_cnt[0] = 0;
- ai_tune_cnt[1] = 0;
- hx3918_factory_cali_save_nv();
+
+ if((offset0 == 510) &&(offset1 == 510))
+ {
+ TYHX_LOG("ERR, read offset err, please redo it !!!\r\n");
+ }
+ else
+ {
+ hx3918_factory_cali_save_nv();
+ }
#endif
- hx3918_ppg_off();
+ hx3918_ppg_off();
is_factory_mode = 0;
}
fds_write[2] = nv_base_data[0];
fds_write[3] = nv_base_data[1];
- fds_write[4] = ai_tune_cnt[0];
- fds_write[5] = ai_tune_cnt[1];
TYHX_LOG("[hx3918_factory_cali_save_nv]");
- for(int i=0; i<6; i++)
+ for(int i=0; i<4; i++)
{
TYHX_LOG("%d ",fds_write[i]);
}
- //flash_fds_data_write(6);
+ //Óû§ÐèÒªflash±£´æ
+ //flash_fds_data_write(4);
}
/**
bool hx3918_get_wear_result(uint8_t ppg_wear)
{
uint8_t prox_result;
+ // hx3918_prox_factory_hanging_cali();
+ // return true;
if(ppg_wear == 0)
{
- prox_result = hx3918_report_prox_status();
+#ifdef DEBUG_PPG_ONLY
+ return false;
+#endif
return false;
}
else
#ifdef DEBUG_PPG_ONLY
return true;
#endif
- prox_result = hx3918_report_prox_status();
+
+ prox_result = hx3918_report_prox_status();
+ //hx3918_prox_factory_hanging_cali();
+ HX3918_LOG("hx3918_get_wear_result:prox_result:%d",prox_result);
if(prox_result == 0)
{
return false;
}
}
-/**
- * HX3918 ×ÔÎÒУ׼ºǫִ́ÐгÌÐò, Åöµ½ÒòΪż·¢ÐÔµÄÒòÄÚ²¿½á¹¹µÈ±ä»¯ÒýÆð¿¿½ü¸ÐÓ¦µÄ¶Ô¿Õ»ù×¼Öµ·¢Éú´óµÄ±ä»¯,
- * ÊÖ±í¶ÔÔÚ·ÇÅå´÷ʱ, ¿ÉÖ´ÐÐÒ»´Î¿¿½ü¸ÐÓ¦µÄ×ÔÎÒУ׼.
- ´¥·¢Ìõ¼þ, µ±IR¼ì²âΪ¶Ô¿Õ, ÇÒµ±Ç°LPµÍÓÚ-3000, ´¥·¢ºǫ́У׼. Õâ¸ö³ÌÐòÔÚ¼ì²âÅå´÷µÄº¯ÊýÖб»µ÷ÓÃ
-* @param irval ÔÚÅå´÷¼ì²âģʽʱ²âÊÔµ½µÄÖµ
-*/
-void hx3918_auto_cali_backgroud(int32_t irval)
-{
- uint8_t prox_result;
-
- if(irval>HX3918_IR_AIR)
- return;
- prox_result = hx3918_report_prox_status();
-
- if(prox_result == prox_no_detect)
- {
- if((nv_base_data[0]<AUTOCALITHRES)&&(lp[0]<AUTOCALITHRES))
- {
- hx3918_prox_factory_hanging_cali();
- TYHX_LOG("hi, auto cali\r\n");
- }
- }
-}
-
-
-#define FILTERLEN 8 // Õâ¸öÖµ±ØÐë´óÓÚµÈÓÚ4
-/**
-* ÖÐλֵƽ¾ùÂ˲¨
-* @param pData: ÔʼµÄLPÂ˲¨Êý¾Ý
-* @param nSize:Êý¾Ý´óС
-* @return:Â˲¨ÊýÖµ
-*/
-
-int16_t MedianFilter(int16_t* pData,int nSize)
-{
- int16_t max,min;
- int sum;
- if(nSize>=FILTERLEN)
- {
- max = pData[0];
- min = max;
- sum = 0;
- for(int i=0; i<nSize; i++)
- {
- sum += pData[i];
- if(pData[i]>max)
- {
- max = pData[i]; //Ò»¸öÑ»·Ö®ºómax¾ÍÊÇ×î´óµÄÖµ
- }
-
- if(pData[i]<min)
- {
- min = pData[i]; //Ò»¸öÑ»·Ö®ºómin¾ÍÊÇ×îСµÄÖµ
- }
- }
-
- sum = sum-max-min; //È¥µô×î´óµÄÖµºÍ×îСµÄÖµ
- return sum/(nSize-2); //¶ÔN-2¸öÊýÇ󯽾ùÖµ
- }
-
- return 0;
-}
-
-
-/**
- * HX3918 ÏòÏÂУ׼¶Ô¿ÕÖµ, Èç×°ÅäµÈÎÊÌâµ¼ÖµçÈÝÓÐСµÄÏòÏÂÆ¯ÒÆ, »òÕßpad¿ÉÄÜÓÐСµÄÐαäµÈÒýÆðµÄ¸ÐÓ¦Öµ±äС.
- ͨ¹ýÕâ¸ö³ÌÐò У׼¶Ô¿ÕµÄnv_base; ÊÖ±íÔÚ
-* @param prevlp ÔÚÅå´÷¼ì²âģʽʱ²âÊÔµ½µÄÉÏÒ»¸öLPµÄÖµ
-* @param chargetstate ³äµç״̬ = true, ΪÁ˽«nv_base×ÔѧϰÏòÉÏÒ»µã, Èç¹û³äµçµÄʱºòÊÖ±íÍâ¿Ç½Ó´¥µ¼Ìå×ÀÃæµÈ,²»½¨Òé´ò¿ªÕâ¸ö
-*/
-void hx3918_ai_tune_nv(int16_t prevlp,int16_t prevbl)
-{
- int16_t lpresult,blresult;
- int16_t differ;
- static uint8_t receivercnt = 0; //½ÓÊܵ½µÄlpµÄ¼ÆÊý
- static int16_t lp_filter[FILTERLEN] = {0};
- static int16_t bl_filter[FILTERLEN] = {0};
- static bool flashrecordupdate = false;;
- static uint32_t get_record_time;
- uint32_t get_new_time;
-
- if (prox_work_mode == ABSOLUTE_MODE)
- {
- for(int ii=0; ii<(FILTERLEN-1); ii++)
- {
- lp_filter[ii] = lp_filter[ii+1];
- bl_filter[ii] = bl_filter[ii+1];
-
- }
- lp_filter[FILTERLEN-1] = prevlp;
- bl_filter[FILTERLEN-1] = prevbl;
- if(receivercnt<FILTERLEN)
- {
- receivercnt++;
- }
- if(receivercnt>=FILTERLEN)
- {
- lpresult = MedianFilter(lp_filter,FILTERLEN);
- blresult = MedianFilter(bl_filter,FILTERLEN);
- TYHX_LOG("lp =%d, bl = %d, receivercnt=%d\r\n",lpresult,blresult,receivercnt);
- if((blresult>=ONAIRTHRESLOW) && (blresult<=ONAIRTHRESHIGH)&&(lpresult>=ONAIRTHRESLOW) && (lpresult<=ONAIRTHRESHIGH))
- {
- if((hx_abs(blresult -nv_base_data[0] )>=DIFFDETECT) &&(hx_abs(lpresult-blresult)<=100))
- {
- differ = blresult-nv_base_data[0];
- TYHX_LOG("detect lp =%d, bl = %d, nv_base=%d\r\n",lpresult,blresult,nv_base_data[0]);
- nv_base_data[0] += (differ/2);
- hx3918_config_thres(CH0,CH0_HIGH_DIFF, CH0_LOW_DIFF,nv_base_data[0]); // wear0
- get_record_time = app_timer_cnt_get();
- flashrecordupdate = true;
- }
- }
- }
- if(flashrecordupdate)//¼ä¸ô2·ÖÖÓÈç¹ûÓÐÐèÒª¼Ç¼flashÒ»´Î, ·ÀÖ¹ÖØ¸´Ð´flash, Õâ¸öʱ¼äÓɸ÷×ÔÆ½Ì¨´¦Àí.
- {
- get_new_time = app_timer_cnt_get(); //»»Ëã³ÉÃë;
- if (get_new_time >= get_record_time)//
- {
- get_new_time = ((get_new_time - get_record_time) )>>15;
- }
- else
- {
- get_new_time = ((get_new_time + 16777216 - get_record_time) ) >>15;
- }
- get_new_time *=2;
- if(get_new_time>=120)//120 Ãë
- {
- ai_tune_cnt[0]++;
- TYHX_LOG("write nv_base=%d, updata cnt = %d\r\n",nv_base_data[0],ai_tune_cnt[0] );
- hx3918_factory_cali_save_nv();
- flashrecordupdate = false;
- get_new_time = 0;
- }
- }
- }
-}
#include "helios_debug.h"
#include "hx3918.h"
+#include "hx3918_factory_test.h"
#include "autoconf.h"
extern void sensor_thread_entry(void * argv);
extern Helios_ThreadAttr ThreadAttr;
extern Helios_Thread_t sensor_thread_id ;
-#define HX3918_LOG(msg, ...) custom_log("HX3918", msg, ##__VA_ARGS__)
+//#define HX3918_LOG(msg, ...) custom_log("HX3918", msg, ##__VA_ARGS__)
//////////////////////////////////////////////////////////////////////////////
typedef struct _HX3918_obj_t
{
// hx3918_ppg_timerout_flag = 0;
// }
wear_time++;
- if(wear_time > 3)
+ if(wear_time > 1)
{
wear_time = 0;
+ //hx3918_prox_factory_hanging_cali();
ir_wear = hx3918_get_wear_ppg_Int_handle();
cap_wear = hx3918_report_prox_status();
+
HX3918_LOG("ir_wear:%d cap_wear%d\n",ir_wear,cap_wear);
+ if(ir_wear == 1 && cap_wear==1)
+ {
+ s_HX3918_wear_status = 1;
+ }else
+ s_HX3918_wear_status = 0;
}
#if CONFIG_SC7A20
if(ir_wear == 1 || cap_wear==1)
+ {
SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO();
+
+ }
+
#endif
Helios_msleep(1000);
void HX3918_result_set_wear_status(unsigned char wear_status)
{
s_HX3918_wear_status = wear_status;
+ //HX3918_LOG("s_HX3918_wear_status:%d !!!!!!!!!!!!!!!!!\n\n\n",s_HX3918_wear_status);
}
void HX3918_result_set_blood_oxygen(unsigned char blood_oxygen)
{
s_HX3918_high_blood = 0x0;
s_HX3918_low_blood = 0x0;
s_HX3918_HRV = 0;
- s_HX3918_wear_status = 0;
+ //s_HX3918_wear_status = 0;
s_HX3918_blood_oxygen = 0x0;
if(hx3918_init(mode) == true)
//HX3918_run_mode = HRV_MODE;
return mp_obj_new_int(1);
}
+//打开测试模式
+STATIC mp_obj_t mp_HX3918_open_test(mp_obj_t self_in,mp_obj_t val1)
+{
+ HX3918_obj_t *self = MP_OBJ_TO_PTR(self_in);
+ HX3918_run_mode = mp_obj_get_int(val1);
+ return mp_obj_new_int(1);
+}
+
void HX3918_close(void)
{
if(is_open_HX3918 == 1)
hx3918_init(WEAR_MODE);//打开佩戴检测
}
+
//关闭hsensor
STATIC mp_obj_t mp_HX3918_close(mp_obj_t self_in)
{
//获取血压
STATIC mp_obj_t mp_HX3918_get_blood_pressure(mp_obj_t self_in)
{
- mp_obj_t coordinate_list[2] = {s_HX3918_high_blood, s_HX3918_low_blood,};
+ mp_obj_t coordinate_list[2] = {mp_obj_new_int(s_HX3918_high_blood), mp_obj_new_int(s_HX3918_low_blood),};
return mp_obj_new_list(2, coordinate_list);
}
//获取hrv
{
return mp_obj_new_int(s_HX3918_HRV);
}
-//hx3918_report_prox_status();获取电容佩戴状态
-//SENSOR_ERROR_T hx3918_check_touch_enable(void);获取红外佩戴状态
+// ir_wear = hx3918_get_wear_ppg_Int_handle();
+// cap_wear = hx3918_report_prox_status();
//获取佩戴状态
STATIC mp_obj_t mp_HX3918_get_wear(mp_obj_t self_in)
{
-
- return mp_obj_new_int(s_HX3918_wear_status);
+ mp_obj_t coordinate_list[3] = {mp_obj_new_int((int)ir_wear), mp_obj_new_int((int)cap_wear),mp_obj_new_int((int)s_HX3918_wear_status),};
+ return mp_obj_new_list(3, coordinate_list);
+ //return mp_obj_new_int(s_HX3918_wear_status);
}
//获取所有数据 心律、血氧、高压、低压、HRV、佩戴状态
STATIC mp_obj_t mp_HX3918_get_all_data(mp_obj_t self_in)
mp_obj_new_int((int)s_HX3918_HRV),mp_obj_new_int((int)s_HX3918_wear_status)};
return mp_obj_new_list(6, coordinate_list);
}
+
+extern factory_result_t factory_reslts;
+//FT_LEAK_LIGHT_MODE 产测漏光测试模式;
+//FT_GRAY_CARD_MODE 产测灰卡测试模式;
+//LAB_TEST_MODE 实验室模式。
+STATIC mp_obj_t mp_HX3918_get_test_data(mp_obj_t self_in)
+{
+ mp_obj_t coordinate_list[3] = {mp_obj_new_int((int)factory_reslts.green_data_final),mp_obj_new_int((int)factory_reslts.red_data_final),\
+ mp_obj_new_int((int)factory_reslts.ir_data_final)};
+ return mp_obj_new_list(3, coordinate_list);
+}
//设置sleep
STATIC mp_obj_t mp_HX3918_set_sleep(mp_obj_t self_in)
{
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_get_blood_oxygen_obj, mp_HX3918_get_blood_oxygen);//
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_get_heart_obj, mp_HX3918_get_heart);//
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_get_blood_pressure_obj, mp_HX3918_get_blood_pressure);//
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_get_weart_obj, mp_HX3918_get_wear);//
+STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_get_wear_obj, mp_HX3918_get_wear);//
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_open_heart_obj, mp_HX3918_open_heart);//
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_open_blood_oxygen_obj, mp_HX3918_open_blood_oxygen);//
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_open_hrv_obj, mp_HX3918_open_hrv);//
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_get_all_data_obj, mp_HX3918_get_all_data);//
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_close_obj, mp_HX3918_close);//
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_set_sleep_obj, mp_HX3918_set_sleep);//
+STATIC MP_DEFINE_CONST_FUN_OBJ_2(mp_HX3918_open_test_obj, mp_HX3918_open_test);
+STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_get_test_data_obj, mp_HX3918_get_test_data);//
STATIC const mp_rom_map_elem_t HX3918_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&mp_init_HX3918_obj) },
{ MP_ROM_QSTR(MP_QSTR_get_blood_oxygen), MP_ROM_PTR(&mp_HX3918_get_blood_oxygen_obj)},
{ MP_ROM_QSTR(MP_QSTR_get_heart), MP_ROM_PTR(&mp_HX3918_get_heart_obj)},
{ MP_ROM_QSTR(MP_QSTR_get_blood_pressure), MP_ROM_PTR(&mp_HX3918_get_blood_pressure_obj)},
- { MP_ROM_QSTR(MP_QSTR_get_weart), MP_ROM_PTR(&mp_HX3918_get_weart_obj)},
+ { MP_ROM_QSTR(MP_QSTR_get_wear), MP_ROM_PTR(&mp_HX3918_get_wear_obj)},
{ MP_ROM_QSTR(MP_QSTR_open_heart), MP_ROM_PTR(&mp_HX3918_open_heart_obj)},
{ MP_ROM_QSTR(MP_QSTR_open_blood_oxygen), MP_ROM_PTR(&mp_HX3918_open_blood_oxygen_obj)},
{ MP_ROM_QSTR(MP_QSTR_open_hrv), MP_ROM_PTR(&mp_HX3918_open_hrv_obj)},
{ MP_ROM_QSTR(MP_QSTR_get_all_data), MP_ROM_PTR(&mp_HX3918_get_all_data_obj)},
{ MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&mp_HX3918_close_obj)},
{ MP_ROM_QSTR(MP_QSTR_set_sleep), MP_ROM_PTR(&mp_HX3918_set_sleep_obj)},
+ { MP_ROM_QSTR(MP_QSTR_open_test), MP_ROM_PTR(&mp_HX3918_open_test_obj)},
+ { MP_ROM_QSTR(MP_QSTR_get_test_data), MP_ROM_PTR(&mp_HX3918_get_test_data_obj)},
};
STATIC MP_DEFINE_CONST_DICT(HX3918_locals_dict, HX3918_locals_dict_table);