6

我正在尝试从连接到系统 USB 端口的 USB 设备(比如 pendrive)中获取数据。在这里,我可以打开设备文件并读取一些随机原始数据。但我想获取像 minicom/teraterm 这样的数据。

请让我知道我可以使用哪些方法和库来成功完成它以及如何完成它。

#include <stdio.h> 
#include <stdio.h>   
#include <string.h>  
#include <unistd.h>  
#include <fcntl.h>   
#include <errno.h>   
#include <termios.h> 
#include <signal.h>
#include <sys/time.h>

int main()
{
    short portfd=-1;
    int n,f,len;
    char buf[256],*s;
    alarm(2);
#if defined(O_NDELAY) && defined(F_SETFL)
    portfd = open("/dev/ttyUSB0", O_RDWR|O_NDELAY);
    if (portfd >= 0){
        /* Cancel the O_NDELAY flag. */
        printf("port openend\n");
        n = fcntl(portfd, F_GETFL, 0);
        (void) fcntl(portfd, F_SETFL, n & ~O_NDELAY);
    }
#else
    portfd = open("/dev/ttyUSB0", O_RDWR);
#endif
    if (portfd >= 0) 
    {
        if (len == 0) len = strlen(s);
        for(f = 0; f < len && f <100; f++)
            buf[f] = *s++ | 0x80;
        write(portfd, buf, f);
        printf("Do write\n");
        while(portfd>=0){
            printf("%s\n",buf);
        }
    }

    alarm(0);
    signal(SIGALRM, SIG_IGN);
    if (portfd < 0) {
        printf("cannot open %s. Sorry.\n", "/dev/ttyUSB0");
    }
}

输出日志:

���������鉀�������������������鍀���������������������������������������������������������������2
����������鉀�������������������鍀���������������������������������������������������������������2
4

1 回答 1

4

您将需要设置正确的端口配置...

struct termios oldtio,newtio;

// open port...
// save existing attributes
tcgetattr(fd,&oldtio);  

// set attributes - these flags may change for your device
#define BAUDRATE B9600 
memset(&newtio, 0x00, sizeof(newtio));  
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;   
newtio.c_iflag = IGNPAR | ICRNL;          
newtio.c_oflag = 0;  

tcflush(fd, TCIFLUSH);  
tcsetattr(fd,TCSANOW,&newtio); 

//reset attributes
tcsetattr(fd,TCSANOW,&oldtio); 

我在这里有一个粗略的工作示例... http://file-hub.com/cmd:thread/142300

于 2013-09-26T11:25:31.900 回答