diff options
Diffstat (limited to 'serial.c')
-rw-r--r-- | serial.c | 20 |
1 files changed, 14 insertions, 6 deletions
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | typedef unsigned char byte; | 11 | typedef unsigned char byte; |
12 | #define MAX_BUFFER_SIZE 1024 | 12 | #define MAX_BUFFER_SIZE 1024 |
13 | #define DEFAULT_SPEED 0x15 | ||
13 | 14 | ||
14 | int fd; // 轮子的串口文件描述符 | 15 | int fd; // 轮子的串口文件描述符 |
15 | char portname[50] = "/dev/ttyUSB0"; // 串口设备名 | 16 | char portname[50] = "/dev/ttyUSB0"; // 串口设备名 |
@@ -19,18 +20,24 @@ struct termios tty; | |||
19 | bool whellInit(); | 20 | bool whellInit(); |
20 | bool wheelSend(byte a, byte a_v, byte b, byte b_v); | 21 | bool wheelSend(byte a, byte a_v, byte b, byte b_v); |
21 | void speedControl(byte status, byte speed); | 22 | void speedControl(byte status, byte speed); |
22 | void parseCmd(const path_ctrl_t *msg, void *user); | 23 | void parseCmd(const lcm_recv_buf_t *rbuf, const char *channel, |
24 | const path_ctrl_t *msg, void *userdata); | ||
23 | 25 | ||
24 | int main() { | 26 | int main() { |
25 | if (!whellInit()) { | 27 | if (!whellInit()) { |
26 | goto err; | 28 | goto err; |
27 | } | 29 | } |
28 | lcm *path_lcm = lcm_create(NULL); | 30 | lcm_t *path_lcm = lcm_create(NULL); |
29 | if (!path_lcm) { | 31 | if (!path_lcm) { |
30 | fprintf(stderr, "Failed to create LCM\n"); | 32 | fprintf(stderr, "Failed to create LCM\n"); |
31 | goto err; | 33 | goto err; |
32 | } | 34 | } |
33 | path_ctrl_t_subscribe(path_lcm, "PATH_CTRL", parseCmd); | 35 | path_ctrl_t cmd; |
36 | path_ctrl_t_subscribe(path_lcm, "wheel_ctrl", parseCmd, &cmd); | ||
37 | |||
38 | while (true) { | ||
39 | lcm_handle(path_lcm); | ||
40 | } | ||
34 | 41 | ||
35 | err: | 42 | err: |
36 | close(fd); | 43 | close(fd); |
@@ -102,17 +109,18 @@ bool wheelSend(byte a, byte a_v, byte b, byte b_v) { | |||
102 | return true; | 109 | return true; |
103 | } | 110 | } |
104 | 111 | ||
105 | void parseCmd(const path_ctrl_t *msg, void *user) { | 112 | void parseCmd(const lcm_recv_buf_t *rbuf, const char *channel, |
113 | const path_ctrl_t *msg, void *userdata) { | ||
106 | byte status = msg->cmd, speed = msg->speed; | 114 | byte status = msg->cmd, speed = msg->speed; |
107 | switch (status) { | 115 | switch (status) { |
108 | case 1: | 116 | case 1: |
109 | wheelSend(0x01, speed, 0x01, speed); | 117 | wheelSend(0x01, speed, 0x01, speed); |
110 | break; | 118 | break; |
111 | case 2: | 119 | case 2: |
112 | wheelSend(0x02, speed, 0x01, speed); | 120 | wheelSend(0x02, DEFAULT_SPEED, 0x01, DEFAULT_SPEED); |
113 | break; | 121 | break; |
114 | case 3: | 122 | case 3: |
115 | wheelSend(0x01, speed, 0x02, speed); | 123 | wheelSend(0x01, DEFAULT_SPEED, 0x02, DEFAULT_SPEED); |
116 | break; | 124 | break; |
117 | case 0: | 125 | case 0: |
118 | default: | 126 | default: |