iOS应用程序从" Accu-Chek Aviva Connect"收集数据BG仪表。 (蓝牙低功耗)

时间:2016-10-23 22:15:41

标签: ios iphone bluetooth bluetooth-lowenergy core-bluetooth

我正在尝试创建一个可以从 Accu-Chek Aviva Connect 收集数据的iOS应用。

要与BG仪表配对,我向记录访问控制点特征发送一个写请求:

- (void)peripheral:(CBPeripheral *)aPeripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {

    if ([service.UUID isEqual:[CBUUID UUIDWithString:@"1808"]]) {
        for (CBCharacteristic *aChar in service.characteristics) {

            // Read Glucose Measurement...

            // Read Glucose Measurement Context...

            // Read Glucose Feature...

            // Read Date Time...

            // Read Record Access Control Point
            if ([aChar.UUID isEqual:[CBUUID UUIDWithString:@"2A52"]]) {
                [aPeripheral readValueForCharacteristic:aChar];
                [aPeripheral setNotifyValue:YES forCharacteristic:aChar];

                uint8_t bytes[] = {0x04, 0x01, 0x00};
                NSData *data = [NSData dataWithBytes:(void*)&bytes length:sizeof(bytes)];

                [aPeripheral writeValue:data forCharacteristic:aChar type:CBCharacteristicWriteWithResponse];
            }

        }
    }
}

在iPhone上,我看到一个带有字段的UIAlert输入安全码。我可以将iPhone与 Accu-Chek Aviva Connect 配对。但是下次我向记录访问控制Poin 特征发送一些写请求时(设备断开连接后)我得到"错误:认证不足" 且没有iPhone上的UIAlert。

我觉得我做错了什么。

我想从蓝牙设备的日志中读取记录。 AFAIU我将字节写入读取记录访问控制点([aPeripheral writeValue:data forCharacteristic:aChar type:CBCharacteristicWriteWithResponse];)并在peripheral:didWriteValueForCharacteristic:error:中得到答案。但是我不能这样做,因为"错误:身份验证不充分" 阻碍我!

2 个答案:

答案 0 :(得分:1)

您需要通过身份验证才能向BG仪表发出写入请求。身份验证不足意味着您尝试在未经过身份验证的情况下发出请求。您不能只是连接然后写入医学相关的特征。

检查您是否确实发出了身份验证请求(这也需要输入PIN码)。如果是,请检查PIN是否被接受或拒绝。

答案 1 :(得分:0)

使用Accu-Chek Aviva Connect的方法是第一次配对它,转到SettingsWirelessPairingPair Device。 然后,您会看到一个带有数字代码和消息的屏幕:"在设备上输入代码"

在iPhone上,你会发现Accu-Chek设备并将值写入Read Record Access Control Point特性。例如,请求一个记录数:

- (void)peripheral:(CBPeripheral *)aPeripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {

    if ([service.UUID isEqual:[CBUUID UUIDWithString:@"1808"]]) {
        for (CBCharacteristic *aChar in service.characteristics) {

            // Read Record Access Control Point
            if ([aChar.UUID isEqual:[CBUUID UUIDWithString:@"2A52"]]) {
                [aPeripheral readValueForCharacteristic:aChar];
                [aPeripheral setNotifyValue:YES forCharacteristic:aChar];

                self.readAccessControlPointCharacteristic = aChar;

                NSMutableData *mutableData = [NSMutableData data];
                uint8_t opCode = 0x04; // Report number of stored records
                uint8_t operator = 0x01; // All records

                [mutableData appendData:[NSData dataWithBytes:(void*)&opCode length:sizeof(opCode)]];
                [mutableData appendData:[NSData dataWithBytes:(void*)&operator length:sizeof(operator)]];

                [aPeripheral writeValue:mutableData forCharacteristic:self.readAccessControlPointCharacteristic type:CBCharacteristicWriteWithResponse];
            }

        }
    }

这导致iPhone上的UIAlertView,它要求您输入显示在Accu-Chek屏幕上的代码。当您这样做时,您的iPhone将与Accu-Chek Aviva Connect成功配对

现在。当您想要阅读蓝牙设备中的所有记录时 - 您必须转到My DataData TransferWireless→如果您的Accu-Chek设备有很多配对,请选择您的iPhone名称。 注意: iPhone必须扫描BT设备并自动连接到已发现的设备。

将建立蓝牙连接,您可以将任何请求从iPhone发送到蓝牙设备,而无需"错误:身份验证不足"