I'm trying to write a char array to the serial port twice. For some reason the second time I call write() it fails and I have no idea why. The weird part is that the first write succeeds.
Here's my write function:
void write_port()
{
unsigned char writeBuffer[5];
int i;
size_t len;
writeBuffer[0] = 0x00;
writeBuffer[1] = 0x01;
writeBuffer[2] = 0x02;
writeBuffer[3] = 0x03;
writeBuffer[4] = 0x04;
len = sizeof(writeBuffer);
for (i=0; i < len; i++)
{
printf("Write: %x\n", writeBuffer[i]);
}
//First Write:
int n = write(fd, writeBuffer, len);
if (n < 0)
fputs("Serial Port Write Failed!\n", stderr);
else
printf("Wrote %0d bytes to serial port\n", n);
//Second Write:
n = write(fd, writeBuffer, len);
if (n < 0)
fputs("Serial Port Write Failed!\n", stderr);
else
printf("Wrote %0d bytes to serial port\n", n);
}
Here's where I configure the port:
int open_port(void)
{
struct termios options;
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK);
bzero(&options, sizeof(options)); // set everything to 0
if (fd != -1)
{
printf("Serial Port Open\n");
tcgetattr(fd, &options_original);
tcgetattr(fd, &options);
cfsetispeed(&options, B460800);
cfsetospeed(&options, B460800);
options.c_cflag |= (CLOCAL | CREAD); /* Enable the receiver and set local mode */
options.c_cflag &= ~ECHO; // Disable echoing of input characters
options.c_cflag &= ~ECHOE;
options.c_cflag &= ~PARENB; // parity disabled
options.c_cflag &= ~CSTOPB; // 1 stop bit
options.c_cflag &= ~CSIZE; // Mask the character size bits
options.c_cflag |= CS8; // 8 data bits
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /* Raw Input Mode */
if (tcsetattr(fd, TCSANOW, &options)) /* Set the new options for the port */
{
perror("could not set the serial settings!");
return -1;
}
}
else
{
/* Could not open the port */
perror("open_port: Unable to open /dev/ttyUSB0 - ");
}
return (fd);
}
Finally here's my console output.
Serial Port Open
Flushing IO Buffers
Write: 0
Write: 1
Write: 2
Write: 3
Write: 4
Wrote 5 bytes to serial port
Serial Port Write Failed!
Serial Port Closed
So for some unknown reason I get -1 back from the second write() and have absolutely no idea why, what in the world could cause that?