⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.c

📁 linux下串口的访问
💻 C
字号:
#include "CommSerial.h"
#include "global.h"
#include "stdio.h"
#include "syslog.h"
#include "wcommon.h"
//#include "stderr.h"

//////////////////////////////////////////////////////////////////////////
typedef struct 
{
	char	devname[128];
	int	baudrate;
        int     flag;
        char    at[32];
}w_option_t;


static	w_option_t	g_para;
//////////////////////////////////////////////////////////////////////////


// receive data from use serial port
void OnReceive(void* userData, BYTE* rcvData, int len)
{
	printf( "Rcv: %s", rcvData );
        Print( "Rcv: %s", rcvData );
}


// open usb serial port
int OpenSerial( char *commPara )  // commPara[] = "/dev/usb/acm/0,460800,8,1,n";
{
	char		buf[1024];
	int		ret;
	SERIALPORT	sp = {0};

	if ( commPara==NULL )
		return -1;
		
	if (0 != (ret = ParseSerialCommParaStr(commPara, &sp)))	
	{
		Err( "ParseSerialCommParaStr error, ret=%d\n", ret );
		return -2;
	}

	Pt( "baudrate: %d, com: %s, databits: %d, parity: %c, stopbits: %d\n", 
		sp.baudrate, sp.scom, sp.databits, sp.parity, sp.stopbits );
	
	if (0 != (ret = SerialPortOpen(&sp, OnReceive, NULL, 0)))
	{
		Err( "open error ret=%d\n", ret );
		SerialPortClose();
		return -3;
	}
	return 0;
}

int Init(void)
{
	int ret;
	
// open usb serial port
	char para[256] = "";
	sprintf( para, "%s,%d,8,1,n", g_para.devname, g_para.baudrate );
	ret = OpenSerial( para );
	if ( ret<0 )
	{
		Err("OpenSerial: ret=%d\n", ret);
		return -1;
	}

// open debug serial port

	return 0;

}

int ParseArgu( int argc, char * argv[] )
{
	if ( argc<1 || argv==NULL )
	{
		Err( "para too less or error.\n" );
		return -1;
	}
        if ( argc == 1 ) {
                g_para.flag = 1;
                strcpy( g_para.at, "at+cfun=0,0" );
                strcpy( g_para.devname, "/dev/usb/tts/1" );
	        g_para.baudrate = atoi( "115200" );
                return 0;
                }
        
	strcpy( g_para.devname, argv[0] );
	//argv++;
	g_para.baudrate = atoi( argv[1] );
        if ( argc == 3 ) {
                g_para.flag = 1;
                strcpy( g_para.at, argv[2] );
                }
              
	return 0;
}

// Command line:  serial /dev/usb/tts/0 9600
// Command line:  serial /dev/usb/tts/0 115200 at+creg?
// Command line:  serial shut


int main( int argc, char * argv[] )
{
	int ret;
// parse Arguments	
	ret = ParseArgu( --argc, ++ argv );
	if ( ret<0 )
	{
		Err("ParseArgu error, ret=%d\n", ret);
		return -1;
	}

// open debug serial port & usb serial port
	if ( (ret=Init()) < 0 )
	{	
		Err("Init error, ret=%d\n", ret);
		return -2;
	}

// receive data 
	char data[256];	
        printf("Open serial success.\nInput exit to quit program.\n");
        sleep(1 );

        if ( g_para.flag ) {
 		strcat( g_para.at, "\r\n" );
                printf( "at: %s", g_para.at );
                Print( "at: %s", g_para.at );
		if (0 >= (ret = SerialPortSend(  g_para.at, strlen(g_para.at) )) )
		{
			Err( "Send error ret=%d\n", ret );
                        Print( "Send error ret=%d\n", ret);
                        SerialPortClose();
                        return 0;        
			//break;
		}
                sleep( 5 );
                printf( "At send ok\n" );
                Print( "At send ok" );
                SerialPortClose();
                return 0;
        }
        
	while (1)
	{
		//printf("input: ");
		scanf( "%s", data );
		if ( strcmp(data, "exit")==0 )
			break;
		strcat( data, "\r\n" );
		if (0 >= (ret = SerialPortSend(  data, strlen(data) )) )
		{
			Err( "Send error ret=%d\n", ret );
			//break;
		}
	}
	SerialPortClose();
	return 0;
}

⌨️ 快捷键说明

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