K18
author@CHENG <2393524978@qq.com>
Thu, 11 Apr 2024 09:11:02 +0000 (17:11 +0800)
committer@CHENG <2393524978@qq.com>
Thu, 11 Apr 2024 09:11:02 +0000 (17:11 +0800)
1.doc/K18/BLE_Watch/code/sensor_drive.c
1.doc/K18/BLE_Watch/code/sensor_drive.h
1.doc/K18/BLE_Watch/keil/VC9202/vc9202_driver.c
1.doc/K18/BLE_Watch/keil/VC9202/vc9202_user.c
1.doc/K18/BLE_Watch/keil/uart.c

index 4b5210e..3971835 100644 (file)
@@ -441,6 +441,7 @@ char HRS_test(void)
                        vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1);      
                        //co_printf("HRS_test2!!!!!!!!\n");
                        uart0_receive();//串口0接收数据处理
+                       irq_flag = 0;
                }
        }
     return send_hrs_data_flag;
@@ -641,6 +642,7 @@ char YYL_test(void)
                                // sensor_INT();//唤醒上位机
                                // co_delay_10us(100*1000);
                        }
+                       irq_flag = 0;
                        //co_printf("YYL_test2!!\n");   
                }
        }
@@ -689,6 +691,7 @@ void get_tp_data()
        co_delay_100us(500);
        //                              }
 }
+#if 0
 void temp_test(void)
 {
     
@@ -723,6 +726,55 @@ void temp_test(void)
        //co_delay_100us(1000); 
        
 }
+#else
+
+void send_temp_data(void)
+{
+       //co_printf("[CHENG]:send_temp_data\r\n");
+       get_tp_data();
+       UART_send_buf_len = snprintf((char *)UART_send_buf,UART_SEND_MAX,"{\"cmd\":\"2\",\"temp_data\":\"");
+       uart0_write_for_hci(UART_send_buf,UART_send_buf_len,NULL, NULL); 
+       float shi=0.00,ge=0.00;
+       shi=(temper_data/256)/10;
+       ge=(temper_data/256)%10;
+       uart_putc_noint(UART0,(int)(shi+48));  //0x30
+       uart_putc_noint(UART0,(int)(ge+48));
+       uart_putc_noint(UART0,'.');     
+       shi = temper_data;
+       shi = shi/256;  
+       shi = (int)(shi*100)%100/10;  
+       uart_putc_noint(UART0,(int)shi+48);  //0x30
+       ge= temper_data;
+       ge = ge/256;  
+       ge = (int)(ge*100)%100%10;  
+       uart_putc_noint(UART0,(int)ge+48);  //0x30
+       uart0_write_for_hci(uart0_residue_data, 3,  NULL, NULL);        
+       //co_delay_100us(1000); 
+}
+
+char temp_test(void)
+{
+       bool irq_flag=0;
+       while(send_temp_data_flag)
+       {
+               while(gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==1&&send_temp_data_flag)//等待HR_INT变低    
+               {
+                       //vcHr02IRQHandler();   
+                       co_delay_100us(10);
+                       uart0_receive();//串口0接收数据处理
+                       irq_flag = 1;
+               } 
+               while((gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==0)&&irq_flag&&send_temp_data_flag)//等待HR_INT变高              //高电平获取数据
+               {
+                       vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1);      
+                       uart0_receive();//串口0接收数据处理
+                       irq_flag = 0;
+               }
+       }
+    return send_temp_data_flag;
+}
+#endif
+
 void gsensor_test(void)
 {
        
@@ -863,6 +915,18 @@ void SPO2_open(void)//血氧
        
        //vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1);
 }
