1

iPad アプリに接続された RedPark シリアル ケーブルに RFID スキャナーが接続されています。人々が RFID カードをスキャンすると、-readBytesAvailable: でコールバックを受け取ります。ただし、1回の呼び出しでRFID全体が得られない場合があります。2 回に分けて送信することもあります。

すべてを受け取ったかどうかを確認するにはどうすればよいですか? 私のコードが最初のコールバックのデータを取得してそれを使用しようとすると、エラーが発生します。RFID が「123456789」であるとすると、@「12」で 1 回の呼び出しを取得し、@「3456789」で 2 回目の呼び出しを取得することがあるためです。そのため、@"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];

}
4

1 に答える 1

2

シリアル ポートでは、パケット化を制御できません。データは単なるバイト ストリームであり、各読み取り呼び出しでどのバイトが表示されるかを予測する方法はありません。コンテンツを解釈し、メッセージの開始/終了を理解するには、データ ストリーム自体を解析する必要があります。信頼できる終了文字を探すか、一定期間データが得られなくなるまで複数回の読み取りを行うタイムアウト アプローチを使用する必要があります。タイムアウトのアプローチはお勧めしません。

于 2012-07-30T15:02:25.493 に答える