libserial readsome возвращает странное значение (не ошибка)

моя ОС: Ubuntu 14.04

IDE: Затмение Марса

Libs: GCC, libserial

я использую libserial общаться по последовательной шине.

#include <SerialStream.h>
#include <iostream>
#include <unistd.h>
#include <cstdlib>
#include <string.h>

/*****************************************************************************/
int main(int argc, char** argv)
{
using namespace LibSerial ;
SerialStream serial_port ;
serial_port.Open("/dev/ttyACM0") ;

if ( ! serial_port.good() )
{
std::cerr << "[" << __FILE__ << ":" << __LINE__ << "] "<< "Error: Could not open serial port."<< std::endl ;
exit(1) ;
}

serial_port.SetBaudRate( SerialStreamBuf::BAUD_115200 ) ;
if ( ! serial_port.good() )
{
std::cerr << "Error: Could not set the baud rate." << std::endl ;
exit(1) ;
}

serial_port.SetCharSize( SerialStreamBuf::CHAR_SIZE_8 ) ;
if ( ! serial_port.good() )
{
std::cerr << "Error: Could not set the character size." << std::endl ;
exit(1) ;
}

serial_port.SetParity( SerialStreamBuf::PARITY_NONE ) ;
if ( ! serial_port.good() )
{
std::cerr << "Error: Could not disable the parity." << std::endl ;
exit(1) ;
}

serial_port.SetNumOfStopBits( 1 ) ;
if ( ! serial_port.good() )
{
std::cerr << "Error: Could not set the number of stop bits."<< std::endl ;
exit(1) ;
}

serial_port.SetFlowControl( SerialStreamBuf::FLOW_CONTROL_NONE ) ;
if ( ! serial_port.good() )
{
std::cerr << "Error: Could not use hardware flow control."<< std::endl ;
exit(1) ;
}

while(run)
{
int inCount = serial_port.rdbuf()->in_avail();
if (inCount > 0)
{
char buffer[1024];
// here is the problem
int nbytes = serial_port.readsome(buffer, inCount);
if (!serial_port.good())
{
std::cerr << "Error: readsome";
}

serial_port.write(buffer, strlen(buffer));
std::cerr << "read: " << nbytes << "available: " << inCount << "\n";
}
}

serial_port.Close();
std::cerr << std::endl ;
return EXIT_SUCCESS ;
}

точка

readsome ()

читает правильно и заполняет буфер, но его возвращаемое значение не так, как ожидалось, число прочитанных значений. он всегда возвращает «6394433».

Есть идеи, что здесь происходит?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]