fall down detect
author@CHENG <2393524978@qq.com>
Mon, 15 Apr 2024 02:12:43 +0000 (10:12 +0800)
committer@CHENG <2393524978@qq.com>
Mon, 15 Apr 2024 02:12:43 +0000 (10:12 +0800)
2.sdk/project/Z5_DS_Z12XW_QCB/product/craneg_modem/config/watch/lv_drv_conf_CUSTOM.h
2.sdk/project/Z5_Z11/product/craneg_modem/config/watch/lv_drv_conf_CUSTOM.h
2.sdk/project/Z5_Z12/product/craneg_modem/config/watch/lv_drv_conf_CUSTOM.h
2.sdk/sdk/gui/lv_drivers/indev/my_xMotion.c
2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_test.c

index 96ea991..3ed5dc8 100644 (file)
 #endif
 #endif
 
+
+
+
+
+// fall detect
+#define MMI_CUSTOMER_FALL_DETECT_THRESHOLD             (7)
+#define MMI_CUSTOMER_FALL_COUNTER_THRESHOLD            (10)
+
+
+
+
+
 #endif
 
 
index 72e6dbf..7841cc0 100644 (file)
 
 
 // fall detect
-#define MMI_CUSTOMER_FALL_DETECT_THRESHOLD             (25)
-#define MMI_CUSTOMER_FALL_COUNTER_THRESHOLD            (7)
+#define MMI_CUSTOMER_FALL_DETECT_THRESHOLD             (7)
+#define MMI_CUSTOMER_FALL_COUNTER_THRESHOLD            (10)
 
 
 
index 43121be..f2bdba7 100644 (file)
 #endif
 #endif
 
+
+
+
+
+// fall detect
+#define MMI_CUSTOMER_FALL_DETECT_THRESHOLD             (7)
+#define MMI_CUSTOMER_FALL_COUNTER_THRESHOLD            (10)
+
+
+
+
+
 #endif
 
 
index ba653a1..2ec0e0c 100644 (file)
@@ -9,7 +9,7 @@
 #include "my_xMotion.h"
 #include "lv_drv_conf.h"
 #if USE_MY_XMOTION
-
+#include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
@@ -302,78 +302,71 @@ int Gsensor_xyz_len = 0;
 #define ACC_0G_X      4096//8192 //4096
 #define ACC_0G_Y      4096//8192   
 #define ACC_0G_Z      4096//8192       
-#define  FALL_DETECH_LOW_THRESHOLD 7//MMI_FALL_DETECT_THRESHOLD_DEFAULT // 35//8
-#define FALL_COUNTER_THRESHOLD 6//MMI_FALL_COUNTER_THRESHOLD_DEFAULT //7 //4
+#define  FALL_DETECH_LOW_THRESHOLD MMI_FALL_DETECT_THRESHOLD_DEFAULT // 35
+#define FALL_COUNTER_THRESHOLD MMI_FALL_COUNTER_THRESHOLD_DEFAULT //7
 typedef struct
 {
     float x;
     float y;
     float z;
 }acc_g_data_t;
-
-double distance(acc_g_data_t * acc_1,acc_g_data_t * acc_2)
-{
-       double d;
-       d=(acc_1->x - acc_2->x)*(acc_1->x-acc_2->x)+(acc_1->y - acc_2->y)*(acc_1->y - acc_2->y)+(acc_1->z - acc_2->z)*(acc_1->z - acc_2->z);
-       return d/100;
-}
-
-
 static uint16_t fall_counter = 0;
