USB转串口:LoopBack读写程序

时间:2016-01-18 16:09:52

标签: c macos usbserial

我在Mac OS X上使用BAFO bf-810 USB转串口适配器和pl2303驱动程序。我是该领域的初学者,因此获得了来自here的高级API,这是一个跨平台的API 。

我有两个程序,一个是写,一个是读。此API在代码中没有内置示例。因此,我必须查看其他API以获取必须完成的工作(例如,comOpen,comWrite等)。由于知识有限,我使用链接的API编写了以下小程序。

sendSerial.c

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include "rs232.h"

extern int errno;

int main(){
    comEnumerate();

    if(!comOpen(1, 9600)) printf("Cannot open the port\n");

    while (1){
        char data[1024] = "Hello World";
        int ret = comWrite(1, data, 512);
        printf("%d\n", ret);
        if(ret>0){
            printf("Bytes transferred!\n");
        } else{
            printf("%s\n", strerror(errno));
        }
        sleep(1);
    }

    return 0;
}

recSerial.c

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include "rs232.h"

extern int errno;

int main(){
    comEnumerate();
    if(!comOpen(1, 9600)) printf("Cannot open the port\n");

    char read[1024] = "EMPTY";

    printf("\nNow reading data at %s...\n",comGetPortName(1));

    while (1){
        printf(".\n");
        if(comRead(1, read, 4)){
            printf("Data: %s\n**\n", read);
        }
        sleep(1);
    }


    return 0;
}

source有一个C程序,可能对我可能缺少的内容有帮助。

问题

发送数据时,写入在第三次迭代后返回Resource temporarily unavailable错误。 为什么这种情况一直发生?当我在接收器运行时重新启动发送器程序时,错误从第一次迭代开始。

在任何情况下,我都无法读取程序读取端的任何数据。我知道RS232是一个异步协议,但我读过一些地方,系统在数据被覆盖之前有大约4 Mb的缓冲区。所以第二个问题是,我是否必须手动处理时钟同步?

P.S。:对于环回测试,我在DB9连接器上连接了Send-Recieve,RTS-CTS和DTR-DSR。

0 个答案:

没有答案