2012-07-28 39 views
1

我有一個RFID掃描儀連接到連接到iPad應用程序的RedPark串行電纜。當人們掃描他們的RFID卡時,我得到一個帶有-readBytesAvailable:的回調。但是,有時它並不能在一次通話中給我整個RFID。有時它會在兩個電話中發送。RedPark串行電纜部分數據

如何確定我是否收到了所有東西?當我的代碼獲取第一個回調數據並嘗試使用它時,出現錯誤,因爲我們假設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]; 

} 
+0

用於發送它的確切協議是什麼? RFID是否以特定字符結尾(例如NULL)?除了RFID號碼之外,是否有任何信息? – borrrden 2012-07-29 02:22:26

回答

2

串口爲您提供了打包的控制。數據只是一個字節流,無法預測每個讀取調用中出現哪些字節。您必須解析數據流本身來解釋內容並理解消息的開始/結束。您可能需要尋找可靠的終止字符,或者可能會使用超時方法進行多次讀取,直到您在某段時間內沒有更多數據。我不建議超時方法。