Last active 1743519296

hana's Avatar hana revised this gist 1743519296. Go to revision

1 file changed, 175 insertions

gistfile1.txt(file created)

@@ -0,0 +1,175 @@
1 + /* !<3 minicom */
2 + #include <stdio.h>
3 + #include <fcntl.h>
4 + #include <string.h>
5 + #include <sys/types.h>
6 + #include <sys/time.h>
7 + #include <termios.h>
8 + //#include <errno.h>
9 + #include <unistd.h>
10 +
11 + char* fixstrings_old(char* str) {
12 + char *pr = str, *pw = str;
13 + while (*pr) {
14 + *pw = *pr++;
15 + pw += (*pw != 13);
16 + }
17 + // *pw = '\0';
18 + return str;
19 + }
20 +
21 + char *fixstrings (char *s) {
22 +
23 + char *p1;
24 +
25 + for (p1=s; *p1; p1++) {
26 + if (*p1 == 10){ // <---- Error here
27 + *p1 == '1';} // <---- And here...
28 + }
29 + }
30 +
31 + /* int
32 + set_interface_attribs (int fd, int speed, int parity)
33 + {
34 + struct termios tty;
35 + memset (&tty, 0, sizeof tty);
36 + if (tcgetattr (fd, &tty) != 0)
37 + {
38 + printf ("error %d from tcgetattr", errno);
39 + return -1;
40 + }
41 +
42 + cfsetospeed (&tty, speed);
43 + cfsetispeed (&tty, speed);
44 +
45 + tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; // 8-bit chars
46 + // disable IGNBRK for mismatched speed tests; otherwise receive break
47 + // as \000 chars
48 + tty.c_iflag &= ~IGNBRK; // disable break processing
49 + tty.c_lflag = 0; // no signaling chars, no echo,
50 + // no canonical processing
51 + tty.c_oflag = 0; // no remapping, no delays
52 + tty.c_cc[VMIN] = 0; // read doesn't block
53 + tty.c_cc[VTIME] = 5; // 0.5 seconds read timeout
54 +
55 + tty.c_iflag &= ~(IXON | IXOFF | IXANY); // shut off xon/xoff ctrl
56 +
57 + tty.c_cflag |= (CLOCAL | CREAD);// ignore modem controls,
58 + // enable reading
59 + tty.c_cflag &= ~(PARENB | PARODD); // shut off parity
60 + tty.c_cflag |= parity;
61 + tty.c_cflag &= ~CSTOPB;
62 + tty.c_cflag &= ~CRTSCTS;
63 +
64 + if (tcsetattr (fd, TCSANOW, &tty) != 0)
65 + {
66 + printf ("error %d from tcsetattr", errno);
67 + return -1;
68 + }
69 + return 0;
70 + }
71 +
72 + void
73 + set_blocking (int fd, int should_block)
74 + {
75 + struct termios tty;
76 + memset (&tty, 0, sizeof tty);
77 + if (tcgetattr (fd, &tty) != 0)
78 + {
79 + printf ("error %d from tggetattr", errno);
80 + return;
81 + }
82 +
83 + tty.c_cc[VMIN] = should_block ? 1 : 0;
84 + tty.c_cc[VTIME] = 5; // 0.5 seconds read timeout
85 +
86 + if (tcsetattr (fd, TCSANOW, &tty) != 0)
87 + printf ("error %d setting term attributes", errno);
88 + }
89 + */
90 +
91 + // set_interface_attribs (mamed, B9600, 0);
92 + // set_blocking (mamed, 0);
93 +
94 + int main(int argc, char *argv[])
95 + {
96 + if ( argc < 3 ) { printf("Usage: %s PORT COMMAND\n or %s PORT COMMAND TIMEOUT [PATTERN]\n\n TIMEOUT can be \n 0 wait indefinitely for OK/ERROR, \n -1 wait indefinitely for OK, \n -11 wait indefinitely for custom pattern\n or any value between 1 and 2147483647 in ms.\n",argv[0],argv[0]); return; }
97 + // int mamed = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY); //
98 + int mamed = open(argv[1], O_RDWR | O_NOCTTY | O_NONBLOCK);
99 +
100 + struct termios tty;
101 + cfsetospeed (&tty, (speed_t)B115200);
102 + cfsetispeed (&tty, (speed_t)B115200);
103 +
104 + /* Setting other Port Stuff */
105 + tty.c_cflag |= (CLOCAL | CREAD);
106 + tty.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
107 + tty.c_oflag &= OCRNL;
108 + tty.c_cc[VMIN] = 0;
109 + tty.c_cc[VTIME] = 20;
110 +
111 + /* Make raw */
112 + cfmakeraw(&tty);
113 +
114 + /* Flush Port, then applies attributes */
115 + tcflush( mamed, TCIFLUSH );
116 + tcsetattr ( mamed, TCSANOW, &tty );
117 +
118 +
119 + fd_set set;
120 + char* strana ;
121 + struct timeval timeout;
122 + int owait=0;
123 + char* opattern="\r\nOK\r\n";
124 + if ( argc > 3 ) {
125 + owait=atoi(argv[3]);
126 + if ( owait < 1 ) {
127 + timeout.tv_usec = 0;
128 + timeout.tv_sec = 3600;
129 + if ( owait == -11 ) opattern=argv[4];
130 + }
131 + else {
132 + timeout.tv_usec = owait*1000;
133 + timeout.tv_sec = 0;
134 + }
135 + }
136 + else {
137 + timeout.tv_sec = 0;
138 + timeout.tv_usec = 100000;
139 + }
140 + // printf("Timeout: %d ms\n",timeout.tv_usec/1000);
141 + char reslt[255];
142 + char* command= argv[2];
143 + command = strcat (command,"\r\n");
144 + int nowread=0;
145 + if (mamed == -1) { printf("error: port is not port..."); } else fcntl(mamed, F_SETFL, 0);
146 + FD_ZERO(&set);
147 + FD_SET(mamed, &set);
148 + if ( write(mamed, command , strlen(argv[2]))+1 < 0 ) printf("write port failed\n") ; //else printf("write port ok %s\n",command);
149 + nowread=1;
150 + while(nowread>0) {
151 + nowread = read(mamed,reslt,255);
152 + reslt[nowread]=0;
153 + printf("%s",reslt);
154 + switch(owait) {
155 + case 0:
156 + if ( strstr(reslt,"\r\nERROR") != NULL ) nowread=0;
157 + case -11 ... -1 :
158 + if ( strstr(reslt,opattern) != NULL ) nowread=0;
159 + break;
160 + default:
161 + if ( strstr(reslt,"\r\nERROR") != NULL ) nowread=0;
162 + if ( strstr(reslt,opattern) != NULL ) nowread=0;
163 + if ( select(mamed + 1, &set, NULL, NULL, &timeout) == 0 ) nowread=0;
164 + }
165 + }
166 + close (mamed);
167 + }
168 + /* Написала и взбесилась .
169 + 28I2015
170 +
171 + Пост ненависти к minicom
172 + Редакция вторая,
173 + улучшенная.
174 + 20IV2016
175 + */
Newer Older