+
+void temp_open(void)
+{
+       gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 1);  //心率使能 
+       gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能
+       //pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断
+       pInit_Param.work_mode = WORK_MODE_WEAR; // WORK_MODE_TEMPERATURE;
+       vc9202_usr_init(&pInit_Param);
+       send_temp_data_flag = 1;
+       //co_printf("[CHENG]:temp_open\r\n");
+}
+
 void wear_open(void)//佩戴
 {
 
@@ -935,6 +999,8 @@ void sensor_while(void)
                wear_test();
                // /////////////////////工厂模式/////////////////////////////
                factory_test();
+
+               temp_test();
        }
        //if(BP_IRQ_FLAG == 1)
        {
index 72b540b..05da144 100644 (file)
@@ -20,6 +20,7 @@ void YYL_open(void);//中医
 void HRS_open(void);//心率
 void SPO2_open(void);//血氧
 void wear_open(void);//佩戴
+void temp_open(void);
 void sensor_close(void);
 void gsensor_init(void);
 char BP_test(void);
@@ -31,7 +32,8 @@ char YYL_test(void);
 void YYL_test_timer(void);
 char EMO_test(void);
 void get_tp_data(void);
-void temp_test(void);
+//void temp_test(void);
+void send_temp_data(void);
 void gsensor_test(void);
 void VC9202_init(void);
 void HA_lib_init(void);
index 7a1adca..f15c78d 100644 (file)
@@ -345,12 +345,39 @@ WearStatusTypeDef vc9202_drv_get_wear_status(void)
        if ((event & VC9202_EVENT_PS_MARK) && (en_int & (1 << 4)))
        {
                wear_interrupt = 1;
+               //co_printf("[10]:000000\r\n");
        }
        /* 未使能PsInt下,ps_ppg同频通过fifo中断去识别摘配带 */
        if (event & VC9202_EVENT_FIFO_MARK)
        {
                wear_interrupt = 1;
+               //co_printf("[11]:111111\r\n");
        }
+       //co_printf("[12]:222222=%d\r\n", event);
+
+       /* WORK_MODE_HRV 100HZ, wear off status check error */
+       if (WORK_MODE_HRV == dev9202_info.work_mode)
+       {
+               static unsigned char wear_int_counter = 0;
+               if(0 == wear_interrupt)
+               {
+                       wear_int_counter++;
+                       //co_printf("[13]:333333=%d\r\n", wear_int_counter);
+               }
+               else
+               {
+                       wear_int_counter = 0;
+                       //co_printf("[14]:444444=%d\r\n", wear_int_counter);
+               }
+               if(10 <= wear_int_counter)
+               {
+                       wear_interrupt = 1;
+                       wear_int_counter = 0;
+                       //co_printf("[15]:555555=%d\r\n", wear_int_counter);
+               }
+       }
+       /* WORK_MODE_HRV 100HZ, wear off status check error */
+
 #endif
        /* 非心率模式,就算使能了运动量,也没有去做处理,直接置1忽略 */
        if (dev9202_info.work_mode != WORK_MODE_HR && dev9202_info.work_mode != WORK_MODE_WEAR)
index 09cbe19..f098696 100644 (file)
@@ -747,16 +747,16 @@ void vc9202_usr_interrupt_handler( AlgoSportMode hr_alg_mode, unsigned char spo2
                        break;
 
                case WORK_MODE_HRV:
-                       if( vc9202_usr_get_int_reason()&(VC9202_EVENT_PS_MARK|VC9202_EVENT_FIFO_MARK) )
+                       /* WORK_MODE_HRV 100HZ, wear off status check error */
+                       // if( vc9202_usr_get_int_reason()&(VC9202_EVENT_PS_MARK|VC9202_EVENT_FIFO_MARK) )
+                       /* WORK_MODE_HRV 100HZ, wear off status check error */
                        {
                                //co_printf("WORK_MODE_HRV0\n");
                                vc9202_alg_results.wear_status = vc9202_usr_get_wear_status();
-                               //co_printf("WORK_MODE_HRV:wear_status: %d\r\n",vc9202_alg_results.wear_status);
-                               get_gsensor_data(&gsensor_data, &gsensor_size, ppg_size);
-                               //co_printf("WORK_MODE_HRV1\n");
-                               yylPFE_InputData_t yyl_in_data = {0};
                                if(vc9202_alg_results.wear_status )
                                {
+                                       yylPFE_InputData_t yyl_in_data = {0};
+                                       get_gsensor_data(&gsensor_data, &gsensor_size, ppg_size);
                                        //co_printf("WORK_MODE_HRV2\n");
                                        vc9202_alg_results.hr_rate = alg_calculate_hrv_handler( vc9202_alg_results.hr_rate, &data, ppg_size, &gsensor_data, hr_alg_mode );
                                        if(yyl_in_data_len< 3000-1 && ppg_size != 0)
index cc730ff..7d19807 100644 (file)
@@ -197,7 +197,7 @@ void uart0_receive(void)
                else if(strstr((char *)uart0_rivce_data,"\"temp\""))//:"temp"}//temp:温度模式
                { 
                        uart0_write_for_hci("{\"cmd\":\"1\",\"work_mode\":\"1\"}\r\n", sizeof("{\"cmd\":\"1\",\"work_mode\":\"1\"}\r\n")-1,  NULL, NULL);
-                       send_temp_data_flag=1;
+                       temp_open();
                }else if(strstr((char *)uart0_rivce_data,"\"factory\""))//:"factory"}//factory:工厂模式
                { 
                        uart0_write_for_hci("{\"cmd\":\"1\",\"work_mode\":\"1\"}\r\n", sizeof("{\"cmd\":\"1\",\"work_mode\":\"1\"}\r\n")-1,  NULL, NULL);
@@ -301,7 +301,8 @@ void uart0_receive(void)
                }
                if(strstr((char *)uart0_rivce_data,"\"get_data\":\"temp\""))//:"temp"}//temp:获取当前温度数值
                {
-                       temp_test();
+                       //temp_test();
+                       send_temp_data();
                }       
                if(strstr((char *)uart0_rivce_data,"\"get_data\":\"is_HA_activate\""))//:获取恒爱库是否激活状态
                {
@@ -320,6 +321,7 @@ void uart0_receive(void)
                        co_printf("HA_req_code:HA_req_code:%s \n",sys_config.HA_req_code);      
                        save_sys_config();//保存配置
                }
+               //co_printf("[CHENG]:send_wear_status=%d\r\n", vc9202_alg_results.wear_status);
                UART_send_buf_len = snprintf((char *)UART_send_buf,UART_SEND_MAX,"{\"cmd\":\"2\",\"wear_data\":\"%d\"}\n",vc9202_alg_results.wear_status);
                uart0_write_for_hci(UART_send_buf,UART_send_buf_len,NULL, NULL);
                // memset(UART_send_buf,0,UART_SEND_MAX);