From 6e0f29b08a040d14576d7053c1206a8439936570 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 24 十一月 2020 14:18:03 +0800
Subject: [PATCH] 坐标

---
 lib/src/main/cpp/rtk_module/virtual_rtk.cpp |   48 ++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/lib/src/main/cpp/rtk_module/virtual_rtk.cpp b/lib/src/main/cpp/rtk_module/virtual_rtk.cpp
index 2b9df51..83dee44 100644
--- a/lib/src/main/cpp/rtk_module/virtual_rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/virtual_rtk.cpp
@@ -15,30 +15,55 @@
 
 #define DEBUG(fmt, args...)     LOGD("<virtual_device> <%s>: " fmt, __func__, ##args)
 
+#define PARSE_BUFF_SIZE         4096
+
 struct vSocket {
     char domain_name[32];
     int port;
-};
+} VAddr;
 
+static bool virtRtkIsValid = false;
+static int connectCnt = 0;
+
+static void ConnectLater(union sigval sig);
+static void ConnectV(void);
 static void *VDataListenThread(void *p);
 
 void InitVirtualDevice(const char *domain_name, int port)
 {
     DEBUG("InitVirtualDevice %s: %d", domain_name, port);
 
-    struct vSocket *ptr = (struct vSocket *)malloc(sizeof(struct vSocket));
+    strcpy(VAddr.domain_name, domain_name);
+    VAddr.port = port;
 
-    strcpy(ptr->domain_name, domain_name);
-    ptr->port = port;
+    ConnectV();
+}
 
+bool VirtualIsConnected(void)
+{
+    bool temp;
+
+    do {
+        temp = virtRtkIsValid;
+    } while (temp != virtRtkIsValid);
+
+    return temp;
+}
+
+static void ConnectLater(union sigval sig) {
+    AppTimer_delete(ConnectLater);
+
+    ConnectV();
+}
+
+static void ConnectV(void)
+{
     pthread_t pid;
     pthread_attr_t attr;
     pthread_attr_init(&attr);
     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
-    pthread_create(&pid, &attr, VDataListenThread, ptr);
+    pthread_create(&pid, &attr, VDataListenThread, &VAddr);
 }
-
-#define PARSE_BUFF_SIZE         4096
 
 static void *VDataListenThread(void *p) {
     struct vSocket *vs = (struct vSocket *)p;
@@ -53,10 +78,14 @@
     int fd = -1;
     int RxBufLen = 0;
 
+    connectCnt++;
+
     fd = ConnectTCP(vs->domain_name, vs->port);
 
     if (fd > 0) {
         DEBUG("铏氭嫙骞冲彴杩炴帴鎴愬姛");
+        virtRtkIsValid = true;
+        connectCnt = 0;
 //        PlayTTS("妯℃嫙鍣ㄨ繛鎺�", NULL);
     } else {
         DEBUG("铏氭嫙骞冲彴杩炴帴澶辫触");
@@ -96,8 +125,11 @@
     if (fd > 0) {
         DisconnectTCP(fd);
     }
+    virtRtkIsValid = false;
 
-    free(vs);
+    if (connectCnt < 5) {
+        AppTimer_add(ConnectLater, D_SEC(3));
+    }
 
 //    PlayTTS("妯℃嫙鍣ㄦ柇寮�", NULL);
 

--
Gitblit v1.8.0