Last active 1743519296

gistfile1.txt Raw
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
11char* 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
21char *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
32set_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
72void
73set_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
94int 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
100struct termios tty;
101cfsetospeed (&tty, (speed_t)B115200);
102cfsetispeed (&tty, (speed_t)B115200);
103
104/* Setting other Port Stuff */
105tty.c_cflag |= (CLOCAL | CREAD);
106tty.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
107tty.c_oflag &= OCRNL;
108tty.c_cc[VMIN] = 0;
109tty.c_cc[VTIME] = 20;
110
111/* Make raw */
112cfmakeraw(&tty);
113
114/* Flush Port, then applies attributes */
115tcflush( mamed, TCIFLUSH );
116tcsetattr ( 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 */
176