X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fserial.cpp;h=dbfee955f9ae85b954daf1ff11c9c689c8476d92;hp=ec6a198bee3ac0d6d3568a9c218bac0df0f7aa4f;hb=8f2711fba7a2817840038630d9cf9a2060ecbe8e;hpb=c7afef88380ebebc8c2b04e48664d73281ec8848 diff --git a/source/io/serial.cpp b/source/io/serial.cpp index ec6a198..dbfee95 100644 --- a/source/io/serial.cpp +++ b/source/io/serial.cpp @@ -5,8 +5,8 @@ #include #include #endif +#include #include -#include "except.h" #include "serial.h" using namespace std; @@ -35,10 +35,10 @@ void set_state(Handle handle, DeviceState &state) { #ifdef WIN32 if(SetCommState(handle, &state)==0) - throw SystemError("Cannot set serial port parameters", GetLastError()); + throw system_error("SetCommState"); #else if(tcsetattr(handle, TCSADRAIN, &state)==-1) - throw SystemError("Cannot set serial port parameters", errno); + throw system_error("tcsetattr"); #endif } @@ -69,7 +69,7 @@ void set_baud_rate(DeviceState &state, unsigned baud) case 57600: speed = B57600; break; case 115200: speed = B115200; break; case 230400: speed = B230400; break; - default: throw InvalidParameterValue("Invalid baud rate"); + default: throw invalid_argument("set_baud_rate"); } cfsetospeed(&state, speed); @@ -89,7 +89,7 @@ void set_data_bits(DeviceState &state, unsigned bits) case 6: flag = CS6; break; case 7: flag = CS7; break; case 8: flag = CS8; break; - default: throw InvalidParameterValue("Invalid data bit count"); + default: throw invalid_argument("set_data_bits"); } state.c_cflag = (state.c_cflag&~CSIZE)|flag; @@ -104,7 +104,7 @@ void set_parity(DeviceState &state, Serial::Parity par) case Serial::NONE: state.Parity = NOPARITY; break; case Serial::EVEN: state.Parity = EVENPARITY; break; case Serial::ODD: state.Parity = ODDPARITY; break; - default: throw InvalidParameterValue("Invalid parity"); + default: throw invalid_argument("set_parity"); } #else tcflag_t flag; @@ -113,7 +113,7 @@ void set_parity(DeviceState &state, Serial::Parity par) case Serial::NONE: flag = 0; break; case Serial::EVEN: flag = PARENB; break; case Serial::ODD: flag = PARENB|PARODD; break; - default: throw InvalidParameterValue("Invalid parity"); + default: throw invalid_argument("set_parity"); } state.c_cflag = (state.c_cflag&~(PARENB|PARODD))|flag; @@ -127,7 +127,7 @@ void set_stop_bits(DeviceState &state, unsigned bits) { case 1: state.StopBits = ONESTOPBIT; break; case 2: state.StopBits = TWOSTOPBITS; break; - default: throw InvalidParameterValue("Invalid stop bit count"); + default: throw invalid_argument("set_stop_bits"); } #else tcflag_t flag; @@ -135,7 +135,7 @@ void set_stop_bits(DeviceState &state, unsigned bits) { case 1: flag = 0; break; case 2: flag = CSTOPB; break; - default: throw InvalidParameterValue("Invalid stop bit count"); + default: throw invalid_argument("set_stop_bits"); } state.c_cflag = (state.c_cflag&~CSTOPB)|flag; @@ -158,7 +158,7 @@ Serial::Serial(const string &descr) handle = CreateFile(port.c_str(), GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if(handle==INVALID_HANDLE_VALUE) - throw SystemError(format("Can't open serial port '%s'", port), GetLastError()); + throw system_error(format("CreateFile(%s)", port)); mode = M_READ|M_WRITE; COMMTIMEOUTS timeouts; @@ -174,7 +174,7 @@ Serial::Serial(const string &descr) handle = open(port.c_str(), O_RDWR); if(handle==-1) - throw SystemError(format("Can't open serial port '%s'", port), errno); + throw system_error(format("open(%s)", port)); mode = M_READ|M_WRITE; termios t; @@ -264,13 +264,13 @@ void Serial::set_parameters(const string ¶ms) unsigned i; for(i=0; i'8') - throw InvalidParameterValue("Invalid data bit count"); + throw invalid_argument("Serial::set_parameters data_bits"); if(params[i+2]!='N' && params[i+2]!='E' && params[i+2]!='O') - throw InvalidParameterValue("Invalid parity"); + throw invalid_argument("Serial::set_parameters parity"); if(params[i+3]!='1' && params[i+3]!='2') - throw InvalidParameterValue("Invalid stop bit count"); + throw invalid_argument("Serial::set_parameters stop_bits"); DeviceState state; get_state(handle, state); @@ -289,7 +289,7 @@ unsigned Serial::do_write(const char *buf, unsigned size) #ifdef WIN32 DWORD ret; if(WriteFile(handle, buf, size, &ret, 0)==0) - throw SystemError("Writing to serial port failed", GetLastError()); + throw system_error("WriteFile"); #else int ret = ::write(handle, buf, size); if(ret==-1) @@ -297,7 +297,7 @@ unsigned Serial::do_write(const char *buf, unsigned size) if(errno==EAGAIN) return 0; else - throw SystemError("Writing to serial port failed", errno); + throw system_error("write"); } #endif @@ -312,7 +312,7 @@ unsigned Serial::do_read(char *buf, unsigned size) #ifdef WIN32 DWORD ret; if(ReadFile(handle, buf, size, &ret, 0)==0) - throw SystemError("Reading from serial port failed", GetLastError()); + throw system_error("ReadFile"); #else int ret = ::read(handle, buf, size); if(ret==-1) @@ -320,7 +320,7 @@ unsigned Serial::do_read(char *buf, unsigned size) if(errno==EAGAIN) return 0; else - throw SystemError("Reading from serial port failed", errno); + throw system_error("read"); } #endif @@ -330,7 +330,7 @@ unsigned Serial::do_read(char *buf, unsigned size) Handle Serial::get_event_handle() { #ifdef WIN32 - throw Exception("Serial port events not supported on win32 yet"); + throw logic_error("Serial port events not supported on win32 yet"); #else return handle; #endif