18 #ifndef ROS_EMBEDDED_LINUX_COMMS_H 19 #define ROS_EMBEDDED_LINUX_COMMS_H 30 #include <sys/types.h> 31 #include <sys/socket.h> 32 #include <netinet/in.h> 33 #include <netinet/tcp.h> 37 #define DEFAULT_PORTNUM 11411 48 flags = fcntl(socket, F_GETFL, 0);
50 fcntl(socket, F_SETFL, flags | O_NONBLOCK);
55 struct termios options;
58 struct sockaddr_in serv_addr;
64 printf(
"Opening serial port %s\n", portName);
66 fd = open(portName, O_RDWR | O_NOCTTY | O_NDELAY);
71 perror(
"init(): Unable to open serial port - ");
77 fcntl(fd, F_SETFL, FNDELAY);
80 tcgetattr(fd, &options);
81 cfsetispeed(&options, B57600);
82 cfsetospeed(&options, B57600);
83 options.c_cflag |= (CLOCAL | CREAD);
84 options.c_cflag &= ~PARENB;
85 options.c_cflag &= ~CSTOPB;
86 options.c_cflag &= ~CSIZE;
87 options.c_cflag |= CS8;
88 options.c_cflag &= ~CRTSCTS;
89 options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
90 options.c_iflag &= ~(IXON | IXOFF | IXANY);
91 options.c_oflag &= ~OPOST;
94 tcsetattr(fd, TCSANOW, &options);
101 const char* tcpPortNumString = strchr(portName,
':');
104 if (!tcpPortNumString)
107 strncpy(ip, portName, 16);
111 tcpPortNum = strtol(tcpPortNumString + 1, NULL, 10);
112 strncpy(ip, portName, tcpPortNumString - portName);
115 printf(
"Connecting to TCP server at %s:%ld....\n", ip, tcpPortNum);
118 sockfd = socket(AF_INET, SOCK_STREAM, 0);
121 error(
"ERROR opening socket");
127 rv = setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (
char *)&flag,
sizeof(flag));
130 printf(
"Couldn't setsockopt(TCP_NODELAY)\n");
135 server = gethostbyname(ip);
138 fprintf(stderr,
"ERROR, no such host\n");
141 bzero((
char *) &serv_addr,
sizeof(serv_addr));
142 serv_addr.sin_family = AF_INET;
143 bcopy((
char *)server->h_addr,
144 (
char *)&serv_addr.sin_addr.s_addr,
146 serv_addr.sin_port = htons(tcpPortNum);
147 if (connect(sockfd, (
struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
148 error(
"ERROR connecting");
150 printf(
"connected to server\n");
161 rv = read(fd, &c, 1);
167 if ((errno != EAGAIN) && (errno != EWOULDBLOCK))
168 perror(
"elCommRead() error:");
180 while (totalsent < length)
182 rv = write(fd, data + totalsent, length);
184 perror(
"write(): error writing - trying again - ");
void error(const char *msg)
void set_nonblock(int socket)
int elCommWrite(int fd, uint8_t *data, int len)
int elCommInit(const char *portName, int baud)