Browse Source

修改一维定位模式下,但基站定位时轨迹跳变的问题。

zhoutao 5 days ago
parent
commit
cd5d1dfc40

+ 1 - 1
main.c

@@ -45,7 +45,7 @@ void main_read_wav()
 {
     // const char *pFileName = "E:\\work\\ips8000\\aplm8000sdk\\wave\\zcq(20251203-09).wav";
     //  const char *pFileName = "E:\\work\\ips8000\\aplm8000sdk\\wave\\rec5-0-5(0245)-btsx.wav";
-    const char *pFileName = "E:\\work\\ips8000\\aplm8000sdk\\wave\\jlj_apple15_1.wav";
+    const char *pFileName = "E:\\work\\ips8000\\aplm8000sdk\\wave\\jlj_huawei_279-280-281-283.wav";
     int16 *pwData = NULL; // 音频数据存储地址
     uint8 byIsOver = 0;
     uint16 wCounter = 0;

+ 46 - 46
src/modules/basestation/bts_main.c

@@ -266,86 +266,86 @@ void bts_main_gen_test_bts()
     pstHead->astLocalBtsList[0].dwBuildId = 1;
     pstHead->astLocalBtsList[0].dwLayerId = 15;
     pstHead->astLocalBtsList[0].dwBtsId = 10001;
-    pstHead->astLocalBtsList[0].dwFreqIndex = 0;
+    pstHead->astLocalBtsList[0].dwFreqIndex = 7;
     pstHead->astLocalBtsList[0].dwSlot = 0;
-    pstHead->astLocalBtsList[0].dwLctType = 2;
+    pstHead->astLocalBtsList[0].dwLctType = 1;
     pstHead->astLocalBtsList[0].dwTwoBtsNum = 1;
     pstHead->astLocalBtsList[0].adwTwoBtsList[0] = 10002;
-    pstHead->astLocalBtsList[0].dwCoordX = 18700;
-    pstHead->astLocalBtsList[0].dwCoordY = 4200;
+    pstHead->astLocalBtsList[0].dwCoordX = 27000;
+    pstHead->astLocalBtsList[0].dwCoordY = 2600;
     pstHead->astLocalBtsList[0].dwCoordZ = 300;
+    pstHead->astLocalBtsList[0].adwBluetoothMac[0] = 1; // 蓝牙mac0
+    pstHead->astLocalBtsList[0].adwBluetoothMac[1] = 2; // 蓝牙mac1
+    pstHead->astLocalBtsList[0].adwBluetoothMac[2] = 3; // 蓝牙mac2
 
     // 2号基站
     pstHead->astLocalBtsList[1].dwBuildId = 1;
     pstHead->astLocalBtsList[1].dwLayerId = 15;
     pstHead->astLocalBtsList[1].dwBtsId = 10002;
-    pstHead->astLocalBtsList[1].dwFreqIndex = 1;
+    pstHead->astLocalBtsList[1].dwFreqIndex = 8;
     pstHead->astLocalBtsList[1].dwSlot = 1;
-    pstHead->astLocalBtsList[1].dwLctType = 2;
+    pstHead->astLocalBtsList[1].dwLctType = 1;
     pstHead->astLocalBtsList[1].dwTwoBtsNum = 2;
     pstHead->astLocalBtsList[1].adwTwoBtsList[0] = 10001;
     pstHead->astLocalBtsList[1].adwTwoBtsList[1] = 10003;
-    pstHead->astLocalBtsList[1].dwCoordX = 20400;
-    pstHead->astLocalBtsList[1].dwCoordY = 4000;
+    pstHead->astLocalBtsList[1].dwCoordX = 28700;
+    pstHead->astLocalBtsList[1].dwCoordY = 2700;
     pstHead->astLocalBtsList[1].dwCoordZ = 300;
-    pstHead->astLocalBtsList[1].adwBluetoothMac[0] = 1; // 蓝牙mac0
-    pstHead->astLocalBtsList[1].adwBluetoothMac[1] = 2; // 蓝牙mac1
-    pstHead->astLocalBtsList[1].adwBluetoothMac[2] = 3; // 蓝牙mac2
 
     // 3号基站
     pstHead->astLocalBtsList[2].dwBuildId = 1;
     pstHead->astLocalBtsList[2].dwLayerId = 15;
     pstHead->astLocalBtsList[2].dwBtsId = 10003;
-    pstHead->astLocalBtsList[2].dwFreqIndex = 3;
-    pstHead->astLocalBtsList[2].dwSlot = 0;
-    pstHead->astLocalBtsList[2].dwLctType = 2;
-    pstHead->astLocalBtsList[2].dwTwoBtsNum = 2;
+    pstHead->astLocalBtsList[2].dwFreqIndex = 5;
+    pstHead->astLocalBtsList[2].dwSlot = 3;
+    pstHead->astLocalBtsList[2].dwLctType = 1;
+    pstHead->astLocalBtsList[2].dwTwoBtsNum = 1;
     pstHead->astLocalBtsList[2].adwTwoBtsList[0] = 10002;
     pstHead->astLocalBtsList[2].adwTwoBtsList[1] = 10004;
-    pstHead->astLocalBtsList[2].dwCoordX = 18400;
-    pstHead->astLocalBtsList[2].dwCoordY = 2500;
+    pstHead->astLocalBtsList[2].dwCoordX = 29000;
+    pstHead->astLocalBtsList[2].dwCoordY = 4300;
     pstHead->astLocalBtsList[2].dwCoordZ = 300;
 
-    // 4号基站
+    // // 4号基站
     pstHead->astLocalBtsList[3].dwBuildId = 1;
     pstHead->astLocalBtsList[3].dwLayerId = 15;
     pstHead->astLocalBtsList[3].dwBtsId = 10004;
     pstHead->astLocalBtsList[3].dwFreqIndex = 4;
-    pstHead->astLocalBtsList[3].dwSlot = 1;
-    pstHead->astLocalBtsList[3].dwCoordX = 20000;
-    pstHead->astLocalBtsList[3].dwCoordY = 2200;
+    pstHead->astLocalBtsList[3].dwSlot = 0;
+    pstHead->astLocalBtsList[3].dwCoordX = 26500;
+    pstHead->astLocalBtsList[3].dwCoordY = 4700;
     pstHead->astLocalBtsList[3].dwCoordZ = 300;
-    pstHead->astLocalBtsList[3].dwLctType = 2;
+    pstHead->astLocalBtsList[3].dwLctType = 1;
     pstHead->astLocalBtsList[3].dwTwoBtsNum = 1;
     pstHead->astLocalBtsList[3].adwTwoBtsList[0] = 10003;
 
     // 5号基站
-    pstHead->astLocalBtsList[4].dwBuildId = 1;
-    pstHead->astLocalBtsList[4].dwLayerId = 15;
-    pstHead->astLocalBtsList[4].dwBtsId = 10005;
-    pstHead->astLocalBtsList[4].dwFreqIndex = 6;
-    pstHead->astLocalBtsList[4].dwSlot = 0;
-    pstHead->astLocalBtsList[4].dwCoordX = 18000;
-    pstHead->astLocalBtsList[4].dwCoordY = 1000;
-    pstHead->astLocalBtsList[4].dwCoordZ = 300;
-    pstHead->astLocalBtsList[4].dwLctType = 2;
-    pstHead->astLocalBtsList[4].dwTwoBtsNum = 0;
-    pstHead->astLocalBtsList[4].adwTwoBtsList[0] = 10003;
+    // pstHead->astLocalBtsList[4].dwBuildId = 1;
+    // pstHead->astLocalBtsList[4].dwLayerId = 15;
+    // pstHead->astLocalBtsList[4].dwBtsId = 10005;
+    // pstHead->astLocalBtsList[4].dwFreqIndex = 6;
+    // pstHead->astLocalBtsList[4].dwSlot = 0;
+    // pstHead->astLocalBtsList[4].dwCoordX = 18000;
+    // pstHead->astLocalBtsList[4].dwCoordY = 1000;
+    // pstHead->astLocalBtsList[4].dwCoordZ = 300;
+    // pstHead->astLocalBtsList[4].dwLctType = 2;
+    // pstHead->astLocalBtsList[4].dwTwoBtsNum = 0;
+    // pstHead->astLocalBtsList[4].adwTwoBtsList[0] = 10003;
 
     // 6号基站
-    pstHead->astLocalBtsList[5].dwBuildId = 1;
-    pstHead->astLocalBtsList[5].dwLayerId = 15;
-    pstHead->astLocalBtsList[5].dwBtsId = 10006;
-    pstHead->astLocalBtsList[5].dwFreqIndex = 7;
-    pstHead->astLocalBtsList[5].dwSlot = 1;
-    pstHead->astLocalBtsList[5].dwCoordX = 19700;
-    pstHead->astLocalBtsList[5].dwCoordY = 700;
-    pstHead->astLocalBtsList[5].dwCoordZ = 300;
-    pstHead->astLocalBtsList[5].dwLctType = 2;
-    pstHead->astLocalBtsList[5].dwTwoBtsNum = 0;
-    pstHead->astLocalBtsList[5].adwTwoBtsList[0] = 10003;
-
-    pstHead->dwBtsNum = 6;
+    // pstHead->astLocalBtsList[5].dwBuildId = 1;
+    // pstHead->astLocalBtsList[5].dwLayerId = 15;
+    // pstHead->astLocalBtsList[5].dwBtsId = 10006;
+    // pstHead->astLocalBtsList[5].dwFreqIndex = 7;
+    // pstHead->astLocalBtsList[5].dwSlot = 1;
+    // pstHead->astLocalBtsList[5].dwCoordX = 19700;
+    // pstHead->astLocalBtsList[5].dwCoordY = 700;
+    // pstHead->astLocalBtsList[5].dwCoordZ = 300;
+    // pstHead->astLocalBtsList[5].dwLctType = 2;
+    // pstHead->astLocalBtsList[5].dwTwoBtsNum = 0;
+    // pstHead->astLocalBtsList[5].adwTwoBtsList[0] = 10003;
+
+    pstHead->dwBtsNum = 4;
 }
 
 // 显示安装基站

+ 51 - 24
src/modules/basestation/bts_sync.c

@@ -94,6 +94,17 @@ void bts_sync_main(PUB_LOCATION_DATA_T *pstLocationDataList, BTS_AMPL_MIRROR_DAT
 
                         // 计算从站位同步索引
                         pstBtsAmplMirrorData = (BTS_AMPL_MIRROR_DATA_T *)&pstBtsAmplMirrorDataList[byFreqIndex]; // 基站幅度镜像数据
+                        // TODO测试
+                        if (PUB_DEBUG_ENABLE)
+                        {
+                            if (gg_dwFrameNo > 48)
+                            {
+                                char *pfileName = "E:\\work\\ips8000\\aplm8000sdk\\output\\lctdata\\firstpath.bin";
+                                // util_write_flt32_to_bin_file(pfileName, PUB_SIGNAL_SAMPLE_RATIO, pstBtsAmplMirrorData->afMultiSecondData, 1);
+                                uint8 byTmp = 0;
+                            }
+                        }
+
                         dwSlaveBtsSyncIndex = bts_sync_cal_slave_bts_sync_index(pstLocationData, byMainBtsSlot, dwMainBtsSyncIndex, gg_stSysStatus.abySlotList, pstBtsAmplMirrorData->afMultiSecondData);
 
                         // 配置基站信号同步
@@ -117,17 +128,10 @@ void bts_sync_main(PUB_LOCATION_DATA_T *pstLocationDataList, BTS_AMPL_MIRROR_DAT
                 pstLocationData->dwSignalSyncIndex = 0;
             }
 
-            if (gg_stSysStatus.bySyncFlag)
-            {
-                gg_stSysStatus.bySyncFlag = 0; // 清除同步标识符,以便再次同步
-            }
+            gg_stSysStatus.bySyncFlag = 0;       // 清除同步标识符,以便再次同步
+            gg_stSysStatus.byBtsCaptureFlag = 0; // 清除主站捕获标识符,以便再次捕获主站
 
-            if (gg_stSysStatus.byBtsCaptureFlag)
-            {
-                gg_stSysStatus.byBtsCaptureFlag = 0; // 清除主站捕获标识符,以便再次捕获主站
-            }
-
-            printf("no valid bts \n");
+            printf("no valid main bts, re-sync\n");
         }
     }
 
