int ZigbeeSerialportService::open_serial_port() { if ( io_svc_ != 0 ) { ACE_DEBUG((LM_DEBUG, "the serialport have been opened.\n")); return -1; } io_svc_ = new ACE_TTY_IO(); ACE_DEV_Connector con; if (con.connect ((*io_svc_), ACE_DEV_Addr (conf_->serial_port_.c_str())) == -1) { delete io_svc_; io_svc_ = 0; ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Failed to open serial port:%p\n"), conf_->serial_port_.c_str()), -1); } ACE_TTY_IO::Serial_Params serial_port_params; serial_port_params.baudrate = conf_->baudrate_; serial_port_params.xonlim = 0; serial_port_params.xofflim = 0; serial_port_params.readmincharacters = 0; serial_port_params.readtimeoutmsec = 1000; // 10 seconds serial_port_params.paritymode = "none"; //"EVEN"; serial_port_params.ctsenb = false; serial_port_params.rtsenb = 0; serial_port_params.xinenb = false; serial_port_params.xoutenb = false; serial_port_params.modem = false; serial_port_params.rcvenb = true; serial_port_params.dsrenb = false; serial_port_params.dtrdisable = false; serial_port_params.databits = 8; serial_port_params.stopbits = 1; if (io_svc_->control (ACE_TTY_IO::SETPARAMS, &serial_port_params) == -1) { delete io_svc_; io_svc_ = 0; ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("failed to set %p control\n"), conf_->serial_port_.c_str()), -1); } state_ = Opened; net_->RegHandler(this, ACE_Event_Handler::READ_MASK); ACE_DEBUG((LM_DEBUG, "Sucessfully opened serial port:%s\n", conf_->serial_port_.c_str())); }
bool SerialPort::Connect(const std::string & port) { return (-1 != mDeviceConnector.connect(mSerialDevice, ACE_DEV_Addr(ACE_TEXT(port.c_str())))); }
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { if (argc < 2) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("usage: %s device-filename\n"), argv[0]), 1); ACE_TTY_IO write_dev; ACE_DEV_Connector con; if (con.connect (write_dev, ACE_DEV_Addr (argv[1])) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), argv[1]), 1); ACE_TTY_IO::Serial_Params myparams; // Try to read default parameters if (write_dev.control (ACE_TTY_IO::GETPARAMS, &myparams) == -1) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT("GETPARAMS is not supported\n"))); } else { ACE_DEBUG ((LM_DEBUG, ACE_TEXT("GETPARAMS is supported\n"))); } myparams.baudrate = 19200; myparams.readmincharacters = 0; myparams.readtimeoutmsec = 10*1000; // 10 seconds if (write_dev.control (ACE_TTY_IO::SETPARAMS, &myparams) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("control")), 1); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("enter character to send, q terminates :\n"))); for (char writeto; ACE_OS::read (ACE_STDIN, &writeto, 1) != -1; ) { ssize_t bytes_written = write_dev.send_n ((void *) &writeto, 1); if (bytes_written != 1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("send")), 1); if (writeto == 'q') break; } if (write_dev.close () == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("close")), 1); return 0; }
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { if (argc < 2) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("usage: %s device-filename\n"), argv[0]), 1); ACE_TTY_IO read_dev; ACE_DEV_Connector con; if (con.connect (read_dev, ACE_DEV_Addr (argv[1])) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), argv[1]), 1); ACE_TTY_IO::Serial_Params myparams; myparams.baudrate = 19200; myparams.xonlim = 0; myparams.xofflim = 0; myparams.readmincharacters = 0; myparams.readtimeoutmsec = 10*1000; // 10 seconds myparams.paritymode = "EVEN"; myparams.ctsenb = false; myparams.rtsenb = 0; myparams.xinenb = false; myparams.xoutenb = false; myparams.modem = false; myparams.rcvenb = true; myparams.dsrenb = false; myparams.dtrdisable = false; myparams.databits = 8; myparams.stopbits = 1; if (read_dev.control (ACE_TTY_IO::SETPARAMS, &myparams) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p control\n"), argv[1]), 1); // Read till character 'q'. for (char readback = 'x'; readback != 'q'; ) { ssize_t bytes_read = read_dev.recv ((void *) &readback, 1); if (bytes_read == 1) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("read: %c\n"), readback)); else if (bytes_read == 0) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("timeout!\n"))); else if (bytes_read == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p recv\n"), argv[1]), 1); } return 0; }