aboutsummaryrefslogtreecommitdiffstats
path: root/udp2lcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'udp2lcm.c')
-rw-r--r--udp2lcm.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/udp2lcm.c b/udp2lcm.c
index ec8aee8..c328a96 100644
--- a/udp2lcm.c
+++ b/udp2lcm.c
@@ -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
154void parseCmd(const char *buffer, int bytesReceived) { 169void 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