ios - RedPark 串行电缆部分数据

标签 ios serial-port

我有一个 RFID 扫描仪连接到 RedPark 串行电缆连接到 iPad 应用程序。当人们扫描他们的 RFID 卡时,我会收到一个带有 -readBytesAvailable: 的回调。但是,有时它并不能在一个电话中给我完整的 RFID。有时它会分两次发送。

如何确定我是否收到了所有内容?当我的代码获取第一个回调的数据并尝试使用它时,我得到一个错误,因为假设 RFID 是“123456789”,有时我会用@“12”接到一个电话,然后用@“3456789”接到第二个电话。所以我尝试处理 @"12"并得到一个用户未找到的错误,然后我尝试处理 @"3456789"并得到一个用户未找到的错误。

如何判断我是否完成了数据读取? RFID 的长度因供应商而异,因此我不能假设我需要读取一定数量的数字。

这是我通过 RedPark 从扫描仪接收数据的方法:

- (void) readBytesAvailable:(UInt32)length {
    NSLog(@"readBytesAvailable: %lu", length);

    UInt8 rxLoopBuff[LOOPBACK_TEST_LEN];
    [self.rfidManager read:rxLoopBuff Length:length];

    NSString *rfid = [[NSString alloc] initWithBytes:rxLoopBuff length:length encoding:NSUTF8StringEncoding];

    NSLog(@"rfid=%@", rfid);

    [self receivedScanOfRFID:rfid];

}

最佳答案

串口让你无法控制打包。数据只是字节流,无法预测每次读取调用中出现哪些字节。您必须解析数据流本身以解释内容并理解消息的开始/结束。您要么需要寻找可靠的终止字符,要么可能使用超时方法,在这种方法中您进行多次读取,直到在一段时间内不再获得更多数据。我不推荐超时方法。

关于ios - RedPark 串行电缆部分数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11705397/

相关文章:

ios - 在两个 iOS 应用程序之间共享数据

ios - 如何调整单元格的高度以便内容可以适合它?

ios - Swift/Watchkit 中涉及字符串的函数问题

php - 与 Arduino、PHP 和 OpenWrt 的串行连接。漏洞?

linux - 将DOS程序移植到linux上通过usb读写串口

ios - 解码在字符串中转义的JSON对象

iphone - 如何使用sendsynchronousRequest :queue:completionHandler:

java - 在 Java 中扫描可用的 com 端口

c - 使用 Linux 和 C 通过串口发送文件

linux - Raspberry Pi 上的 XBee Linux 串口