#include #include #include #include int recvmsg(int fd, char *msg, int maxlen) { // Receive a response message from the EMG101 laser, // looking for a capital letter status code as a message // terminator. The return value is the number of characters // received including the status code letter but not the // string-terminating null. Two error exits values exist: // -1) means it timed out waiting for a response (10s) // -99) means the input buffer overflowed int len = 0; while (len < maxlen - 1) { int resp = serialGetchar(fd); if (resp == -1) { msg[len] = 0; return -1; } msg[len++] = resp; if (resp >= 'A' && resp <= 'Z') { msg[len] = 0; return len; } } return -9; } int main() { int fd = serialOpen("/dev/ttyUSB0", 300); printf("serialOpen returns fd=%d\n",fd); // set the com port attributes struct termios portset; tcgetattr(fd, &portset); portset.c_iflag &= ~(IGNBRK | BRKINT | ICRNL | INLCR | PARMRK | INPCK | ISTRIP | IXON); portset.c_oflag = 0; portset.c_cflag &= ~(CSIZE | PARENB | CSTOPB); portset.c_cflag |= (CS8 | CRTSCTS); int ret = tcsetattr(fd, TCSAFLUSH, &portset); if (ret != 0) { printf("Error from tcsetattr: %d\n", ret); } // try a test message serialPrintf(fd, "C"); char response[999]; ret = recvmsg(fd, response, 999); if (ret > 0) { printf("received response: %s\n", response); } else { printf("error receiving response: %d\n", ret); } serialClose(fd); }