Closed Isuru-Nanayakkara closed 3 years ago
Hi,
I'm trying to use this in a Swift project. I created a bridging header and added the following 4 files to my Xcode project.
BMOximeterAnalyzer.h BMOximeterAnalyzer.m BMOximeterParams.h BMOximeterParams.m
When I run it and connect to the oximeter and start receiving data, it crashes with the following error when calling the removeObjectsInRange method at the end of the addData function.
removeObjectsInRange
addData
Thread 1: EXC_BAD_ACCESS (code=1, address=0x50008f7f7f50008f)
-(void)addData:(NSData *)data { BOOL isPackageHeaderFound = NO; Byte package[5] = {0}; int packageIndex = 0; int parserIndex = 0; int i = 0; Byte *bytes = (Byte *)[data bytes]; for(int i= 0; i < data.length; i++) { [self.dataArray addObject: [NSNumber numberWithInt:(int)(bytes[i]&0xff) ]]; } if(self.dataArray.count < 10) { return; } while (i < self.dataArray.count) { //scan for package header if([self.dataArray[i] integerValue] & 0x80) { isPackageHeaderFound = YES; package[packageIndex ++] = [self.dataArray[i] integerValue]; i++; continue; } if(isPackageHeaderFound) { package[packageIndex ++] = [self.dataArray[i] integerValue]; if(packageIndex == 5) { BMOximeterParams *params = [[BMOximeterParams alloc] init]; params.waveAmplitude = package[1]; params.pulseRateValue = package[3] | ((package[2] & 0x40) << 1); params.SpO2Value = package[4]; //refresh parameters if (params.SpO2Value != self.oximeterParams.SpO2Value || params.pulseRateValue != self.oximeterParams.pulseRateValue) { if([self.delegate respondsToSelector:@selector(OximeterAnalyzer:didRefreshOximeterParams:)]) { [self.delegate performSelector:@selector(OximeterAnalyzer:didRefreshOximeterParams:) withObject:params]; } } //refresh pulse wave if([self.delegate respondsToSelector:@selector(OximeterAnalyzer:didRefreshOximeterWaveAmplitude:)]) { [self.delegate performSelector:@selector(OximeterAnalyzer:didRefreshOximeterWaveAmplitude:) withObject:params]; } self.oximeterParams = params; packageIndex = 0; isPackageHeaderFound = NO; parserIndex = i; memset(package, 0, sizeof(package)); } } i++; } [self.dataArray removeObjectsInRange:NSMakeRange(0, parserIndex+1)]; } @end
Please refer: https://github.com/zhuchengji-berry/BluetoothDemo
Thanks!
Hi,
I'm trying to use this in a Swift project. I created a bridging header and added the following 4 files to my Xcode project.
BMOximeterAnalyzer.h BMOximeterAnalyzer.m BMOximeterParams.h BMOximeterParams.m
When I run it and connect to the oximeter and start receiving data, it crashes with the following error when calling the
removeObjectsInRange
method at the end of theaddData
function.