-uint8_t   gsensor_sc7a20_fall_detect(acc_g_data_t * acc_1,acc_g_data_t * acc_2)
-{
-    double acc_square = (double)((acc_1->x) * (acc_1->x)) + (double)((acc_1->y) * (acc_1->y)) + (double)((acc_1->z) * (acc_1->z));
-
+#if fall_detect_debug
+extern int count_13 ;
+extern int count_14 ;
+extern int count_15 ;
+extern int count_16 ;
+
+extern int count_10 ;
+extern int count_9 ;
+extern int count_8 ;
+extern int count_7 ;
+#endif
+int fall_detect_count = 0;
+uint8_t gsensor_sc7a20_fall_detect(acc_g_data_t * acc)
+{
+    double acc_square_t = (double)((acc->x) * (acc->x)) + (double)((acc->y) * (acc->y)) + (double)((acc->z) * (acc->z));
+    double acc_square = sqrt(acc_square_t);
     // if(MMIApi_IsOpenGsensorTestWin())
     // {
     //   memcpy(&s_sc7a20_test_info, acc, sizeof(acc_g_data_t));
     // }
-    //cplog_printf("acc_square:%f,%f,%f,%f\n",acc_square,acc->x,acc->y,acc->z);
-    //printf("gsensor_sc7a20_fall_detect:%f",acc_square);
-
-    #if 0
-       char info_buf [64]={0};
-    sprintf(info_buf,"%f",acc_square);
-       char  txt_str[64]={0};
-       sprintf(txt_str,"C:/gsensor_sc7a20_fall_detect.txt");
-       
-       uint32_t info_size = sizeof(info_buf);
-       {
-               lv_fs_file_t file_p;
-               lv_fs_res_t res;
-               uint32_t bytes_write = 0;
-               
-               res = lv_fs_open(&file_p,txt_str, LV_FS_MODE_WR | LV_FS_MODE_APPEND);
-               if(LV_FS_RES_OK != res) 
-               {
-                       printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
-                       lv_fs_close(&file_p);
-                       return false;
-               }   
-               printf("[@CHENG_DEBUG][%s][%d]:\n", __FUNCTION__, __LINE__);
-               res = lv_fs_write(&file_p, info_buf, info_size, &bytes_write);
-               lv_fs_close(&file_p);  
-               if(LV_FS_RES_OK != res)
-               {
-                       printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
-                       return false;
-               }
-               printf("[@CHENG_DEBUG][%s][%d]: file_size=%d,write_size=%d\n", __FUNCTION__, __LINE__, info_size, bytes_write);
-       
-               //return true;
-       }
-       #endif
-    if(acc_square < FALL_DETECH_LOW_THRESHOLD )// && acc_square > FALL_DETECH_LOW_THRESHOLD-10 )
+
+#if fall_detect_debug    
+    if(acc_square<8)
+        count_7++; 
+    else if(acc_square>8 && acc_square<9)
+        count_8++; 
+    else if(acc_square>9 && acc_square<10)
+        count_9++; 
+    else if(acc_square>10 && acc_square<11)
+        count_10++; 
+    else if(acc_square>13 && acc_square<14)
+        count_13++;
+    else if(acc_square>14 && acc_square<15)
+        count_14++;
+    else if(acc_square>15 && acc_square<16)
+        count_15++;
+    else if(acc_square>16)
+        count_16++;    
+#endif
+    fall_detect_count++ ;
+    //cplog_printf("acc_square:% 12f,acc_square_t:% 12f,x:% 12f,y:% 12f,z:% 12f\n",
+     //               acc_square,acc_square_t,acc->x,acc->y,acc->z);
+    //cplog_printf("acc_square:% 12f,count_13:% 4d,count_10:% 4d\n",
+    //               acc_square,count_13,count_10);
+    
+    if(acc_square < FALL_DETECH_LOW_THRESHOLD )//7)// 
        {
         fall_counter++;
     }
-       else
+       if(fall_detect_count >= 32*3)
        {
+        fall_detect_count = 0;
         fall_counter = 0;
     }
-   //double  fall_d=distance(&acc_1,&acc_2);
 
-    if(fall_counter >= FALL_COUNTER_THRESHOLD)
+    if(fall_counter >= FALL_COUNTER_THRESHOLD) //10)//
        {
         fall_counter = 0;
 
@@ -394,8 +387,7 @@ static void My_Motion_Main(VOID * argv)
 {
     uint16_t MsgId;
     lv_driver_msg_xmotion_t * pOsMsg;
-    acc_g_data_t s_acc_1 = {0};
-    acc_g_data_t s_acc_2 = {0};
+    acc_g_data_t s_acc = {0};
 #if XMOTION_TIMER_DEBUG
     UINT32 T1, T2;
 #endif
@@ -438,24 +430,17 @@ static void My_Motion_Main(VOID * argv)
                 // s_acc.x = (float)((Gsensor_x[i]*9.8f)/((uint16_t)ACC_0G_X));
                 // s_acc.y = (float)((Gsensor_y[i]*9.8f)/((uint16_t)ACC_0G_Y));
                 // s_acc.z = (float)((Gsensor_z[i]*9.8f)/((uint16_t)ACC_0G_Z));
-
-                s_acc_1.x = ((float)Gsensor_x[i]/100);
-                s_acc_1.y = ((float)Gsensor_y[i]/100);
-                s_acc_1.z = ((float)Gsensor_z[i]/100);
-
-                s_acc_2.x = ((float)Gsensor_x[i]/100);
-                s_acc_2.y = ((float)Gsensor_y[i]/100);
-                s_acc_2.z = ((float)Gsensor_z[i]/100);
-
-                if(gsensor_sc7a20_fall_detect(&s_acc_1,&s_acc_2) == 1)//跌倒报警
+                s_acc.x = ((float)Gsensor_x[i]/100);
+                s_acc.y = ((float)Gsensor_y[i]/100);
+                s_acc.z = ((float)Gsensor_z[i]/100);
+                //cplog_printf("x:%d,y:%d,z:%d!!!\n",Gsensor_x[i],Gsensor_y[i],Gsensor_z[i]);
+                if(gsensor_sc7a20_fall_detect(&s_acc) == 1)//跌倒报警
                 {
                     //cplog_printf("mmi_gsensor_sensor_fall_alarm x:%d,y:%d,z:%d!!!\n",Gsensor_x[i],Gsensor_y[i],Gsensor_z[i]);
                     mmi_gsensor_sensor_fall_alarm();
-                    break;
                 }
-                //cplog_printf("x:%d,y:%d,z:%d!!!\n",Gsensor_x[i],Gsensor_y[i],Gsensor_z[i]);          
+                                       
             }
-            
 #if USE_HX3918
             hx3918_set_gsen_fifo(Gsensor_x,Gsensor_y,Gsensor_z,Gsensor_xyz_len);
 #endif
index 3932b9b..e45ecee 100644 (file)
@@ -1123,10 +1123,26 @@ static lv_obj_t * factorymode_gps_test_create(lv_obj_t * activity_obj)
 #endif
 
 #if 1 // def __MMI_ZHSX_SUPPORT__
+#if fall_detect_debug
+int count_13 = 0;
+int count_14 = 0;
+int count_15 = 0;
+int count_16 = 0;
+
+int count_10 = 0;
+int count_9 = 0;
+int count_8 = 0;
+int count_7 = 0;
+#endif
+
 static void mmi_factorymode_gsensor_status_update(lv_anim_t * anim)
 {
 #if 1
        char str[128] = {0};
+#if fall_detect_debug
+    sprintf(str, "13:% 3d  14:% 3d\n15:% 3d  16:% 3d\n10:% 3d  09:% 3d\n08:% 3d   07:% 3d\n",
+    count_13,count_14,count_15,count_16,count_10,count_9,count_8,count_7);
+#else
        uint8_t id = mmi_gsensor_sensor_id_get();
        int16_t chip_x = 0, chip_y = 0, chip_z = 0;
        
@@ -1136,7 +1152,8 @@ static void mmi_factorymode_gsensor_status_update(lv_anim_t * anim)
                                "id :", id,
                                chip_x, chip_y, chip_z,
                                (char *)lv_lang_get_text(WATCH_TEXT_ID_GSENSOR_SUCCESS));
-
+#endif
+       
        lv_label_set_text(anim->var, str);
 #else