gpt4 book ai didi

c - IrDA 发现的默认设置(波特率、位、停止、奇偶校验、流量控制等)

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:05 25 4
gpt4 key购买 nike

我正在尝试编写一个使用 IrDA 与 Uwatec 潜水电脑通信的工具……在 Mac 上。我正在使用的 USB IrDA 设备提供了一个串行设备(/dev/cu.IrDA-IrCOMM0/dev/tty.IrDA-IrCOMM0),可用于发送和接收数据。遗憾的是,Mac 不提供 IrDA 套接字层。

我已经使用设备驱动程序附带的命令行工具确认它可以监听和接收来自其他设备的 IrDA 通信。然而,虽然命令行工具告诉我它正在以 9600 波特进行通信,但其他设置(位、停止位、奇偶校验、流量控制等)没有返回给我。

我试过编写自己的程序来监听数据,但无法接收到任何数据,我认为原因是这些设置不正确。因此,假设我只是想监听正在发送的 9600 波特 IrDA 发现数据包,我需要使用哪些其他设置?

如果有帮助,下面是我目前用来设置通信参数的代码片段——它不起作用:

#define DEVICE "/dev/cu.IrDA-IrCOMM0"

int main(void) {
FILE *device;
struct termios ttystate;

device = fopen(DEVICE, "rw");

//get the terminal state
tcgetattr(fileno(device), &ttystate);
//turn off canonical mode and echo
ttystate.c_lflag &= ~(ICANON | ECHO);
//minimum of number input read.
ttystate.c_cc[VMIN] = 1;

cfsetspeed(&ttystate, B9600); // Set 9600 baud····
ttystate.c_cflag |= (CS8 | // Use 8 bit words
PARENB | // parity enable
PARODD | // odd parity
CCTS_OFLOW | // CTS flow control of output
CRTS_IFLOW);// RTS flow control of input

//set the terminal attributes.
tcsetattr(fileno(device), TCSANOW, &ttystate);
return EXIT_SUCCESS;
}

最佳答案

下面是我在 Linux 上用于 EXAR XR17C15 的 IrDA 初始化代码。此外,您必须将波特率设置为本示例中未设置的波特率。我希望这会有所帮助。

//
// Set up IrDA hardware interface through UART

bool CeIrDA::SetupIrDA()
{
struct termios termios;
tcgetattr(hComPort, &termios);
cfmakeraw(&termios);

termios.c_iflag = IGNPAR;
termios.c_oflag = 0;
termios.c_cc[VTIME] = 1; // timeout in 0.1s between 2 characters
termios.c_cc[VMIN] = 1; // min # of characters

tcsetattr(hComPort, TCSANOW, &termios);

xrioctl_rw_reg input;
struct timespec delay = {0, 500};
struct timespec delayrem;
//EFR: Allowing Enhanced Functions and RTS/DTR flow control
input.reg=0x09;
input.regvalue=0x50;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);

//MCR: Flow control RTS enabled
input.reg=0x04;
input.regvalue=0x40;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);

//MCR: RTS pin high
input.reg=0x04;
input.regvalue=0x00;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);

//MCR: RTS pin low
input.reg=0x04;
input.regvalue=0x02;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);

//MCR: Infrared Mode
input.reg=0x04;
input.regvalue=0x42;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);

//EFR: Allowing Enhanced Functions and RTS/DTR flow control
input.reg=0x09;
input.regvalue=0x40;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);

//LCR: Allowing changes of DLL and DLM
input.reg=0x03;
input.regvalue=0x80;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);

//DLL: Speed configuration
input.reg=0x00;
input.regvalue=0x02;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);

//DLM: Speed configuration
input.reg=0x01;
input.regvalue=0x00;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);

//LCR: configuration for parity, word length....
input.reg=0x03;
input.regvalue=0x03;
ioctl(hComPort,WRITE,&input);

nanosleep(&delay, &delayrem);
return true;
}

关于c - IrDA 发现的默认设置(波特率、位、停止、奇偶校验、流量控制等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11345135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com