2012-10-23 104 views
0

我已經運行了以下代碼,並且它一直運行。但是,它似乎並沒有等待任何輸入,而且我從緩衝區獲得的唯一輸出是「\ 377」,我一直在閱讀通過POSIX操作系統的串行編程指南並嘗試使用其中提供的一些建議,但我認爲在我的配置中可能會拋棄它。任何想法將不勝感激。C++,Mac OS X中的串行端口問題10.6.8

#include <iostream> 
using namespace std; 
#include <stdio.h> /* Standard input/output definitions */ 
#include <string.h> /* String function definitions */ 
#include <unistd.h> /* UNIX standard function definitions */ 
#include <fcntl.h> /* File control definitions */ 
#include <errno.h> /* Error number definitions */ 
#include <termios.h> /* POSIX terminal control definitions */ 


int open_port() { 
    int fd; //Descriptor for the port 
    fd = open("/dev/tty.usbmodemfa141", O_RDWR | O_NOCTTY | O_NDELAY); 
    if (fd == -1) { 
     cout << "Unable to open port. \n"; 
} 
else { 
     cout << "Port opened.\n"; 
} 
cout << "Descriptor in open:"; 
cout << fd; 
cout << "\n"; 
return fd; 
} 

int configure_port (int fd) { 
struct termios options; 

tcgetattr(fd, &options); 
cfsetispeed(&options, B9600); 
cfsetospeed(&options, B9600); 

options.c_cflag &= ~PARENB; 
options.c_cflag &= ~CSTOPB; 
options.c_cflag &= ~CSIZE; 
options.c_cflag |= CS8; 
options.c_cflag |= (CLOCAL | CREAD); 
tcsetattr(fd, TCSANOW, &options); 

cout << "Port configured.\n"; 

return (fd); 
} 

void read_data(int fd) { 
cout << "Reading data from: "; 
cout << fd; 
cout << "\n"; 

char buffer; 
buffer = fcntl(fd, buffer, 0); 
cout << "Buffer: "; 
cout << buffer; 
cout << "\n"; 
} 

int main (int argc, char * const argv[]) { 
int fd; //Descriptor for the port 

fd = open_port(); 
configure_port(fd); 
cout << "Descriptor: "; 
cout << fd; 
cout<< "\n"; 
read_data(fd); 
cout << "Data read."; 

return 0; 
} 

回答

2

你不從串口讀取!

從OSX fcntl manual page

fcntl - 文件控制

fcntl功能是控制文件描述符。閱讀你需要的功能read