gsensor数据读取
authorpenglei <1624952103@qq.com>
Thu, 28 Mar 2024 03:13:12 +0000 (11:13 +0800)
committerpenglei <1624952103@qq.com>
Thu, 28 Mar 2024 03:13:12 +0000 (11:13 +0800)
code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h
code/sdk/drivers/peripheral/cywee/src/main_dml.c

index c62c3cd..4b63a57 100644 (file)
@@ -429,6 +429,8 @@ typedef struct
 
 
 extern void get_gsonsen_xyz(gsenson_t *t);
+extern void gsensor_get_n_data(uint8_t cnt);
+
 
 #pragma pack()
 
@@ -450,6 +452,8 @@ extern void get_gsonsen_xyz(gsenson_t *t);
 int cywee_main_dml(void);
 void cywee_int_handler(void);
 
+
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 017442c..d3b01a5 100644 (file)
@@ -19,13 +19,15 @@ int16_t gsensor_z[24] = {0};
 #define GSENSON_MSG_COUNT   16
 
 osal_mutex mutex_gsenson_queue;
+osal_mutex mutex_gsensor_queue_ext;
 static unsigned long gsenson_queue;
 
+
 void uapi_GSENSON_create_queue(void)
 {
-    if (osal_msg_queue_create("battery_queue", GSENSON_MSG_COUNT, &gsenson_queue,
-                              0, sizeof(gsenson_t)) != ERRCODE_SUCC) {
-        //PRINT("[battery][service] app create mail fail\n");   
+    if ( (osal_msg_queue_create("gsensor_queue", GSENSON_MSG_COUNT, &gsenson_queue,0, sizeof(gsenson_t)) )!= ERRCODE_SUCC)
+     {
+        CWM_OS_dbgPrintf("gsensor_queue create  fail\r\n");   
     }
 
     osal_mutex_init(&mutex_gsenson_queue);
@@ -33,74 +35,83 @@ void uapi_GSENSON_create_queue(void)
 
 static gsenson_t gxyz_t;
 static uint8_t gsenson_falg=0;
+
+static uint16 num_falg=0;
+static gsenson_t gxyz_t_queue[16]={0};
+static int16 left_falg=0;
+static int16 right_falg=-1;
+
+
 void get_gsonsen_xyz(gsenson_t *t)
 {
-    if(osal_mutex_trylock(&mutex_gsenson_queue)==0)
+        if(osal_mutex_trylock(&mutex_gsenson_queue)==0)
+        {
+            CWM_OS_dbgPrintf("get_gsonsen_xyz_fail\n");
+            return;
+        }
+        t->x = gxyz_t_queue[left_falg].x;
+        t->y = gxyz_t_queue[left_falg].y;
+        t->z = gxyz_t_queue[left_falg].z;
+        osal_mutex_unlock(&mutex_gsenson_queue);
+}
+
+void gsensor_get_n_data(uint8_t cnt)
+{
+     for(int i=0;i<cnt;i++)
     {
-        CWM_OS_dbgPrintf("get_gsonsen_xyz_fail\n");
-        return;
+        if(osal_mutex_trylock(&mutex_gsenson_queue)==0)
+        {
+            CWM_OS_dbgPrintf("get_gsonsen_xyz_fail\n");
+            return;
+        }
+        CWM_OS_dbgPrintf("x : %d , y : %d , z : %d\n", gxyz_t_queue[left_falg].x, gxyz_t_queue[left_falg].y, gxyz_t_queue[left_falg].z);
+        if(num_falg==0)
+        {
+            break;
+        }
+        left_falg++;
+        left_falg=left_falg%16;
+        num_falg--;
+        osal_mutex_unlock(&mutex_gsenson_queue);
     }
-    t->x=gxyz_t.x;
-    t->y=gxyz_t.y;
-    t->z=gxyz_t.z;
-    CWM_OS_dbgPrintf("get_gsonsen_%d,%d,%d\n",t->x, t->y,t->z);
-    osal_mutex_unlock(&mutex_gsenson_queue);
-}
 
+}
+//static int flag=32;
 void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
     switch (sensorEVT->sensorType) {
         case IDX_ACCEL:
-        #if 1  
-            // CWM_OS_dbgPrintf("acc: x=%.3f, y=%.3f, z=%.3f\n",
-            //                                            sensorEVT->fData[0],
-            //                                            sensorEVT->fData[1],
-            //                                            sensorEVT->fData[2]
-            //                                             );
-            if(osal_msg_queue_is_full(gsenson_queue))
-            {
-              
-                gsenson_t t;
-                int ret=osal_msg_queue_read_copy(gsenson_queue, &t, sizeof(gsenson_t),OSAL_MSGQ_NO_WAIT);
-                if(osal_mutex_trylock(&mutex_gsenson_queue)==0)
-                {
-                    CWM_OS_dbgPrintf("get_gsonsen_xxxxxxxx_fail\n");
-                    break;
-                }
-                gxyz_t.x=t.x;
-                gxyz_t.y=t.y;
-                gxyz_t.z=t.z;
-                osal_mutex_unlock(&mutex_gsenson_queue);
-
-                if(ret!=0)
-                {
-                    CWM_OS_dbgPrintf("osal_msg_queue_read_copyz_fail\n");
-                }
-                t.x=sensorEVT->fData[0]*1024;
-                t.y=sensorEVT->fData[1]*1024;
-                t.z=sensorEVT->fData[2]*1024;
-                ret=osal_msg_queue_write_copy(gsenson_queue, &t, sizeof(gsenson_t),OSAL_MSGQ_NO_WAIT);
-                if(ret!=0)
-                {
-                    CWM_OS_dbgPrintf("osal_msg_queue_write_copy_fail\n");
-                }
-
-
-            }    
-            else 
-            {
-                gsenson_t t;
-                t.x=sensorEVT->fData[0];
-                t.y=sensorEVT->fData[1];
-                t.z=sensorEVT->fData[2];
-                int ret= osal_msg_queue_write_copy(gsenson_queue, &t, sizeof(gsenson_t),OSAL_MSGQ_NO_WAIT);
-                if(ret!=0)
-                {
-                    CWM_OS_dbgPrintf("osal_msg_queue_write_copy_fail\n");
-                }
 
-           
-            }
-           
+        #if 1  
+        if(osal_mutex_trylock(&mutex_gsenson_queue)==0)
+        {
+            CWM_OS_dbgPrintf("get_gsonsen_xxxxxxxx_fail\n");
+            break;
+        }
+        if(num_falg==16)
+        {
+            left_falg++;
+            right_falg++;
+            right_falg=right_falg%16;
+            left_falg=left_falg%16;
+            gxyz_t_queue[right_falg].x= sensorEVT->fData[0];
+            gxyz_t_queue[right_falg].y= sensorEVT->fData[1];
+            gxyz_t_queue[right_falg].z= sensorEVT->fData[2];
+
+        }    
+        else 
+        {
+            //left_falg++;
+            right_falg++;
+            right_falg=right_falg%16;
+            //left_falg=left_falg%16;
+            num_falg++;
+            gxyz_t_queue[right_falg].x= sensorEVT->fData[0];
+            gxyz_t_queue[right_falg].y= sensorEVT->fData[1];
+            gxyz_t_queue[right_falg].z= sensorEVT->fData[2];
+            CWM_OS_dbgPrintf("write: x=%d, y=%d, z=%d\n", gxyz_t_queue[right_falg].x ,gxyz_t_queue[right_falg].y ,gxyz_t_queue[right_falg].z);
+        
+        }
+        osal_mutex_unlock(&mutex_gsenson_queue);
 
         #endif
             break;
@@ -338,6 +349,7 @@ int cywee_main_dml(void) {
     CWM_SettingControl(SCL_CHIP_VENDOR_CONFIG, &scl);
     //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
 
+    uapi_GSENSON_create_queue();
 
     CWM_LibPostInit(CWM_AP_SensorListen);
     //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);