@@ -194,7 +198,7 @@ void bts_sync_cal_signal_slot(uint8 byMainBtsSetSlot, int32 dwMainBtsFrameStartI
             pbySignalSlotList[3] = byMainBtsSetSlot - 1;
         }
     }
-    // 主站信号帧开始索引为
+    // 主站信号帧开始索引为
     else
     {
         // 向左寻找信号的开始时隙
@@ -358,7 +362,7 @@ int32 bts_sync_cal_main_bts_sync_index(uint8 byMainBtsSetSlot, int32 dwMainBtsMa
     }
 
     //// 计算主站信号同步索引
-    // 信号在0号时隙
+    // 信号在0号时隙索引
     if (byMainBtsSlotIndex == 0)
     {
         if (dwMainBtsMaxIndex > 3 * PUB_SLOT_FRAME_LEN)
@@ -367,7 +371,7 @@ int32 bts_sync_cal_main_bts_sync_index(uint8 byMainBtsSetSlot, int32 dwMainBtsMa
             dwMainBtsSyncIndex = PUB_SIGNAL_SAMPLE_RATIO - dwMainBtsMaxIndex - PUB_SYNC_INDEX_OFFSET_NUM;
         }
     }
-    // 信号在3号时隙
+    // 信号在3号时隙索引
     else if (byMainBtsSlotIndex == (PUB_SYS_SLOT_NUM - 1))
     {
         if (dwMainBtsMaxIndex < PUB_SLOT_FRAME_LEN)
@@ -473,24 +477,47 @@ int32 bts_sync_cal_slave_bts_sync_index(PUB_LOCATION_DATA_T *pstLocationData, ui
             dwSlaveBtsStartIndex++;
         }
 
-        //// 计算从站信号同步索引
+        // //// 计算从站信号同步索引
+        // dwSlaveBtsSyncIndex = wSlaveBtsMaxValueIndex - PUB_SYNC_INDEX_OFFSET_NUM;
+        // // 信号在0号时隙上
+        // if (bySlaveBtsSlotIndex == 0)
+        // {
+        //     if (wSlaveBtsMaxValueIndex > 3 * PUB_SLOT_FRAME_LEN)
+        //     {
+        //         // 修正从站信号同步索引
+        //         dwSlaveBtsSyncIndex = PUB_SIGNAL_SAMPLE_RATIO - wSlaveBtsMaxValueIndex - PUB_SYNC_INDEX_OFFSET_NUM;
+        //     }
+        // }
+        // // 信号在3号时隙上
+        // else if (bySlaveBtsSlotIndex == (PUB_SYS_SLOT_NUM - 1))
+        // {
+        //     if (wSlaveBtsMaxValueIndex < PUB_SLOT_FRAME_LEN)
+        //     {
+        //         // 修正从站信号同步索引
+        //         dwSlaveBtsSyncIndex = PUB_SIGNAL_SAMPLE_RATIO + wSlaveBtsMaxValueIndex - PUB_SYNC_INDEX_OFFSET_NUM;
+        //     }
+        // }
+
+        //// 计算从站信号同步索引(跟随主站调整)
         dwSlaveBtsSyncIndex = wSlaveBtsMaxValueIndex - PUB_SYNC_INDEX_OFFSET_NUM;
-        // 信号在0号时隙上
-        if (bySlaveBtsSlotIndex == 0)
+        // 从站时隙在主站时隙后面
+        if (bySlaveBtsSlotIndex > byMainBtsSlotIndex)
         {
-            if (wSlaveBtsMaxValueIndex > 3 * PUB_SLOT_FRAME_LEN)
+            // 从站最大值跑到了最开始的时隙中,调整回最后的时隙
+            if (dwSlaveBtsSyncIndex < dwMainBtsSyncIndex)
             {
-                // 修正从站信号同步索引
-                dwSlaveBtsSyncIndex = PUB_SIGNAL_SAMPLE_RATIO - wSlaveBtsMaxValueIndex - PUB_SYNC_INDEX_OFFSET_NUM;
+                // 修正从站信号同步索引(往后调整)
+                dwSlaveBtsSyncIndex = PUB_SIGNAL_SAMPLE_RATIO + wSlaveBtsMaxValueIndex - PUB_SYNC_INDEX_OFFSET_NUM;
             }
         }
-        // 信号在3号时隙上
-        else if (bySlaveBtsSlotIndex == (PUB_SYS_SLOT_NUM - 1))
+        // 从站时隙在主站时隙前面
+        else if (bySlaveBtsSlotIndex < byMainBtsSlotIndex)
         {
-            if (wSlaveBtsMaxValueIndex < PUB_SLOT_FRAME_LEN)
+            // 从站最大值跑到了最后的时隙中,调整回最开始的时隙
+            if (dwSlaveBtsSyncIndex > dwMainBtsSyncIndex)
             {
-                // 修正从站信号同步索引
-                dwSlaveBtsSyncIndex = PUB_SIGNAL_SAMPLE_RATIO + wSlaveBtsMaxValueIndex - PUB_SYNC_INDEX_OFFSET_NUM;
+                // 修正从站信号同步索引(往前调整)
+                dwSlaveBtsSyncIndex = PUB_SIGNAL_SAMPLE_RATIO - wSlaveBtsMaxValueIndex - PUB_SYNC_INDEX_OFFSET_NUM;
             }
         }
     }

+ 33 - 8
src/modules/location/lct_coordcal_one.c

@@ -56,8 +56,8 @@ void lct_coordcal_one_dimension_location(PUB_LOCATION_DATA_T *pstLctDataList, ui
     }
 
     // 组织1维基站对(两个基站为1对)
-    // lct_coordcal_organize_one_dimension_bts_duad(byFirstPathFlag, pstValidBtsList, byValidBtsListLen, &stBtsDuadList);
-    lct_coordcal_one_organize_bts_duad(byFirstPathFlag, pstValidBtsList, byValidBtsListLen, &stBtsDuadList);
+    lct_coordcal_organize_one_dimension_bts_duad(byFirstPathFlag, pstValidBtsList, byValidBtsListLen, &stBtsDuadList);
+    // lct_coordcal_one_organize_bts_duad(byFirstPathFlag, pstValidBtsList, byValidBtsListLen, &stBtsDuadList);
 
     // 计算线性定位参考点
     stLinearMinmumList.byValidFlag = 0;
@@ -1185,6 +1185,7 @@ uint8 lct_coordcal_zero_dimension_location(PUB_LOCATION_DATA_T *pstLctDataList,
     flt32 fOffsetDistanceY = 0; // X轴偏移距离
     flt32 fFactor = 0;
     uint8 byResult = 0; // 返回结果
+    flt32 fSetae = 0;   // θ角
 
     // 平滑坐标队列中有数据
     if (gLct_stMeanLctCoordList.byListLen > 0)
@@ -1228,11 +1229,9 @@ uint8 lct_coordcal_zero_dimension_location(PUB_LOCATION_DATA_T *pstLctDataList,
             if (gLct_dwSpeedY != 0 && gLct_dwSpeedX != 0)
             {
                 fFactor = (flt32)(abs(gLct_dwSpeedY)) / abs(gLct_dwSpeedX);
-                // fOffsetDistance = fOffsetDistance * fOffsetDistance;
-                // fOffsetDistance /= fFactor * fFactor + 1;
-
-                fOffsetDistanceY = fOffsetDistance * fFactor;
-                fOffsetDistanceX = fOffsetDistance * (1 - fFactor);
+                fSetae = atan(fFactor);
+                fOffsetDistanceY = fOffsetDistance * sin(fSetae);
+                fOffsetDistanceX = fOffsetDistance * cos(fSetae);
             }
             // X轴速度为0
             else if (gLct_dwSpeedX == 0)
@@ -1381,7 +1380,7 @@ uint8 lct_coordcal_single_bts_location(PUB_LOCATION_DATA_T *pstLctDataList, LCT_
         stAheadCoord = gLct_stMeanLctCoordList.astCoordList[gLct_stMeanLctCoordList.byListLen - 1];
 
         // 判断运动距离大的方向,1:X轴,2:Y轴
-        byMoveDirection = abs(gLct_dwSpeedX) > abs(gLct_dwSpeedY) ? 1 : 2;
+        byMoveDirection = abs(gLct_dwSpeedX) >= abs(gLct_dwSpeedY) ? 1 : 2;
 
         // 频点定位数据
         byFreqIndex = pstValidBtsData->byFreqIndex;
@@ -1447,6 +1446,19 @@ uint8 lct_coordcal_single_bts_location(PUB_LOCATION_DATA_T *pstLctDataList, LCT_
                 stAheadCoord.dwY += gLct_byDirectionY * fOffsetDistance;
                 byResult = 1;
             }
+            // else
+            // {
+            //     if (byMoveDirection == 1)
+            //     {
+            //         stAheadCoord.dwX += fOffsetDistance;
+            //         byResult = 1;
+            //     }
+            //     else
+            //     {
+            //         stAheadCoord.dwY += gLct_byDirectionY;
+            //         byResult = 1;
+            //     }
+            // }
         }
         // 第一径偏移量无效
         else
@@ -1468,6 +1480,19 @@ uint8 lct_coordcal_single_bts_location(PUB_LOCATION_DATA_T *pstLctDataList, LCT_
                 stAheadCoord.dwY += gLct_dwSpeedY;
                 byResult = 1;
             }
+            // else
+            // {
+            //     if (byMoveDirection == 1)
+            //     {
+            //         stAheadCoord.dwX += fOffsetDistance;
+            //         byResult = 1;
+            //     }
+            //     else
+            //     {
+            //         stAheadCoord.dwY += gLct_byDirectionY;
+            //         byResult = 1;
+            //     }
+            // }
         }
 
         // 保存数据

+ 1 - 1
src/modules/location/lct_firstpath.c

@@ -94,7 +94,7 @@ void lct_firstpath_main(PUB_LCT_BTS_LIST_T *pstLctBtsList, PUB_LOCATION_DATA_T *
         // TODO测试
         if (PUB_DEBUG_ENABLE)
         {
-            if (pstLctData->dwFrameNo > 0)
+            if (pstLctData->dwFrameNo > 56)
             {
                 char *pfileName = "E:\\work\\ips8000\\aplm8000sdk\\output\\lctdata\\firstpath.bin";
                 util_write_flt32_to_bin_file(pfileName, PUB_SLOT_FRAME_LEN, gg_afOneFrameLocationData, 1);

+ 14 - 4
src/modules/location/lct_main.c

@@ -89,6 +89,8 @@ void lct_main(PUB_LCT_BTS_LIST_T *pstLctBtsList, PUB_LOCATION_DATA_T *pstLctData
     // 系统已经同步并且定位基站数量至少有2个
     if (gg_stSysStatus.bySyncFlag && pstLctBtsList->byBtsNum > 1)
     {
+        gg_stSysStatus.bySyncNoBtsCounter = 0; // 已经同步但没有可用基站计数器清零
+
         // 当前帧需要定位
         byRemainder = (gg_dwFrameNo - 1) % PUB_SYS_SLOT_NUM;
         if (byRemainder == 0)
@@ -176,7 +178,7 @@ void lct_main(PUB_LCT_BTS_LIST_T *pstLctBtsList, PUB_LOCATION_DATA_T *pstLctData
                     {
                         if (!gLct_byBezierCurveListEnabled)
                         {
-                            printf("frame no:%d, source:%d, x :%d, y: %d\n", gg_dwFrameNo - 1, stOptimumCoord.bySourceFlag, stMeanCoord.dwX, stMeanCoord.dwY);
+                            printf("frame no:%d, source:%d, x :%.2f, y: %.2f\n", gg_dwFrameNo - 1, stOptimumCoord.bySourceFlag, (flt32)stMeanCoord.dwX / 100, (flt32)stMeanCoord.dwY / 100);
 
                             char *filePathx = "E:\\work\\ips8000\\aplm8000sdk\\output\\coord\\coordx.bin";
                             char *filePathy = "E:\\work\\ips8000\\aplm8000sdk\\output\\coord\\coordy.bin";
@@ -189,7 +191,7 @@ void lct_main(PUB_LCT_BTS_LIST_T *pstLctBtsList, PUB_LOCATION_DATA_T *pstLctData
                             for (uint8 i = 0; i < 4; i++)
                             {
                                 stCoordTmp = gLct_astBezierCurveList[i];
-                                printf("frame no:%d, source:%d, x :%d, y: %d\n", gg_dwFrameNo - 1, stOptimumCoord.bySourceFlag, stCoordTmp.dwX, stCoordTmp.dwY);
+                                printf("frame no:%d, source:%d, x :%.2f, y: %.2f\n", gg_dwFrameNo - 1, stOptimumCoord.bySourceFlag, (flt32)stCoordTmp.dwX / 100, (flt32)stCoordTmp.dwY / 100);
 
                                 char *filePathx = "E:\\work\\ips8000\\aplm8000sdk\\output\\coord\\coordx.bin";
                                 char *filePathy = "E:\\work\\ips8000\\aplm8000sdk\\output\\coord\\coordy.bin";
@@ -204,7 +206,7 @@ void lct_main(PUB_LCT_BTS_LIST_T *pstLctBtsList, PUB_LOCATION_DATA_T *pstLctData
                 {
                     pstCurrentLctResult->dwCpltFlag = 1;    // 定位完成
                     pstCurrentLctResult->dwSuccessFlag = 0; // 定位失败
-                    gg_stSysStatus.byBtsCaptureFlag = 0;
+                    // gg_stSysStatus.byBtsCaptureFlag = 0;
 
                     // 清空定位数据中第一径数据
                     for (uint8 i = 0; i < PUB_SYS_CARRIER_NUM; i++)
@@ -222,7 +224,7 @@ void lct_main(PUB_LCT_BTS_LIST_T *pstLctBtsList, PUB_LOCATION_DATA_T *pstLctData
             {
                 pstCurrentLctResult->dwCpltFlag = 1;    // 定位完成
                 pstCurrentLctResult->dwSuccessFlag = 0; // 定位失败
-                gg_stSysStatus.byBtsCaptureFlag = 0;
+                // gg_stSysStatus.byBtsCaptureFlag = 0;
 
                 // 清空定位数据中第一径数据
                 for (uint8 i = 0; i < PUB_SYS_CARRIER_NUM; i++)
@@ -256,6 +258,14 @@ void lct_main(PUB_LCT_BTS_LIST_T *pstLctBtsList, PUB_LOCATION_DATA_T *pstLctData
     }
     else
     {
+        gg_stSysStatus.bySyncNoBtsCounter++;
+        if (gg_stSysStatus.bySyncNoBtsCounter > 2) // 连续3次后系统重新进入初始化阶段,同步和捕获基站
+        {
+            gg_stSysStatus.bySyncFlag = 0;
+            gg_stSysStatus.byBtsCaptureFlag = 0;
+            gg_stSysStatus.bySyncNoBtsCounter = 0;
+        }
+
         printf("error, sync flag:%d, bts num:%d\n", gg_stSysStatus.bySyncFlag, pstLctBtsList->byBtsNum);
     }
 

+ 2 - 1
src/sysdefine/struct.h

@@ -32,7 +32,8 @@ typedef struct
 // 系统状态结构
 typedef struct
 {
-    uint8 bySyncFlag; // 同步标识符,0:未同步,1:已同步
+    uint8 bySyncFlag;         // 同步标识符,0:未同步,1:已同步
+    uint8 bySyncNoBtsCounter; // 信号已经同步但没有可用基站,轨迹联系跳动次数,超过3次后系统进入初始化阶段
 
     // 基站捕获标识符,0:未捕获,1:已捕获
     uint8 byBtsCaptureFlag; // 若主站丢失(大楼间切换或者楼层间切换),系统立即转入“未捕获”阶段

+ 2 - 2
src/sysdefine/sysmacro.h

@@ -79,7 +79,7 @@
 #define PUB_MAC_ADDRESS_LEN 12 // MAC地址字节数
 
 // 测试宏定义
-#define PUB_DEBUG_ENABLE 1 // 打开调试开关
-// #define PUB_DEBUG_ENABLE 0 // 关闭调试开关
+// #define PUB_DEBUG_ENABLE 1 // 打开调试开关
+#define PUB_DEBUG_ENABLE 0 // 关闭调试开关
 
 #endif

BIN
wasm/aplm8000sdk.wasm