📄 init_port.c
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <termios.h>#include <errno.h>#include "send.h"int speed_arr[] = { B57600, B38400, B19200, B9600, B4800, B57600, B38400, B19200, B9600, B4800, };int name_arr[] = { 57600, 38400, 19200, 9600, 4800, 57600, 38400, 19200, 9600, 4800, };void Set_speed( int fd, int speed ){ int i; int status; struct termios Opt; tcgetattr( fd, &Opt ); for( i=0; i<sizeof(speed_arr)/sizeof(int); i++ ) { if( speed == name_arr[i] ) { tcflush( fd, TCIOFLUSH ); cfsetispeed( &Opt, speed_arr[i] ); cfsetospeed( &Opt, speed_arr[i] ); status = tcsetattr( fd, TCSANOW, &Opt ); if( status != 0 ) { elog( "tcsetattr fd error\n" ); return; } tcflush( fd, TCIOFLUSH ); } }}int set_Parity( int fd, int databits, int stopbits, int parity ){ struct termios options; if( tcgetattr( fd, &options ) != 0 ) { elog( "Tcgetattr error" ); return -1; } options.c_cflag &= ~CSIZE; switch( databits ) { case 7: options.c_cflag |=CS7; break; case 8: options.c_cflag |=CS8; break; default: printf( "unsupported data size\n" ); return -1; } switch( parity ) { 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; options.c_cflag &= ~PARODD; options.c_iflag |= INPCK; break; case 's': case 'S': options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; break; default: printf( "unsupported data size\n" ); return -1; } switch( stopbits ) { case 1: options.c_cflag &= ~CSTOPB; break; case 2: options.c_cflag |= CSTOPB; break; default: printf( "unsupported data size\n" ); return -1; } if( parity != 'n' ) options.c_iflag |= INPCK; tcflush( fd, TCIFLUSH ); //options.c_cflag |= ( CLOCAL | CREAD ); options.c_lflag &= ~( ICANON | ECHO | ECHOE | ISIG ); options.c_oflag &= ~OPOST; options.c_cc[VTIME] = 15; options.c_cc[VMIN] = 0; if( tcsetattr( fd, TCSANOW, &options ) != 0 ) { elog( " Tcsetattr error\n" ); return -1; } return 1;}main(){ int fd; char smsstr[202]; struct termios options; fd = OpenDev( PORT ); Set_speed( fd, SPEED ); if( set_Parity( fd, 8, 1, 'N' ) == -1 ) { elog( "Set parity error\n" ); exit( 1 ); } printf( "初始化串口和MODERM成功\n" ); sprintf( smsstr, "AT+CMGF=0\r" ); write( fd, smsstr, strlen(smsstr) ); close( fd );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -