Мне нужно реализовать определенный протокол через последовательное устройство. Я уже сделал конструктор сообщений и у меня есть список байтов, готовых к отправке. У меня проблема в том, что я не могу проверить, правильно ли я отправляю байты в интерфейс /dev/ttyS2
. Мои последовательные сообщения имеют структуру PATTERN + MESSAGE
Я могу читать с последовательного устройства и отфильтровать некоторые полученные известные сообщения, выполнив:
cat /dev/ttyS2 | grep PATTERN
В моей программе (код ниже),если я отправляю свое сообщение, я не могу видеть свои кадры с помощью предыдущей команды:
static FILE * file_stream = NULL;
static int file_des = 0;
static void printSampleMessage(void) {
struct termios SerialPortSettings; /* Create the structure */
/* Open linux device */
file_des = open("/dev/ttyS2", O_RDWR | O_NOCTTY);
/*---------- Setting the Attributes of the serial port using termios structure --------- */
tcgetattr(file_des, &SerialPortSettings); /* Get the current attributes of the Serial port */
/* Setting the Baud rate */
cfsetispeed(&SerialPortSettings,B38400); /* Set Read Speed as 38400 */
cfsetospeed(&SerialPortSettings,B38400); /* Set Write Speed as 38400 */
/* 8N1 Mode */
SerialPortSettings.c_cflag &= ~PARENB; /* Disables the Parity Enable bit(PARENB),So No Parity */
SerialPortSettings.c_cflag &= ~CSTOPB; /* CSTOPB = 2 Stop bits,here it is cleared so 1 Stop bit */
SerialPortSettings.c_cflag &= ~CSIZE; /* Clears the mask for setting the data size */
SerialPortSettings.c_cflag |= CS8; /* Set the data bits = 8 */
SerialPortSettings.c_cflag &= ~CRTSCTS; /* No Hardware flow Control */
SerialPortSettings.c_cflag |= CREAD | CLOCAL; /* Enable receiver,Ignore Modem Control lines */
SerialPortSettings.c_iflag &= ~(IXON | IXOFF | IXANY); /* Disable XON/XOFF flow control both i/p and o/p */
SerialPortSettings.c_iflag &= ~(ICANON | ECHO | ECHOE | ISIG); /* Non Cannonical mode */
SerialPortSettings.c_oflag &= ~OPOST; /*No Output Processing RAW mode*/
if((tcsetattr(file_des,TCSANOW,&SerialPortSettings)) != 0) {/* Set the attributes to the termios structure*/
} else {
}
/* Obtain file stream descriptor */
file_stream = fdopen(file_des, "r+");
fputs ( "PATTERN+MESSAGE", file_stream);
}
Однако я не могу видеть свое собственное сообщение при использовании команды cat /dev/ttyS2 | grep PATTERN
. Как я могу проверить, действительно ли я отправляю свое PATTERN + сообщение в последовательное устройство?
Я весьма ограничен в плане параметров программы. Моя установка - встроенный linux, взаимодействующий с другим микроконтроллером внутри платы (нет контрольной точки для подключения физического анализатора), и нет доступных миникомов, поскольку используемый мной дистрибутив linux очень простой, я не могу просто apt-get install XX