| | |
| | | |
| | | #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; |
| | |
| | | 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("虚拟平台连接失败"); |
| | |
| | | if (fd > 0) { |
| | | DisconnectTCP(fd); |
| | | } |
| | | virtRtkIsValid = false; |
| | | |
| | | free(vs); |
| | | if (connectCnt < 5) { |
| | | AppTimer_add(ConnectLater, D_SEC(3)); |
| | | } |
| | | |
| | | // PlayTTS("模拟器断开", NULL); |
| | | |