ppp-arch.c

来自「伟大的Contiki工程, 短小精悍 的操作系统, 学习编程不可不看」· C语言 代码 · 共 63 行

C
63
字号
#include	"contiki.h"#include	<pty.h>#include	<stdio.h>#include	<sys/select.h>static int ppp_master_fd = -1;static int ppp_slave_fd = -1;static char ppp_slave_name[80];void init_pty() {  char			cmd[256];  if (ppp_master_fd == -1) {    if (openpty( &ppp_master_fd, &ppp_slave_fd, ppp_slave_name, NULL, NULL)==0)    {      sprintf( cmd, "stty raw -echo -echoe < %s", ppp_slave_name);      system(cmd);      printf("pty opened, slave name = %s\n", ppp_slave_name);      printf("Now start pppd, for example with:\n");      printf("/usr/sbin/pppd %s 115200 local noauth nocrtscts nodetach persist asyncmap 0xffffffff 192.168.1.1:192.168.1.2\n",      		ppp_slave_name);      close(ppp_slave_fd);    } else {      printf("pty open failed\n");      exit(1);    }  }}void ppp_arch_putchar(u8_t c) {  init_pty();  if (write( ppp_master_fd, &c, 1 ) > 0) {    //printf("wr=0x%02x '%c'\n", c, c>=' '?c<0x7f?c:' ':' ');  } else {    //printf("wr=0x%02x '%c' FAILED\n", c, c>=' '?c<0x7f?c:' ':' ');  }}int ppp_arch_getchar(u8_t *p) {  fd_set		read_fds;  struct timeval	timeout;  init_pty();  FD_ZERO( &read_fds );  FD_SET( ppp_master_fd, &read_fds );  timeout.tv_sec = 0;  timeout.tv_usec = 10000;  if (select( ppp_master_fd+1, &read_fds, NULL, NULL, &timeout) != 0) {    if (FD_ISSET( ppp_master_fd, &read_fds )) {      if ( read( ppp_master_fd, p, 1) > 0 ) {	//printf("rd=0x%02x\n", *p);	return 1;      }      return 0;    }      printf("closing pty: %s\n", ppp_slave_name);      close( ppp_master_fd );      ppp_master_fd == -1;  } else {    return 0;  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?