Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <errno.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <termios.h>
- #include <unistd.h>
- #define DISPLAY_STRING 1
- int set_interface_attribs(int fd, int speed)
- {
- struct termios tty;
- if (tcgetattr(fd, &tty) < 0) {
- printf("Error from tcgetattr: %s\n", strerror(errno));
- return -1;
- }
- cfsetospeed(&tty, (speed_t)speed);
- cfsetispeed(&tty, (speed_t)speed);
- tty.c_cflag |= (CLOCAL | CREAD); /* ignore modem controls */
- tty.c_cflag &= ~CSIZE;
- tty.c_cflag |= CS8; /* 8-bit characters */
- tty.c_cflag &= ~PARENB; /* no parity bit */
- tty.c_cflag &= ~CSTOPB; /* only need 1 stop bit */
- tty.c_cflag &= ~CRTSCTS; /* no hardware flowcontrol */
- /* setup for non-canonical mode */
- tty.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
- tty.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
- tty.c_oflag &= ~OPOST;
- /* fetch bytes as they become available */
- tty.c_cc[VMIN] = 1;
- tty.c_cc[VTIME] = 1;
- if (tcsetattr(fd, TCSANOW, &tty) != 0) {
- printf("Error from tcsetattr: %s\n", strerror(errno));
- return -1;
- }
- return 0;
- }
- void set_mincount(int fd, int mcount)
- {
- struct termios tty;
- if (tcgetattr(fd, &tty) < 0) {
- printf("Error tcgetattr: %s\n", strerror(errno));
- return;
- }
- tty.c_cc[VMIN] = mcount ? 1 : 0;
- tty.c_cc[VTIME] = 5; /* half second timer */
- if (tcsetattr(fd, TCSANOW, &tty) < 0)
- printf("Error tcsetattr: %s\n", strerror(errno));
- }
- int main(int argc, char* argv[])
- {
- int fd, rlen, wlen;
- unsigned char buf[80];
- const char portname[] = "/dev/ttyACM0";
- fd = open(portname, O_RDWR | O_NOCTTY | O_SYNC);
- if (fd < 0) {
- printf("Error opening %s: %s\n", portname, strerror(errno));
- return -1;
- }
- /*baudrate 115200, 8 bits, no parity, 1 stop bit */
- set_interface_attribs(fd, B115200);
- //set_mincount(fd, 0); /* set to pure timed read */
- wlen = write(fd, "ATZ", 3);
- if (wlen != 3) {
- printf("Error from write: %d, %d\n", wlen, errno);
- }
- tcdrain(fd); /* delay for output */
- wlen = write(fd, "AT+CID=?", 8);
- if (wlen != 8) {
- printf("Error from write: %d, %d\n", wlen, errno);
- }
- tcdrain(fd); /* delay for output */
- /* simple noncanonical input */
- do
- {
- rlen = read(fd, buf, sizeof(buf) - 1);
- if (rlen > 0) {
- #ifdef DISPLAY_STRING
- buf[rlen] = 0;
- printf("Read %d: \"%s\"\n", rlen, buf);
- #else /* display hex */
- unsigned char *p;
- printf("Read %d:", rlen);
- for (p = buf; rlen-- > 0; p++)
- printf(" 0x%x", *p);
- printf("\n");
- #endif
- } else if (rlen < 0) {
- printf("Error from read: %d: %s\n", rlen, strerror(errno));
- } else { /* rlen == 0 */
- printf("Timeout from read\n");
- }
- /* repeat read to get full message */
- } while (1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement