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