本文整理汇总了C++中cfmakeraw函数的典型用法代码示例。如果您正苦于以下问题:C++ cfmakeraw函数的具体用法?C++ cfmakeraw怎么用?C++ cfmakeraw使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cfmakeraw函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: telnet_main
extern int telnet_main(int argc, char** argv)
{
int len;
struct sockaddr_in s_in;
#ifdef USE_POLL
struct pollfd ufds[2];
#else
fd_set readfds;
int maxfd;
#endif
#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
int opt;
#endif
#ifdef CONFIG_FEATURE_AUTOWIDTH
get_terminal_width_height(0, &win_width, &win_height);
#endif
#ifdef CONFIG_FEATURE_TELNET_TTYPE
ttype = getenv("TERM");
#endif
memset(&G, 0, sizeof G);
if (tcgetattr(0, &G.termios_def) < 0)
exit(1);
G.termios_raw = G.termios_def;
cfmakeraw(&G.termios_raw);
if (argc < 2)
bb_show_usage();
#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
autologin = NULL;
while ((opt = getopt(argc, argv, "al:")) != EOF) {
switch (opt) {
case 'l':
autologin = optarg;
break;
case 'a':
autologin = getenv("USER");
break;
case '?':
bb_show_usage();
break;
}
}
if (optind < argc) {
bb_lookup_host(&s_in, argv[optind++]);
s_in.sin_port = bb_lookup_port((optind < argc) ? argv[optind++] :
"telnet", "tcp", 23);
if (optind < argc)
bb_show_usage();
} else
bb_show_usage();
#else
bb_lookup_host(&s_in, argv[1]);
s_in.sin_port = bb_lookup_port((argc == 3) ? argv[2] : "telnet", "tcp", 23);
#endif
G.netfd = xconnect(&s_in);
setsockopt(G.netfd, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof one);
signal(SIGINT, fgotsig);
#ifdef USE_POLL
ufds[0].fd = 0; ufds[1].fd = G.netfd;
ufds[0].events = ufds[1].events = POLLIN;
#else
FD_ZERO(&readfds);
FD_SET(0, &readfds);
FD_SET(G.netfd, &readfds);
maxfd = G.netfd + 1;
#endif
while (1)
{
#ifndef USE_POLL
fd_set rfds = readfds;
switch (select(maxfd, &rfds, NULL, NULL, NULL))
#else
switch (poll(ufds, 2, -1))
#endif
{
case 0:
/* timeout */
case -1:
/* error, ignore and/or log something, bay go to loop */
if (G.gotsig)
conescape();
else
sleep(1);
break;
default:
#ifdef USE_POLL
//.........这里部分代码省略.........
开发者ID:FelipeFernandes1988,项目名称:Alice-1121-Modem,代码行数:101,代码来源:telnet.c
示例2: _mode
RazorAHRS::RazorAHRS(const std::string &port, DataCallbackFunc data_func, ErrorCallbackFunc error_func,
Mode mode, int connect_timeout_ms, speed_t speed)
: _mode(mode)
, _input_pos(0)
, _connect_timeout_ms(connect_timeout_ms)
, data(data_func)
, error(error_func)
, _thread_id(0)
, _stop_thread(false)
{
// check data type sizes
assert(sizeof(char) == 1);
assert(sizeof(float) == 4);
// open serial port
if (port == "")
throw std::runtime_error("No port specified!");
if (!_open_serial_port(port.c_str()))
throw std::runtime_error("Could not open serial port!");
// get port attributes
struct termios tio;
if (int errorID = tcgetattr(_serial_port, &tio))
throw std::runtime_error("Could not get serial port attributes! Error # " + to_str(errorID));
/* see http://www.easysw.com/~mike/serial/serial.html */
/* and also http://linux.die.net/man/3/tcsetattr */
// basic raw/non-canonical setup
cfmakeraw(&tio);
// enable reading and ignore control lines
tio.c_cflag |= CREAD | CLOCAL;
// set 8N1
tio.c_cflag &= ~PARENB; // no parity bit
tio.c_cflag &= ~CSTOPB; // only one stop bit
tio.c_cflag &= ~CSIZE; // clear data bit number
tio.c_cflag |= CS8; // set 8 data bits
// no hardware flow control
tio.c_cflag &= ~CRTSCTS;
// no software flow control
tio.c_iflag &= ~(IXON | IXOFF | IXANY);
// poll() is broken on OSX, so we set VTIME and use read(), which is ok since
// we're reading only one port anyway
tio.c_cc[VMIN] = 0;
tio.c_cc[VTIME] = 10; // 10 * 100ms = 1s
// set port speed
if (int errorID = cfsetispeed(&tio, speed))
throw std::runtime_error(" " + to_str(errorID)
+ ": Could not set new serial port input speed to "
+ to_str(speed) + ".");
if (int errorID = cfsetospeed(&tio, speed))
throw std::runtime_error(" " + to_str(errorID)
+ ": Could not set new serial port output speed to "
+ to_str(speed) + ".");
// set port attributes
// must be done after setting speed!
if (int errorID = tcsetattr(_serial_port, TCSANOW, &tio))
{
throw std::runtime_error(" " + to_str(errorID)
+ ": Could not set new serial port attributes.");
}
// start input/output thread
_start_io_thread();
}
开发者ID:blackpc,项目名称:laser_stabilizer_standalone,代码行数:70,代码来源:RazorAHRS.cpp
示例3: serial_init
int serial_init(int fd, int baudrate, int databits, int stopbits, int parity)
{
int i;
int ret_val;
char buffer[32];
struct termios options;
tcgetattr( fd, &options );
cfmakeraw( &options );
switch( baudrate )
{
case 50: cfsetspeed( &options, B50 ); break;
case 75: cfsetspeed( &options, B75 ); break;
case 150: cfsetspeed( &options, B150 ); break;
case 300: cfsetspeed( &options, B300 ); break;
case 600: cfsetspeed( &options, B600 ); break;
case 1200: cfsetspeed( &options, B1200 ); break;
case 2400: cfsetspeed( &options, B2400 ); break;
case 4800: cfsetspeed( &options, B4800 ); break;
case 9600: cfsetspeed( &options, B9600 ); break;
case 19200: cfsetspeed( &options, B19200 ); break;
case 38400: cfsetspeed( &options, B38400 ); break;
case 115200:cfsetspeed( &options, B115200 ); break;
default: {
perror("baudrate error");
return -1;
}
}
options.c_cflag &= ~CSIZE;
switch( databits ) {
case 5: options.c_cflag |= CS5; break;
case 6: options.c_cflag |= CS6; break;
case 7: options.c_cflag |= CS7; break;
case 8: options.c_cflag |= CS8; break;
default: {
perror("databits error");
return -1;
}
}
options.c_cflag |= PARENB;
switch( parity )
{
case 'o':
case 'O': options.c_cflag |= PARODD; break;
case 'e':
case 'E': options.c_cflag &= ~PARODD; break;
case 'n':
case 'N': options.c_cflag &= ~PARENB; break;
default: {
perror("parity error");
return -1;
}
}
switch (stopbits){
case 1:
options.c_cflag &= ~CSTOPB;
break;
case 2:
options.c_cflag |= CSTOPB;
break;
default: {
perror("stopbits err");
return -1;
}
}
tcflush(fd, TCIOFLUSH);
options.c_cc[VTIME] = 15;
options.c_cc[VMIN] = 0;
if( tcsetattr( fd, TCSANOW, &options ) != 0 ) {
fprintf( stderr, "set attribute failed.");
close( fd );
return -1;
}
return fd;
}
开发者ID:zenki2001cn,项目名称:SnippetCode,代码行数:81,代码来源:serial.c
示例4: configurePort
int configurePort(int fd, unsigned long baudrate)
{
#ifdef WIN32
DCB dcb = {0};
HANDLE hCom = (HANDLE)fd;
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = baudrate;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if( !SetCommState(hCom, &dcb) ){
return -1;
}
return (int)hCom;
#else
speed_t baud = B921600;
struct termios g_new_tio;
switch (baudrate) {
case 921600:
baud = B921600;
break;
case 115200:
baud = B115200;
break;
case 1000000:
baud = B1000000;
break;
case 1500000:
baud = B1500000;
default:
printf("unknown speed setting \n");
return -1;
break;
}
memset(&g_new_tio, 0x00 , sizeof(g_new_tio));
cfmakeraw(&g_new_tio);
g_new_tio.c_cflag |= (CS8 | CLOCAL | CREAD);
g_new_tio.c_cflag &= ~(PARENB | CSTOPB | CSIZE);
g_new_tio.c_oflag = 0;
g_new_tio.c_lflag = 0;
g_new_tio.c_cc[VTIME] = 0;
g_new_tio.c_cc[VMIN] = 1;
#ifdef MACOSX
if( tcsetattr(fd, TCSANOW, &g_new_tio) < 0 ) {
return -1;
}
return ioctl( fd, IOSSIOSPEED, &baud );
#else
cfsetispeed (&g_new_tio, baudrate);
cfsetospeed (&g_new_tio, baudrate);
tcflush(fd, TCIOFLUSH);
return tcsetattr(fd, TCSANOW, &g_new_tio);
#endif //#ifdef MACOSX
#endif
}
开发者ID:GadgetFactory,项目名称:OpenBench-Logic-Sniffer,代码行数:69,代码来源:serial.c
示例5: pty_forward_new
int pty_forward_new(
sd_event *event,
int master,
PTYForwardFlags flags,
PTYForward **ret) {
_cleanup_(pty_forward_freep) PTYForward *f = NULL;
struct winsize ws;
int r;
f = new0(PTYForward, 1);
if (!f)
return -ENOMEM;
f->flags = flags;
if (event)
f->event = sd_event_ref(event);
else {
r = sd_event_default(&f->event);
if (r < 0)
return r;
}
if (!(flags & PTY_FORWARD_READ_ONLY)) {
r = fd_nonblock(STDIN_FILENO, true);
if (r < 0)
return r;
r = fd_nonblock(STDOUT_FILENO, true);
if (r < 0)
return r;
}
r = fd_nonblock(master, true);
if (r < 0)
return r;
f->master = master;
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) >= 0)
(void) ioctl(master, TIOCSWINSZ, &ws);
if (!(flags & PTY_FORWARD_READ_ONLY)) {
if (tcgetattr(STDIN_FILENO, &f->saved_stdin_attr) >= 0) {
struct termios raw_stdin_attr;
f->saved_stdin = true;
raw_stdin_attr = f->saved_stdin_attr;
cfmakeraw(&raw_stdin_attr);
raw_stdin_attr.c_oflag = f->saved_stdin_attr.c_oflag;
tcsetattr(STDIN_FILENO, TCSANOW, &raw_stdin_attr);
}
if (tcgetattr(STDOUT_FILENO, &f->saved_stdout_attr) >= 0) {
struct termios raw_stdout_attr;
f->saved_stdout = true;
raw_stdout_attr = f->saved_stdout_attr;
cfmakeraw(&raw_stdout_attr);
raw_stdout_attr.c_iflag = f->saved_stdout_attr.c_iflag;
raw_stdout_attr.c_lflag = f->saved_stdout_attr.c_lflag;
tcsetattr(STDOUT_FILENO, TCSANOW, &raw_stdout_attr);
}
r = sd_event_add_io(f->event, &f->stdin_event_source, STDIN_FILENO, EPOLLIN|EPOLLET, on_stdin_event, f);
if (r < 0 && r != -EPERM)
return r;
}
r = sd_event_add_io(f->event, &f->stdout_event_source, STDOUT_FILENO, EPOLLOUT|EPOLLET, on_stdout_event, f);
if (r == -EPERM)
/* stdout without epoll support. Likely redirected to regular file. */
f->stdout_writable = true;
else if (r < 0)
return r;
r = sd_event_add_io(f->event, &f->master_event_source, master, EPOLLIN|EPOLLOUT|EPOLLET, on_master_event, f);
if (r < 0)
return r;
r = sd_event_add_signal(f->event, &f->sigwinch_event_source, SIGWINCH, on_sigwinch_event, f);
if (r < 0)
return r;
*ret = f;
f = NULL;
return 0;
}
开发者ID:hosiet,项目名称:systemd,代码行数:92,代码来源:ptyfwd.c
示例6: printf
int ChassisEr1::moduleInit(void)
{
int ret;
struct termios oldtio,newtio;
struct serial_struct serial;
int fd;
// call RackDataModule init function (first command in init)
ret = RackDataModule::moduleInit();
if (ret)
{
return ret;
}
initBits.setBit(INIT_BIT_DATA_MODULE);
// create hardware mutex
ret = hwMtx.create();
if (ret)
{
goto init_error;
}
initBits.setBit(INIT_BIT_MTX_CREATED);
// open serial port
/* ret = serialPort.open(serialDev, &pioneer_serial_config, this);
if (ret)
{
printf("Can't open serialDev %i\n", serialDev);
goto init_error;
}
*/
fd = rcm.handle= open(serialDev, O_RDWR|O_NOCTTY);
if (fd < 0 ) {
printf("Can't open serialDev\n");
goto init_error;
}
tcgetattr(fd,&oldtio);
bzero(&newtio,sizeof(newtio));
newtio.c_cflag = B38400|CS8|CLOCAL|CREAD;
newtio.c_iflag = IGNPAR | ICRNL ;
newtio.c_oflag = 0;
// newtio.c_lflag = ICANON;
cfmakeraw(&newtio);
newtio.c_cc[VMIN] = 1;
newtio.c_cc[VTIME] = 0;
tcflush(fd,TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
ioctl(fd,TIOCGSERIAL,&serial);
serial.custom_divisor = serial.baud_base / 250000;
serial.flags = 0x0030;
ioctl(fd,TIOCSSERIAL,&serial);
initBits.setBit(INIT_BIT_SERIAL_OPENED);
printf("Completed SERIAL Initialize\n");
return 0;
init_error:
ChassisEr1::moduleCleanup();
return ret;
}
开发者ID:BackupTheBerlios,项目名称:rack,代码行数:69,代码来源:chassis_er1.cpp
示例7: SerialOpen
/**
*@brief Open and initialise the serial port with a specific baud rate.
*@param baud Baud rate for port ttyAMA0
*@return fd device file number
*/
int SerialOpen (int baud)
{
struct termios options ;
speed_t myBaud ;
int status, fd ;
switch (baud)
{
case 50: myBaud = B50 ; break ;
case 75: myBaud = B75 ; break ;
case 110: myBaud = B110 ; break ;
case 134: myBaud = B134 ; break ;
case 150: myBaud = B150 ; break ;
case 200: myBaud = B200 ; break ;
case 300: myBaud = B300 ; break ;
case 600: myBaud = B600 ; break ;
case 1200: myBaud = B1200 ; break ;
case 1800: myBaud = B1800 ; break ;
case 2400: myBaud = B2400 ; break ;
case 9600: myBaud = B9600 ; break ;
case 19200: myBaud = B19200 ; break ;
case 38400: myBaud = B38400 ; break ;
case 57600: myBaud = B57600 ; break ;
case 115200: myBaud = B115200 ; break ;
case 230400: myBaud = B230400 ; break ;
default:
return -2 ;
}
if ((fd = open ("/dev/ttyAMA0", O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK)) == -1)
{
fprintf (stderr, "Cannot open port serial port.\n") ;
}
fcntl (fd, F_SETFL, O_RDWR) ;
// Get and modify current options:
tcgetattr (fd, &options) ;
cfmakeraw (&options) ;
cfsetispeed (&options, myBaud) ;
cfsetospeed (&options, myBaud) ;
options.c_cflag |= (CLOCAL | CREAD) ;
options.c_cflag &= ~PARENB ;
options.c_cflag &= ~CSTOPB ;
options.c_cflag &= ~CSIZE ;
options.c_cflag |= CS8 ;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG) ;
options.c_oflag &= ~OPOST ;
options.c_cc [VMIN] = 0 ;
options.c_cc [VTIME] = 100 ; // Ten seconds (100 deciseconds)
tcsetattr (fd, TCSANOW | TCSAFLUSH, &options) ;
ioctl (fd, TIOCMGET, &status);
status |= TIOCM_DTR ;
status |= TIOCM_RTS ;
ioctl (fd, TIOCMSET, &status);
usleep (10000) ; // 10mS
return fd ;
}
开发者ID:not-cosmo,项目名称:sensorian-firmware,代码行数:73,代码来源:Serial.c
示例8: h4_open
static int h4_open(void *transport_config)
{
hci_uart_config = (hci_uart_config_t *) transport_config;
int fd = socket(PF_NETGRAPH, SOCK_STREAM, NG_CONTROL);
if (fd < 0) {
perror("socket(HCI_IF)");
goto err_out0;
}
// get node address
struct ioctl_arg_t {
uint32_t result;
char socket_name[96];
} ioctl_arg;
memset((void *) &ioctl_arg, 0x00, sizeof(struct ioctl_arg_t));
strcpy((char *) &ioctl_arg.socket_name, SOCKET_DEVICE);
if (ioctl(fd, SOCK_IOCTL_VAL, &ioctl_arg) != 0) {
perror("ioctl(fd_sock, SOCK_IOCTL_VAL)");
goto err_out1;
}
// setup sock addr struct
struct sockaddr_ng sock_addr;
sock_addr.sg_len = sizeof(struct sockaddr_ng);
sock_addr.sg_family = PF_NETGRAPH;
sock_addr.sg_subtype = 0x02;
sock_addr.sg_node = ioctl_arg.result;
sock_addr.sg_null = 0;
// connect
if (connect(fd, (const struct sockaddr *) &sock_addr, sizeof(struct sockaddr_ng)) != 0) {
perror("connect(fd_sock)");
goto err_out2;
}
// configure UART
struct termios toptions;
socklen_t toptions_len = sizeof(struct termios);
if (getsockopt(fd, SO_ACCEPTCONN, GETSOCKOPT_VAL, &toptions, &toptions_len) != 0) {
perror("getsockopt(fd_sock)");
goto err_out3;
}
cfmakeraw(&toptions);
speed_t brate = (speed_t) hci_uart_config->baudrate_init;
cfsetspeed(&toptions, brate);
toptions.c_iflag |= IGNPAR;
toptions.c_cflag = 0x00038b00;
if (setsockopt(fd, SO_ACCEPTCONN, SETSOCKOPT_VAL, &toptions, toptions_len) != 0) {
perror("setsockopt(fd_sock)");
goto err_out4;
}
// set up data_source
hci_transport_h4->ds = malloc(sizeof(data_source_t));
if (!hci_transport_h4->ds) return -1;
hci_transport_h4->uart_fd = fd;
hci_transport_h4->ds->fd = fd;
hci_transport_h4->ds->process = h4_process;
run_loop_add_data_source(hci_transport_h4->ds);
// init state machine
bytes_to_read = 1;
h4_state = H4_W4_PACKET_TYPE;
read_pos = 0;
return 0;
err_out4:
err_out3:
err_out2:
err_out1:
close(fd);
err_out0:
fprintf(stderr, "h4_open error\n");
return -1;
}
开发者ID:alexbevi,项目名称:emu-ex-plus-alpha,代码行数:79,代码来源:hci_transport_h4_iphone.c
示例9: getBaudrate
JNIEXPORT jobject JNICALL Java_com_leon_agriculturerobot_serialport_SerialPort_open
(JNIEnv *env, jclass thiz, jstring path, jint baudrate, jint flags)
{
int fd;
speed_t speed;
jobject mFileDescriptor;
/* Check arguments */
{
speed = getBaudrate(baudrate);
if (speed == -1) {
LOGE("Invalid baudrate");
return NULL;
}
}
/* Opening device */
{
jboolean iscopy;
const char *path_utf = (*env)->GetStringUTFChars(env, path, &iscopy);
LOGD("Opening serial port %s with flags 0x%x", path_utf, O_RDWR | flags);
fd = open(path_utf, O_RDWR | flags);
LOGD("open() fd = %d", fd);
(*env)->ReleaseStringUTFChars(env, path, path_utf);
if (fd == -1)
{
/* Throw an exception */
LOGE("Cannot open port");
return NULL;
}
}
/* Configure device */
{
struct termios cfg;
LOGD("Configuring serial port");
if (tcgetattr(fd, &cfg))
{
LOGE("tcgetattr() failed");
close(fd);
return NULL;
}
cfmakeraw(&cfg);
cfsetispeed(&cfg, speed);
cfsetospeed(&cfg, speed);
if (tcsetattr(fd, TCSANOW, &cfg))
{
LOGE("tcsetattr() failed");
close(fd);
return NULL;
}
}
/* Create a corresponding file descriptor */
{
jclass cFileDescriptor = (*env)->FindClass(env, "java/io/FileDescriptor");
jmethodID iFileDescriptor = (*env)->GetMethodID(env, cFileDescriptor, "<init>", "()V");
jfieldID descriptorID = (*env)->GetFieldID(env, cFileDescriptor, "descriptor", "I");
mFileDescriptor = (*env)->NewObject(env, cFileDescriptor, iFileDescriptor);
(*env)->SetIntField(env, mFileDescriptor, descriptorID, (jint)fd);
}
return mFileDescriptor;
}
开发者ID:xiaoyaolml,项目名称:AgricultureRobot,代码行数:66,代码来源:SeialPort.c
示例10: tty_connect
// BSD - OSX version
int tty_connect(const char *device, int bit_rate, int word_size, int parity, int stop_bits, int *fd)
{
int t_fd = -1;
int bps;
char msg[80];
int handshake;
struct termios tty_setting;
// Open the serial port read/write, with no controlling terminal, and don't wait for a connection.
// The O_NONBLOCK flag also causes subsequent I/O on the device to be non-blocking.
// See open(2) ("man 2 open") for details.
t_fd = open(device, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (t_fd == -1)
{
printf("Error opening serial port %s - %s(%d).\n",
device, strerror(errno), errno);
goto error;
}
// Note that open() follows POSIX semantics: multiple open() calls to the same file will succeed
// unless the TIOCEXCL ioctl is issued. This will prevent additional opens except by root-owned
// processes.
// See tty(4) ("man 4 tty") and ioctl(2) ("man 2 ioctl") for details.
if (ioctl(t_fd, TIOCEXCL) == -1)
{
printf("Error setting TIOCEXCL on %s - %s(%d).\n",
device, strerror(errno), errno);
goto error;
}
// Now that the device is open, clear the O_NONBLOCK flag so subsequent I/O will block.
// See fcntl(2) ("man 2 fcntl") for details.
if (fcntl(t_fd, F_SETFL, 0) == -1)
{
printf("Error clearing O_NONBLOCK %s - %s(%d).\n",
device, strerror(errno), errno);
goto error;
}
// Get the current options and save them so we can restore the default settings later.
if (tcgetattr(t_fd, &tty_setting) == -1)
{
printf("Error getting tty attributes %s - %s(%d).\n",
device, strerror(errno), errno);
goto error;
}
// Set raw input (non-canonical) mode, with reads blocking until either a single character
// has been received or a one second timeout expires.
// See tcsetattr(4) ("man 4 tcsetattr") and termios(4) ("man 4 termios") for details.
cfmakeraw(&tty_setting);
tty_setting.c_cc[VMIN] = 1;
tty_setting.c_cc[VTIME] = 10;
// The baud rate, word length, and handshake options can be set as follows:
switch (bit_rate) {
case 0:
bps = B0;
break;
case 50:
bps = B50;
break;
case 75:
bps = B75;
break;
case 110:
bps = B110;
break;
case 134:
bps = B134;
break;
case 150:
bps = B150;
break;
case 200:
bps = B200;
break;
case 300:
bps = B300;
break;
case 600:
bps = B600;
break;
case 1200:
bps = B1200;
break;
case 1800:
bps = B1800;
break;
case 2400:
bps = B2400;
break;
case 4800:
bps = B4800;
break;
//.........这里部分代码省略.........
开发者ID:fiz1962,项目名称:INDI-Client,代码行数:101,代码来源:indicom.c
示例11: createPty
int createPty(struct Connection *connection) {
int ptm, pts;
ptm = posix_openpt(O_RDWR);
if (ptm == -1) {
perror("creating new plm");
return -1;
}
if (grantpt(ptm) == -1) {
perror("granting pt access");
return -1;
}
if (unlockpt(ptm) == -1) {
perror("unlocking pt");
return -1;
}
pts = open(ptsname(ptm), O_RDWR);
if (pts == -1) {
perror("opening pts");
return -1;
}
if (setNonBlock(ptm) == -1) {
fprintf(stderr, "Error: making ptm non-block\n");
return -1;
}
if (setNonBlock(pts) == -1) {
fprintf(stderr, "Error: making pts non-block\n");
return -1;
}
connection->ptm = ptm;
if (addToEpoll(epollfd, ptm, EPOLLET | EPOLLIN) == -1) {
fprintf(stderr, "Error: adding ptm to epoll\n");
return -1;
}
if (fork()) {
if (close(pts) == -1) {
perror("closing pts in parent process");
return -1;
}
} else {
if (close(ptm) == -1) {
perror("closing ptm in child process");
return -1;
}
struct termios oldSettings, newSettings;
if (tcgetattr(pts, &oldSettings) == -1) {
perror("getting old terminal settings\n");
return -1;
}
newSettings = oldSettings;
cfmakeraw(&newSettings);
if (tcsetattr(pts, TCSANOW, &newSettings) == -1) {
perror("setting new terminal settings\n");
return -1;
}
close(0);
close(1);
close(2);
dup(pts);
dup(pts);
dup(pts);
close(pts);
setsid();
ioctl(0, TIOCSCTTY, 1);
execvp("/bin/bash", NULL);
}
return 0;
}
开发者ID:NickyLarin,项目名称:SshServerAsync,代码行数:73,代码来源:main.c
示例12: _srmio_ios_update
static bool _srmio_ios_update( srmio_io_t h, srmio_error_t *err )
{
struct termios ios;
memset(&ios, 0, sizeof(struct termios));
#ifdef HAVE_CFMAKERAW
/* not sure, if this is needed right after memset ...: */
cfmakeraw( &ios );
#endif
/* TODO: make other termios parameters configurable */
ios.c_iflag = IGNPAR;
ios.c_cflag = CS8 | CLOCAL | CREAD;
switch( h->flow ){
case srmio_io_flow_none:
/* do nothing */
break;
case srmio_io_flow_xonoff:
ios.c_iflag |= IXON | IXOFF;
break;
case srmio_io_flow_rtscts:
ios.c_cflag |= CRTSCTS;
break;
default:
srmio_error_set( err, "ios invalid flow control: %u", h->flow);
return false;
}
switch( h->parity ){
case srmio_io_parity_none:
/* do nothing */
break;
case srmio_io_parity_even:
ios.c_cflag |= PARENB;
break;
case srmio_io_parity_odd:
ios.c_cflag |= PARENB | PARODD;
break;
default:
srmio_error_set( err, "ios invalid parity: %u", h->parity );
return false;
}
if( 0 > cfsetispeed( &ios, _srmio_ios_baud[h->baudrate] ) ){
srmio_error_errno( err, "ios setispieed" );
return false;
}
if( 0 > cfsetospeed( &ios, _srmio_ios_baud[h->baudrate] ) ){
srmio_error_errno( err, "ios setospieed" );
return false;
}
/* wait max 1 sec for whole read() */
ios.c_cc[VMIN] = 0;
ios.c_cc[VTIME] = 10;
if( tcsetattr( SELF(h)->fd, TCSANOW, &ios ) ){
srmio_error_errno( err, "ios settattr" );
return false;
}
return true;
}
开发者ID:crashracer,项目名称:srmio,代码行数:72,代码来源:serios.c
示例13: set_serial
int set_serial (struct serial *s, struct serial_mode *serial_mode)
{
#ifdef WIN32
COMMTIMEOUTS timeouts;
DCB dcbSerial;
memset (&dcbSerial, 0, sizeof (dcbSerial));
dcbSerial.DCBlength = sizeof (dcbSerial);
if (!GetCommState (s->h, &dcbSerial))
{
return (-1);
}
dcbSerial.BaudRate = serial_mode->baud_rate;
dcbSerial.ByteSize = serial_mode->data_bits;
switch (serial_mode->stop_bits)
{
case 1:
dcbSerial.StopBits = ONESTOPBIT;
break;
case 2:
dcbSerial.StopBits = TWOSTOPBITS;
break;
default:
error (1, 0, "invalid stop bit setting");
}
switch (serial_mode->parity)
{
case UART_ODDPARITY:
dcbSerial.Parity = ODDPARITY;
dcbSerial.fParity = TRUE;
break;
case UART_EVENPARITY:
dcbSerial.Parity = EVENPARITY;
dcbSerial.fParity = TRUE;
break;
case UART_NOPARITY:
dcbSerial.Parity = NOPARITY;
dcbSerial.fParity = FALSE;
break;
default:
error (1, 0, "invalid parity serial_mode");
}
if (!SetCommState (s->h, &dcbSerial))
{
error (0, 0, "could not set serial port settings");
return (-1);
}
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutConstant = 10;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 10;
timeouts.WriteTotalTimeoutMultiplier = 10;
if (!SetCommTimeouts (s->h, &timeouts))
{
return (-1);
}
#else
struct termios termios;
speed_t speed;
tcgetattr (s->fd, &termios);
cfmakeraw (&termios);
termios.c_cflag &= ~CSIZE;
switch (serial_mode->data_bits)
{
case 8:
termios.c_cflag |= CS8;
break;
case 7:
termios.c_cflag |= CS7;
break;
case 6:
termios.c_cflag |= CS6;
break;
case 5:
termios.c_cflag |= CS5;
break;
default:
error (1, 0, "invalid serial byte size");
}
switch (serial_mode->stop_bits)
{
case 2:
termios.c_cflag |= CSTOPB;
break;
case 1:
termios.c_cflag &= ~CSTOPB;
break;
default:
error (1, 0, "invalid number of stop bits");
}
switch (serial_mode->parity)
{
case UART_ODDPARITY:
termios.c_cflag |= PARENB;
termios.c_cflag |= PARODD;
break;
//.........这里部分代码省略.........
开发者ID:LucaBongiorni,项目名称:open-plc-utils,代码行数:101,代码来源:int6kdetect.c
示例14: h4_open
static int h4_open(void *transport_config) {
hci_uart_config = (hci_uart_config_t*) transport_config;
struct termios toptions;
int flags = O_RDWR | O_NOCTTY | O_NONBLOCK;
int fd = open(hci_uart_config->device_name, flags);
if (fd == -1) {
perror("init_serialport: Unable to open port ");
perror(hci_uart_config->device_name);
return -1;
}
if (tcgetattr(fd, &toptions) < 0) {
perror("init_serialport: Couldn't get term attributes");
return -1;
}
cfmakeraw(&toptions); // make raw
// 8N1
toptions.c_cflag &= ~CSTOPB;
toptions.c_cflag |= CS8;
if (hci_uart_config->flowcontrol) {
// with flow control
toptions.c_cflag |= CRTSCTS;
} else {
// no flow control
toptions.c_cflag &= ~CRTSCTS;
}
toptions.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines
toptions.c_iflag &= ~(IXON | IXOFF | IXANY); // turn off s/w flow ctrl
// see: http://unixwiz.net/techtips/termios-vmin-vtime.html
toptions.c_cc[VMIN] = 1;
toptions.c_cc[VTIME] = 0;
if( tcsetattr(fd, TCSANOW, &toptions) < 0) {
perror("init_serialport: Couldn't set term attributes");
return -1;
}
// set up data_source
hci_transport_h4->ds = (data_source_t*) malloc(sizeof(data_source_t));
if (!hci_transport_h4->ds) return -1;
hci_transport_h4->uart_fd = fd;
hci_transport_h4->ds->fd = fd;
hci_transport_h4->ds->process = h4_process;
run_loop_add_data_source(hci_transport_h4->ds);
// also set baudrate
if (h4_set_baudrate(hci_uart_config->baudrate_init) < 0) {
return -1;
}
// init state machine
bytes_to_read = 1;
h4_state = H4_W4_PACKET_TYPE;
read_pos = 0;
return 0;
}
开发者ID:ChangeTsai,项目名称:btstack,代码行数:61,代码来源:hci_transport_h4.c
示例15: aries_modem_bootstrap
int aries_modem_bootstrap(struct ipc_client *client)
{
int s3c2410_serial3_fd = -1;
int onedram_fd = -1;
/* Control variables. */
int rc = 0;
/* Boot variables */
uint8_t *radio_img_p = NULL;
uint32_t onedram_data = 0;
uint8_t bootcore_version = 0;
uint8_t info_size = 0;
uint8_t crc_byte = 0;
int block_size = 0;
/* s3c2410 serial setup variables. */
struct termios termios;
int serial;
/* fds maniplation variables */
struct timeval timeout;
fd_set fds;
/* nv_data variables */
void *nv_data_p;
void *onedram_p;
/* General purpose variables. */
uint8_t data;
uint16_t data_16;
uint8_t *data_p;
int i;
ipc_client_log(client, "aries_ipc_bootstrap: enter");
/* Read the radio.img image. */
ipc_client_log(client, "aries_ipc_bootstrap: reading radio image");
radio_img_p = ipc_client_mtd_read(client, "/dev/block/bml12", RADIO_IMG_READ_SIZE, RADIO_IMG_READ_SIZE);
ipc_client_log(client, "aries_ipc_bootstrap: radio image read");
ipc_client_log(client, "aries_ipc_bootstrap: open onedram");
onedram_fd=open("/dev/onedram", O_RDWR);
if(onedram_fd < 0)
goto error;
/* Reset the modem before init to send the first part of modem.img. */
ipc_client_log(client, "aries_ipc_bootstrap: turning %s iface down", PHONET_IFACE);
rc = phonet_iface_ifdown();
if(rc < 0)
goto error;
ipc_client_power_off(client);
ipc_client_log(client, "aries_ipc_bootstrap: sent PHONE \"off\" command");
usleep(1000);
ipc_client_power_on(client);
ipc_client_log(client, "aries_ipc_bootstrap: sent PHONE \"on\" command");
usleep(200000);
ipc_client_log(client, "aries_ipc_bootstrap: open s3c2410_serial3");
s3c2410_serial3_fd=open("/dev/s3c2410_serial3", O_RDWR);
if(s3c2410_serial3_fd < 0)
goto error;
/* Setup the s3c2410 serial. */
ipc_client_log(client, "aries_ipc_bootstrap: setup s3c2410_serial3");
tcgetattr(s3c2410_serial3_fd, &termios);
cfmakeraw(&termios);
cfsetispeed(&termios, B115200);
cfsetospeed(&termios, B115200);
tcsetattr(s3c2410_serial3_fd, TCSANOW, &termios);
/* Send 'AT' in ASCII. */
ipc_client_log(client, "aries_ipc_bootstrap: sending AT in ASCII");
for(i=0 ; i < 20 ; i++)
{
rc = write(s3c2410_serial3_fd, "AT", 2);
usleep(50000);
}
ipc_client_log(client, "aries_ipc_bootstrap: sending AT in ASCII done");
usleep(50000); //FIXME
/* Write the first part of modem.img. */
FD_ZERO(&fds);
FD_SET(s3c2410_serial3_fd, &fds);
timeout.tv_sec=5;
timeout.tv_usec=0;
if(select(FD_SETSIZE, &fds, NULL, NULL, &timeout) == 0)
{
ipc_client_log(client, "aries_ipc_bootstrap: select timeout passed");
goto error;
}
/* Get and check bootcore version. */
//.........这里部分代码省略.........
开发者ID:GNUtoo,项目名称:libsamsung-ipc,代码行数:101,代码来源:aries_ipc.c
示例16: set_com_config
/*======================================
*Function: set_com_config
*description:Setting up the serial port parameters
*Author: zorro
*Created Date :6/18/2015
*======================================*/
int
set_com_config(int fd, int baud_rate, int data_bits, char parity, int stop_bits)
{
struct termios options;
int speed;
/*Save and test the existing serial interface parameter Settings, here if the serial number and other errors,
There will be a relevant error message*/
if (tcgetattr(fd, &options) != 0){
perror("tcgetattr");
printf("\n\n\nzorro, tcgetattr err: %s\n", strerror(errno));
return -1;
}
/*set the character size*/
cfmakeraw(&options); /*configured to the original model*/
options.c_cflag &= ~CSIZE;
/*set the baud rate*/
switch (baud_rate){
case 2400:
{
speed = B2400;
}
break;
case 4800:
{
speed = B4800;
}
break;
case 9600:
{
speed = B9600;
}
break;
case 19200:
{
speed = B19200;
}
break;
case 38400:
{
speed = B38400;
}
break;
default:
case 115200:
{
speed = B115200;
}
break;
}
cfsetispeed(&options, speed);
cfsetospeed(&options, speed);
/* set the stop bit */
switch (data_bits){
case 7:
{
options.c_cflag |= CS7;
}
break;
default:
case 8:
{
options.c_cflag |= CS8;
}
break;
}
/* Set the parity bit */
switch (parity){
default:
case 'n':
case 'N':
{
options.c_cflag &= ~PARENB;
options.c_iflag &= ~INPCK;
}
break;
case 'o':
case 'O':
{
options.c_cflag |= (PARODD | PARENB);
options.c_iflag |= INPCK;
}
break;
case 'e':
case 'E':
{
options.c_cflag |= PARENB;
//.........这里部分代码省略.........
开发者ID:githubzorro,项目名称:hsdvr,代码行数:101,代码来源:uart_com.c
示例17: COM_Setup
int COM_Setup(int fd, COM_PARAM param)
{
int ret = -1;
struct termios termios_old;
struct termios termios_new;
int baudrate = 0;
int fctl = 0;
int databit = 0;
int stopbit = 0;
int parity = 0;
if (fd < 0)
{
return -1;
}
bzero(&termios_old, sizeof(termios_old));
bzero(&termios_new, sizeof(termios_new));
cfmakeraw(&termios_new);
tcgetattr(fd, &termios_old);
// baudrates
baudrate = convert_baudrate(param.nBaudRate);
cfsetispeed(&termios_new, baudrate);
cfsetospeed(&termios_new, baudrate);
termios_new.c_cflag |= CLOCAL;
termios_new.c_cflag |= CREAD;
fctl = param.nFlowCtrl;
switch (fctl)
{
case '0':
termios_new.c_cflag &= ~CRTSCTS; // no flow control
break;
case '1':
termios_new.c_cflag |= CRTSCTS; // hardware flow control
break;
case '2':
termios_new.c_iflag |= IXON | IXOFF |IXANY; //software flow control
break;
}
// data bits
termios_new.c_cflag &= ~CSIZE;
databit = param.nDataBits;
switch (databit)
{
case '5':
termios_new.c_cflag |= CS5;
break;
case '6':
termios_new.c_cflag |= CS6;
break;
case '7':
termios_new.c_cflag |= CS7;
break;
default:
termios_new.c_cflag |= CS8;
break;
}
// parity check
parity = param.nParity;
switch (parity)
{
case '0':
termios_new.c_cflag &= ~PARENB; // no parity check
break;
case '1':
termios_new.c_cflag |= PARENB; // odd check
termios_new.c_cflag &= ~PARODD;
break;
case '2':
termios_new.c_cflag |= PARENB; // even check
termios_new.c_cflag |= PARODD;
break;
}
// stop bits
stopbit = param.nStopBits;
if (stopbit == '2')
{
termios_new.c_cflag |= CSTOPB; // 2 stop bits
}
else
{
termios_new.c_cflag &= ~CSTOPB; // 1 stop bits
}
//other attributions default
termios_new.c_oflag &= ~OPOST;
termios_new.c_cc[VMIN] = 1;
//.........这里部分代码省略.........
开发者ID:119-org,项目名称:lvjh_ipcamera_hisi3518,代码行数:101,代码来源:com.c
示例18: rcmIfInit
int rcmIfInit(rcmIfType ifType, char *destAddr)
{
unsigned radioIpAddr;
switch (ifType)
{
case rcmIfIp:
#ifdef WIN32
{
// Initialize Windows sockets
WSADATA wsad;
memset(&wsad, 0, sizeof(wsad));
WSAStartup(MAKEWORD(2, 2), &wsad);
}
#endif
// convert from string to binary
radioIpAddr = inet_addr(destAddr);
// make sure IP address is valid
if (radioIpAddr == INADDR_NONE)
{
printf("Invalid IP address.\n");
return ERR;
}
// create UDP socket
radioFd = (int)socket(AF_INET, SOCK_DGRAM, 0);
if (radioFd == -1)
{
printf("Unable to open socket");
return ERR;
}
// initialize radio address structure
memset(&radioAddr, 0, sizeof(radioAddr));
radioAddr.sin_family = AF_INET;
radioAddr.sin_port = htons(RCM_SOCKET_PORT_NUM);
radioAddr.sin_addr.s_addr = radioIpAddr;
break;
case rcmIfSerial:
case rcmIfUsb:
#ifdef WIN32
{
DCB dcbSerialParams = {0};
wchar_t wcs[100];
char comPortStr[100];
// Windows requirement for COM ports above 9
// but works for all
sprintf(comPortStr, "\\\\.\\%s", destAddr);
mbstowcs(wcs, comPortStr, sizeof(wcs));
hComm = CreateFile(wcs,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (hComm == INVALID_HANDLE_VALUE)
{
printf("Can't open serial port\n");
return ERR;
}
dcbSerialParams.DCBlength=s
|
请发表评论