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