diff options
Diffstat (limited to 'udp2lcm.c')
-rw-r--r-- | udp2lcm.c | 26 |
1 files changed, 20 insertions, 6 deletions
@@ -10,9 +10,19 @@ | |||
10 | * cmd为0停,1前,2左,3右 | 10 | * cmd为0停,1前,2左,3右 |
11 | */ | 11 | */ |
12 | #include "path/path_ctrl_t.h" | 12 | #include "path/path_ctrl_t.h" |
13 | #include <arpa/inet.h> | ||
14 | #include <errno.h> | ||
15 | #include <fcntl.h> | ||
16 | #include <netinet/in.h> | ||
17 | #include <poll.h> | ||
18 | #include <pthread.h> | ||
19 | #include <stdbool.h> | ||
13 | #include <stdio.h> | 20 | #include <stdio.h> |
14 | #include <stdlib.h> | 21 | #include <stdlib.h> |
15 | #include <string.h> | 22 | #include <string.h> |
23 | #include <sys/socket.h> | ||
24 | #include <termios.h> | ||
25 | #include <unistd.h> | ||
16 | 26 | ||
17 | #define MAX_BUFFER_SIZE 1024 | 27 | #define MAX_BUFFER_SIZE 1024 |
18 | #define PORT 5001 | 28 | #define PORT 5001 |
@@ -37,6 +47,9 @@ int main() { | |||
37 | } | 47 | } |
38 | // 开启udp接收线程 | 48 | // 开启udp接收线程 |
39 | pthread_create(&udpRecv, NULL, udpRecvHandler, NULL); | 49 | pthread_create(&udpRecv, NULL, udpRecvHandler, NULL); |
50 | while (true) { | ||
51 | pause(); | ||
52 | } | ||
40 | return 0; | 53 | return 0; |
41 | } | 54 | } |
42 | 55 | ||
@@ -62,6 +75,7 @@ void udpRecvHandler() { | |||
62 | int retval; | 75 | int retval; |
63 | struct pollfd fds; | 76 | struct pollfd fds; |
64 | 77 | ||
78 | printf("udpRecvHandler\n"); | ||
65 | if ((socketfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { | 79 | if ((socketfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { |
66 | fprintf(stderr, "Error: Failed to create socket\n"); | 80 | fprintf(stderr, "Error: Failed to create socket\n"); |
67 | return; | 81 | return; |
@@ -69,7 +83,7 @@ void udpRecvHandler() { | |||
69 | memset((char *)&serverAddr, 0, sizeof(serverAddr)); | 83 | memset((char *)&serverAddr, 0, sizeof(serverAddr)); |
70 | memset(buffer, 0, sizeof(buffer)); | 84 | memset(buffer, 0, sizeof(buffer)); |
71 | serverAddr.sin_family = AF_INET; | 85 | serverAddr.sin_family = AF_INET; |
72 | serverAddr.sin_port = htons(port); | 86 | serverAddr.sin_port = htons(PORT); |
73 | serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); | 87 | serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); |
74 | 88 | ||
75 | if (bind(socketfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == | 89 | if (bind(socketfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == |
@@ -107,7 +121,9 @@ void udpRecvHandler() { | |||
107 | break; | 121 | break; |
108 | } else if (retval == 0) { | 122 | } else if (retval == 0) { |
109 | printf("No data within three seconds.\n"); | 123 | printf("No data within three seconds.\n"); |
110 | speedControl(0, 0); | 124 | // out of 3s, stop the wheel |
125 | path_ctrl_t path = {0, 0}; | ||
126 | path_ctrl_t_publish(path_ctrl_lcm, "wheel_ctrl", &path); | ||
111 | } else { | 127 | } else { |
112 | bytesReceived = recvfrom(socketfd, buffer, MAX_BUFFER_SIZE, 0, | 128 | bytesReceived = recvfrom(socketfd, buffer, MAX_BUFFER_SIZE, 0, |
113 | (struct sockaddr *)&clientAddr, &addrLen); | 129 | (struct sockaddr *)&clientAddr, &addrLen); |
@@ -136,7 +152,7 @@ void udpSendHandler() { | |||
136 | 152 | ||
137 | memset((char *)&serverAddr, 0, sizeof(serverAddr)); | 153 | memset((char *)&serverAddr, 0, sizeof(serverAddr)); |
138 | serverAddr.sin_family = AF_INET; // 设置地址族为IPv4 | 154 | serverAddr.sin_family = AF_INET; // 设置地址族为IPv4 |
139 | serverAddr.sin_port = htons(port); // 设置端口号 | 155 | serverAddr.sin_port = htons(PORT); // 设置端口号 |
140 | if (inet_aton(clientIP, &serverAddr.sin_addr) == 0) { | 156 | if (inet_aton(clientIP, &serverAddr.sin_addr) == 0) { |
141 | fprintf(stderr, "Error: Failed to convert IP address\n"); | 157 | fprintf(stderr, "Error: Failed to convert IP address\n"); |
142 | close(sockfd); | 158 | close(sockfd); |
@@ -146,14 +162,13 @@ void udpSendHandler() { | |||
146 | while (true) { | 162 | while (true) { |
147 | sendto(sockfd, (const char *)heartBeat, 9, 0, | 163 | sendto(sockfd, (const char *)heartBeat, 9, 0, |
148 | (struct sockaddr *)&serverAddr, sizeof(serverAddr)); | 164 | (struct sockaddr *)&serverAddr, sizeof(serverAddr)); |
149 | printf("Send: Data %02x udpSend successfully!\n", a); | ||
150 | sleep(1); | 165 | sleep(1); |
151 | } | 166 | } |
152 | } | 167 | } |
153 | 168 | ||
154 | void parseCmd(const char *buffer, int bytesReceived) { | 169 | void parseCmd(const char *buffer, int bytesReceived) { |
155 | // TODO: 完成本函数的内容 | 170 | // TODO: 完成本函数的内容 |
156 | if (buffer == NULL || strlen(buffer) != 9) { | 171 | if (buffer == NULL) { |
157 | fprintf(stderr, "Error: Invalid message\n"); | 172 | fprintf(stderr, "Error: Invalid message\n"); |
158 | return; | 173 | return; |
159 | } | 174 | } |
@@ -179,6 +194,5 @@ void parseCmd(const char *buffer, int bytesReceived) { | |||
179 | */ | 194 | */ |
180 | } else if (buffer[0] == 3) { | 195 | } else if (buffer[0] == 3) { |
181 | // 手机发来的终点坐标,转发给算法模块 | 196 | // 手机发来的终点坐标,转发给算法模块 |
182 | ; | ||
183 | } | 197 | } |
184 | } \ No newline at end of file | 198 | } \ No newline at end of file |