我有一个射频识别扫描仪连接到连接到iPad应用程序的RedPark串行电缆。当人们扫描他们的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];
}发布于 2012-07-30 23:02:25
串行端口使您无法控制打包。数据只是一个字节流,无法预测哪些字节出现在每次读取调用中。您必须解析数据流本身,以解释内容并理解消息的开始/结束。您要么需要寻找可靠的终止字符,要么可能使用超时方法,在这种方法中,您进行多次读取,直到在一段时间内没有获得更多数据。我不推荐使用超时方法。
https://stackoverflow.com/questions/11705397
复制相似问题