blob: 95b765463e391f80caf66c354001acdb7cc36961 [file] [log] [blame]
b.liu68a94c92025-05-24 12:53:41 +08001#include <stdio.h>
2#include <string.h>
3#include <strings.h>
4#include <stdlib.h>
5#include <errno.h>
6#include <fcntl.h>
7#include <signal.h>
8#include <sys/types.h>
9#include <unistd.h>
10#include <pthread.h>
11#include <termios.h>
12#include <time.h>
13#include <sys/ioctl.h>
14#include <dlfcn.h>
15#include <stdint.h>
16#include <stdbool.h>
17#define MY_IOCTL_CMD3 _IOW('d', 1, char*) // 写入字符串
18typedef enum{
19 GSW_HAL_BAUDRATE_1200=1200,
20 GSW_HAL_BAUDRATE_1800=1800,
21 GSW_HAL_BAUDRATE_4800=4800,
22 GSW_HAL_BAUDRATE_9600=9600,
23 GSW_HAL_BAUDRATE_19200=19200,
24 GSW_HAL_BAUDRATE_38400=38400,
25 GSW_HAL_BAUDRATE_57600=57600,
26 GSW_HAL_BAUDRATE_115200=115200,
27 GSW_HAL_BAUDRATE_230400=230400,
28 GSW_HAL_BAUDRATE_460800=460800,
29 GSW_HAL_BAUDRATE_500000=500000,
30 GSW_HAL_BAUDRATE_576000=576000,
31 GSW_HAL_BAUDRATE_921600=921600
32}gsw_hal_uart_baudrate;
33
34int32_t (*gsw_uart_open_ex)(int8_t *port, gsw_hal_uart_baudrate, uint32_t, int8_t, uint32_t);
35int32_t (*gsw_uart_flush)(int32_t);
36int32_t (*gsw_uart_close)(int32_t);
37int32_t (*gsw_uart_write)(int32_t, const uint8_t *buffer, uint32_t);
38int32_t (*gsw_uart_read)(int32_t, uint8_t *buffer, uint32_t, int32_t);
39int32_t (*gsw_uart_ioctl)(int32_t, uint32_t, void *pvalue);
40void *dlHandle_uart;
41char *lynqLib_uart = "/lib/libgsw_lib.so";
42
43
44int8_t *port;
45gsw_hal_uart_baudrate baudrate;
46uint32_t bits = -1;
47int8_t parity = 3;
48uint32_t stop = -1;
49int fd = -1;
50int ret = -1;
51void prama(char *buffer)
52{
53 char *words[10];
54 for (int i = 0; i < 10; i++)
55 {
56 words[i] = (char *)malloc(20 * sizeof(char));
57 if (words[i] != NULL)
58 {
59 strcpy(words[i], "");
60 }
61 }
62 int i = 0;
63 buffer[strlen(buffer)-1] = '\0';
64 char *token = strtok(buffer, " ");
65 while (token != NULL && i < 10)
66 {
67 strcpy(words[i], token);
68 printf("var%d = %s\n", i, words[i]);
69 i++;
70 token = strtok(NULL, " ");
71 }
72 if (words[0])
73 port = (int8_t *)words[0];
74 if (words[1])
75 baudrate = atoi(words[1]);
76 if (words[2])
77 bits = atoi(words[2]);
78 if (words[3])
79 parity = (int8_t)(words[3][0]);
80 if (words[4])
81 stop = atoi(words[4]);
82
83 for (int i = 1; i < 10; i++)
84 {
85 free(words[i]);
86 }
87 return;
88}
89
90void *read_function(void *timeout_ms)
91{
92 uint8_t buf[128];
93 while(1)
94 {
95 memset(buf,0,sizeof(buf));
96 ret = gsw_uart_read(fd, buf, sizeof(buf) - 1, *(int *)timeout_ms);
97 if(ret > 0)
98 {
99 if(memcmp(buf, "exit", 4) == 0)
100 {
101 printf("exit\n");
102 break;
103 }
104 printf("%s\n",buf);
105 printf("gsw_uart_read success.\n");
106 }
107 }
108 close(fd);
109 return NULL;
110}
111
112int main(void)
113{
114 int opt = 0;
115 int timeout_ms;
116 dlHandle_uart = dlopen(lynqLib_uart, RTLD_NOW);
117 pthread_t read_thread;
118 while(1)
119 {
120 printf("=========uart main=========\n");
121 if (scanf("%d", &opt) != 1)
122 printf("input error,please check it");
123 while(getchar()!='\n');
124 switch (opt)
125 {
126 case 1:
127 {
128 char buffer[126];
129 if (fgets(buffer, sizeof(buffer), stdin) == NULL)
130 {
131 printf("input error\n");
132 break;
133 }
134 prama(buffer);
135 gsw_uart_open_ex=(int32_t(*)(int8_t *port, gsw_hal_uart_baudrate, uint32_t, int8_t, uint32_t))dlsym(dlHandle_uart, "gsw_uart_open_ex");
136 fd = gsw_uart_open_ex(port, baudrate, bits, parity, stop);
137 if(fd < 0)
138 {
139 printf("gsw_uart_open_ex FAIL.\n");
140 break;
141 }
142
143 printf("gsw_uart_open_ex success.\n");
144 break;
145 }
146
147 case 2:
148 {
149 gsw_uart_flush=(int32_t(*)(int32_t))dlsym(dlHandle_uart, "gsw_uart_flush");
150 ret = gsw_uart_flush(fd);
151 if(ret < 0)
152 {
153 printf("gsw_uart_flush FAIL.\n");
154 break;
155 }
156 printf("gsw_uart_flush success.\n");
157 break;
158 }
159
160 case 3:
161 {
162 gsw_uart_close=(int32_t(*)(int32_t))dlsym(dlHandle_uart, "gsw_uart_close");
163 ret = gsw_uart_close(fd);
164 if(ret < 0)
165 {
166 printf("gsw_uart_close FAIL.\n");
167 break;
168 }
169 free(port);
170 printf("gsw_uart_close success.\n");
171 return 0;
172 }
173
174 case 4:
175 {
176 const uint8_t *buf = (const uint8_t *)"Hello ward";
177 gsw_uart_write=(int32_t(*)(int32_t, const uint8_t *buffer, uint32_t))dlsym(dlHandle_uart, "gsw_uart_write");
178 ret = gsw_uart_write(fd, buf, strlen((const char* )buf));
179 if(ret < 0)
180 {
181 printf("gsw_uart_write FAIL.\n");
182 break;
183 }
184 printf("gsw_uart_write success.\n");
185 break;
186 }
187
188 case 5:
189 {
190 printf("Non-blocking read : 0\nBlockage : 1\nTimeout time (milliseconds) : greater than 1\n");
191 ret = scanf("%d",&timeout_ms);
192 gsw_uart_read=(int32_t(*)(int32_t, uint8_t *buffer, uint32_t, int32_t))dlsym(dlHandle_uart, "gsw_uart_read");
193 pthread_create(&read_thread, NULL, read_function, (void *)&timeout_ms);
194 pthread_join(read_thread, NULL);
195 break;
196 }
197
198 case 6:
199 {
200 char buf[128] = "Hello ward";
201 gsw_uart_ioctl=(int32_t(*)(int32_t, uint32_t, void *pvalue))dlsym(dlHandle_uart, "gsw_uart_ioctl");
202 ret = gsw_uart_ioctl(fd, MY_IOCTL_CMD3, buf);
203 if(ret < 0)
204 {
205 printf("gsw_uart_ioctl FAIL.\n");
206 break;
207 }
208 printf("gsw_uart_ioctl success.\n");
209 break;
210 }
211 }
212
213 }
214 return 0;
215}