summaryrefslogtreecommitdiff
path: root/src/MTS_IO_SerialConnection.cpp
diff options
context:
space:
mode:
authorSerhii Voloshynov <serhii.voloshynov@globallogic.com>2020-02-28 10:07:39 +0200
committerSerhii Voloshynov <serhii.voloshynov@globallogic.com>2020-02-28 15:09:43 +0200
commit4d6fe7516f8469062a063cd36c6ceff0c6b446da (patch)
treeec6550a0f0aa4e8ed688a58992f84a3ef1bd5206 /src/MTS_IO_SerialConnection.cpp
parent7e44d14074eef23a8532f3e1070cdd51779428b1 (diff)
downloadlibmts-io-4d6fe7516f8469062a063cd36c6ceff0c6b446da.tar.gz
libmts-io-4d6fe7516f8469062a063cd36c6ceff0c6b446da.tar.bz2
libmts-io-4d6fe7516f8469062a063cd36c6ceff0c6b446da.zip
add debug info to SerialConnection::doOpen
Diffstat (limited to 'src/MTS_IO_SerialConnection.cpp')
-rw-r--r--src/MTS_IO_SerialConnection.cpp74
1 files changed, 73 insertions, 1 deletions
diff --git a/src/MTS_IO_SerialConnection.cpp b/src/MTS_IO_SerialConnection.cpp
index a9f3d6e..c91f5d5 100644
--- a/src/MTS_IO_SerialConnection.cpp
+++ b/src/MTS_IO_SerialConnection.cpp
@@ -254,6 +254,77 @@ int SerialConnection::getFileDescriptor() {
return h;
}
+const char* SerialConnection::humanSpeed(speed_t speed) {
+ const char *hspeed;
+ switch (speed) {
+ case B0: hspeed = "B0";
+ break;
+ case B50: hspeed = "B50";
+ break;
+ case B75: hspeed = "B75";
+ break;
+ case B110: hspeed = "B110";
+ break;
+ case B134: hspeed = "B134";
+ break;
+ case B150: hspeed = "B150";
+ break;
+ case B200: hspeed = "B200";
+ break;
+ case B300: hspeed = "B300";
+ break;
+ case B600: hspeed = "B600";
+ break;
+ case B1200: hspeed = "B1200";
+ break;
+ case B1800: hspeed = "B1800";
+ break;
+ case B2400: hspeed = "B2400";
+ break;
+ case B4800: hspeed = "B4800";
+ break;
+ case B9600: hspeed = "B9600";
+ break;
+ case B19200: hspeed = "B19200";
+ break;
+ case B57600: hspeed = "B57600";
+ break;
+ case B115200: hspeed = "B115200";
+ break;
+ default: hspeed = "unknown";
+ }
+ return hspeed;
+}
+
+void SerialConnection::printPortSetting(const termios *options){
+ printDebug("SERIAL| port settings:");
+ printDebug("SERIAL| in speed:%s out speed:%s",
+ humanSpeed(cfgetispeed(options)),
+ humanSpeed(cfgetospeed(options)));
+ int data_length=0;
+ if ((options->c_cflag&CSIZE) == CS5) {
+ data_length = 5;
+ }
+ if ((options->c_cflag&CSIZE) == CS6) {
+ data_length = 6;
+ }
+ if ((options->c_cflag&CSIZE) == CS7) {
+ data_length = 7;
+ }
+ if ((options->c_cflag&CSIZE) == CS8) {
+ data_length = 8;
+ }
+ printDebug("SERIAL| data:%d stop bits:%d", data_length,options->c_cflag&CSTOPB?2:1);
+ if (!(options->c_cflag&PARENB)) {
+ printDebug("SERIAL| parity: NONE");
+ } else if (options->c_cflag&PARODD) {
+ printDebug("SERIAL| parity: ODD");
+ } else {
+ printDebug("SERIAL| parity: EVEN");
+ }
+ printDebug("SERIAL| CRTSCTS:%d", options->c_cflag&CRTSCTS?1:0);
+}
+
bool SerialConnection::doOpen(const int32_t& timeoutMillis) {
m_apHandleLock->lock();
@@ -412,8 +483,9 @@ bool SerialConnection::doOpen(const int32_t& timeoutMillis) {
//Set Control Modes
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 2; // tenths of seconds
-
+ printPortSetting(&options);
result = tcsetattr(m_iHandle, TCSANOW, &options);
+
if (result == -1) {
printWarning("SERIAL| Failed to set configurations on port [%s] [%d]%s", m_sPortName.c_str(), errno,
errno == 13 ? " (Permission Denied)" : "");