yy1717
2020-11-24 6e0f29b08a040d14576d7053c1206a8439936570
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);