BTLEDeivceModel.m 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. //
  2. // BTLEDeivceModel.m
  3. // OneCable
  4. //
  5. // Created by KaRam Kim on 2017. 5. 17..
  6. // Copyright © 2017년 ntels. All rights reserved.
  7. //
  8. #import "BTLEDeivceModel.h"
  9. #import "CBUUID+String.h"
  10. @interface BTLEDeivceModel () {
  11. NSString *advServices;
  12. NSString *brcData;
  13. }
  14. @end
  15. @implementation BTLEDeivceModel
  16. - (int)txPower {
  17. if ([_advertisementData objectForKey:CBAdvertisementDataTxPowerLevelKey]) {
  18. return [[_advertisementData objectForKey:CBAdvertisementDataTxPowerLevelKey] intValue];
  19. }
  20. return -1;
  21. }
  22. - (NSString*)advertisedServices {
  23. if (advServices) return advServices;
  24. NSMutableString *str = [[NSMutableString alloc] init];
  25. if ([_advertisementData objectForKey:CBAdvertisementDataServiceUUIDsKey]) {
  26. [str appendString:@"Services: "];
  27. NSArray *services = [_advertisementData objectForKey:CBAdvertisementDataServiceUUIDsKey];
  28. if ([services count]) {
  29. for (CBUUID *serviceUUID in services) {
  30. [str appendFormat:@"%@, ", [serviceUUID representativeString]];
  31. }
  32. [str appendString:@"xxx"];
  33. [str replaceOccurrencesOfString:@", xxx" withString:@"" options:0 range:NSMakeRange(0, [str length])];
  34. advServices = str;
  35. } else {
  36. advServices = @"No advertised services";
  37. }
  38. } else {
  39. advServices = @"No advertised services";
  40. }
  41. return advServices;
  42. }
  43. - (int)channel {
  44. if ([_advertisementData objectForKey:@"kCBAdvDataChannel"])
  45. return [[_advertisementData objectForKey:@"kCBAdvDataChannel"] intValue];
  46. return -1;
  47. }
  48. - (BOOL)isConnectable {
  49. return [[_advertisementData objectForKey:CBAdvertisementDataIsConnectable] boolValue];
  50. }
  51. - (NSString*)name {
  52. NSString *deviceName = nil;
  53. if ((deviceName = [_peripheralRef name]) && [deviceName length]) {
  54. return deviceName;
  55. } else if ((deviceName = [_advertisementData objectForKey:CBAdvertisementDataLocalNameKey]) && [deviceName length]) {
  56. return deviceName;
  57. }
  58. return @"<no name>";
  59. }
  60. - (NSString*)broadcastData {
  61. if (brcData) return brcData;
  62. if ([_advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey]) {
  63. NSString *raw = [[_advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey] description];
  64. raw = [raw stringByReplacingOccurrencesOfString:@"<" withString:@""];
  65. raw = [raw stringByReplacingOccurrencesOfString:@">" withString:@""];
  66. brcData = [NSString stringWithFormat:@"Broadcasted data: 0x%@", raw];
  67. } else {
  68. brcData = @"No broadcasted data";
  69. }
  70. return brcData;
  71. }
  72. @end