Loading...
Searching...
No Matches
MeasurementManagerExample.m
Go to the documentation of this file.
2
7@implementation MeasurementManagerExample
8
9- (instancetype)init {
10 self = [super init];
11 if (self) {
12 [self initializeSdk];
13 [self setupMeasurementListener];
14 }
15 return self;
16}
17
21- (void)initializeSdk {
22 @try {
23 // [objc_NavigineSdk_getInstance]
24 // Get SDK instance
25 self.sdk = [NCNavigineSdk getInstance];
26 // [objc_NavigineSdk_getInstance]
27
28 // [objc_NavigineSdk_setUserHash]
29 // Set user hash
30 [self.sdk setUserHash:@"USER-HASH-HERE"];
31 // [objc_NavigineSdk_setUserHash]
32
33 // [objc_NavigineSdk_setServer]
34 // Set server URL (optional)
35 [self.sdk setServer:@"https://custom.navigine.com"];
36 // [objc_NavigineSdk_setServer]
37
38 // [objc_NavigineSdk_getLocationManager]
39 // Get LocationManager for working with locations
40 self.locationManager = [self.sdk getLocationManager];
41 // [objc_NavigineSdk_getLocationManager]
42
43 // [objc_NavigineSdk_getMeasurementManager]
44 // Get MeasurementManager for working with measurements
45 self.measurementManager = [self.sdk getMeasurementManager:self.locationManager];
46 // [objc_NavigineSdk_getMeasurementManager]
47
48 if (self.locationManager != nil && self.measurementManager != nil) {
49 NSLog(@"LocationManager and MeasurementManager successfully initialized");
50 }
51 } @catch (NSException *exception) {
52 NSLog(@"Error initializing SDK: %@", exception.reason);
53 }
54}
55
59- (void)setupMeasurementListener {
60 self.measurementListener = [[MeasurementListenerImpl alloc] initWithExample:self];
61}
62
66- (void)demonstrateMeasurementManagerMethods {
67 if (self.measurementManager == nil) {
68 NSLog(@"MeasurementManager not initialized");
69 return;
70 }
71
72 // [objc_MeasurementManager_addMeasurementListener]
73 // Add measurement listener
74 [self.measurementManager addMeasurementListener:self.measurementListener];
75 NSLog(@"Added measurement listener");
76 // [objc_MeasurementManager_addMeasurementListener]
77
78 // Demonstrate beacon generators
79 [self demonstrateBeaconGenerators];
80
81 // Demonstrate Eddystone generators
82 [self demonstrateEddystoneGenerators];
83
84 // Demonstrate Wi-Fi generators
85 [self demonstrateWifiGenerators];
86
87 // Demonstrate Wi-Fi RTT generators
88 [self demonstrateWifiRttGenerators];
89
90 // Demonstrate location generators
91 [self demonstrateLocationGenerators];
92
93 // Simulate some time passing for measurements
94 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
95 // [objc_MeasurementManager_removeMeasurementListener]
96 // Remove measurement listener
97 [self.measurementManager removeMeasurementListener:self.measurementListener];
98 NSLog(@"Removed measurement listener");
99 // [objc_MeasurementManager_removeMeasurementListener]
100 });
101}
102
106- (void)demonstrateBeaconGenerators {
107 // [objc_MeasurementManager_addBeaconGenerator]
108 // Add beacon generator
109 NSString *beaconId = [self.measurementManager addBeaconGeneratorWithUuid:@"12345678-1234-1234-1234-123456789012"
110 major:100
111 minor:200
112 power:-60
113 timeout:5000
114 rssiMin:-80
115 rssiMax:-40];
116 NSLog(@"Added beacon generator with ID: %@", beaconId);
117 // [objc_MeasurementManager_addBeaconGenerator]
118
119 // [objc_MeasurementManager_removeBleGenerator]
120 // Remove specific BLE generator
121 [self.measurementManager removeBleGeneratorWithId:beaconId];
122 NSLog(@"Removed BLE generator: %@", beaconId);
123 // [objc_MeasurementManager_removeBleGenerator]
124
125 // [objc_MeasurementManager_removeBleGenerators]
126 // Remove all BLE generators
127 [self.measurementManager removeBleGenerators];
128 NSLog(@"Removed all BLE generators");
129 // [objc_MeasurementManager_removeBleGenerators]
130}
131
135- (void)demonstrateEddystoneGenerators {
136 // [objc_MeasurementManager_addEddystoneGenerator]
137 // Add Eddystone generator
138 NSString *eddystoneId = [self.measurementManager addEddystoneGeneratorWithNamespaceId:@"12345678901234567890"
139 instanceId:@"1234567890123456"
140 power:-65
141 timeout:3000
142 rssiMin:-85
143 rssiMax:-45];
144 NSLog(@"Added Eddystone generator with ID: %@", eddystoneId);
145 // [objc_MeasurementManager_addEddystoneGenerator]
146
147 // Remove Eddystone generator (uses same method as BLE)
148 [self.measurementManager removeBleGeneratorWithId:eddystoneId];
149 NSLog(@"Removed Eddystone generator: %@", eddystoneId);
150}
151
155- (void)demonstrateWifiGenerators {
156 // [objc_MeasurementManager_addWifiGenerator]
157 // Add Wi-Fi generator
158 NSString *wifiId = [self.measurementManager addWifiGeneratorWithMac:@"AA:BB:CC:DD:EE:FF"
159 timeout:4000
160 rssiMin:-90
161 rssiMax:-50];
162 NSLog(@"Added Wi-Fi generator with ID: %@", wifiId);
163 // [objc_MeasurementManager_addWifiGenerator]
164
165 // [objc_MeasurementManager_removeWifiGenerator]
166 // Remove specific Wi-Fi generator
167 [self.measurementManager removeWifiGeneratorWithId:wifiId];
168 NSLog(@"Removed Wi-Fi generator: %@", wifiId);
169 // [objc_MeasurementManager_removeWifiGenerator]
170
171 // [objc_MeasurementManager_removeWifiGenerators]
172 // Remove all Wi-Fi generators
173 [self.measurementManager removeWifiGenerators];
174 NSLog(@"Removed all Wi-Fi generators");
175 // [objc_MeasurementManager_removeWifiGenerators]
176}
177
181- (void)demonstrateWifiRttGenerators {
182 // [objc_MeasurementManager_addWifiRttGenerator]
183 // Add Wi-Fi RTT generator
184 NSString *wifiRttId = [self.measurementManager addWifiRttGeneratorWithMac:@"11:22:33:44:55:66"
185 timeout:6000
186 distMin:1
187 distMax:10
188 stdDevMin:0
189 stdDevMax:2
190 rssiMin:-70
191 rssiMax:-30];
192 NSLog(@"Added Wi-Fi RTT generator with ID: %@", wifiRttId);
193 // [objc_MeasurementManager_addWifiRttGenerator]
194
195 // [objc_MeasurementManager_removeWifiRttGenerator]
196 // Remove specific Wi-Fi RTT generator
197 [self.measurementManager removeWifiRttGeneratorWithHash:wifiRttId];
198 NSLog(@"Removed Wi-Fi RTT generator: %@", wifiRttId);
199 // [objc_MeasurementManager_removeWifiRttGenerator]
200
201 // [objc_MeasurementManager_removeWifiRttGenerators]
202 // Remove all Wi-Fi RTT generators
203 [self.measurementManager removeWifiRttGenerators];
204 NSLog(@"Removed all Wi-Fi RTT generators");
205 // [objc_MeasurementManager_removeWifiRttGenerators]
206}
207
211- (void)demonstrateLocationGenerators {
212 // [objc_MeasurementManager_addLocationGenerator]
213 // Add location generator
214 NSString *locationId = [self.measurementManager addLocationGeneratorWithLatMin:55.7558
215 latMax:55.7559
216 lonMin:37.6176
217 lonMax:37.6177
218 accMin:1.0
219 accMax:5.0
220 timeout:7000];
221 NSLog(@"Added location generator with ID: %@", locationId);
222 // [objc_MeasurementManager_addLocationGenerator]
223
224 // [objc_MeasurementManager_removeLocationGenerator]
225 // Remove specific location generator
226 [self.measurementManager removeLocationGeneratorWithId:locationId];
227 NSLog(@"Removed location generator: %@", locationId);
228 // [objc_MeasurementManager_removeLocationGenerator]
229
230 // [objc_MeasurementManager_removeLocationGenerators]
231 // Remove all location generators
232 [self.measurementManager removeLocationGenerators];
233 NSLog(@"Removed all location generators");
234 // [objc_MeasurementManager_removeLocationGenerators]
235}
236
240- (void)demonstrateSensorMeasurements:(NSDictionary<NSNumber *, NCSensorMeasurement *> *)sensors {
241 [sensors enumerateKeysAndObjectsUsingBlock:^(NSNumber *sensorTypeKey, NCSensorMeasurement *measurement, BOOL *stop) {
242 // [objc_SensorMeasurement_getType]
243 // Get sensor type
244 NCSensorType type = measurement.type;
245 NSLog(@"Sensor type: %ld", (long)type);
246 // [objc_SensorMeasurement_getType]
247
248 // [objc_SensorMeasurement_getValues]
249 // Get sensor values
250 NCVector3d *values = measurement.values;
251 NSLog(@"Sensor values - X: %f, Y: %f, Z: %f", values.x, values.y, values.z);
252 // [objc_SensorMeasurement_getValues]
253
254 // [objc_SensorMeasurement_getTime]
255 // Get measurement timestamp
256 long long time = measurement.time;
257 NSLog(@"Measurement time: %lld ms", time);
258 // [objc_SensorMeasurement_getTime]
259
260 // Demonstrate Vector3d properties
261 [self demonstrateVector3d:values];
262 }];
263}
264
268- (void)demonstrateSignalMeasurements:(NSDictionary<NSString *, NCSignalMeasurement *> *)signals {
269 [signals enumerateKeysAndObjectsUsingBlock:^(NSString *signalId, NCSignalMeasurement *measurement, BOOL *stop) {
270 // [objc_SignalMeasurement_getType]
271 // Get signal type
272 NCSignalType type = measurement.type;
273 NSLog(@"Signal type: %ld", (long)type);
274 // [objc_SignalMeasurement_getType]
275
276 // [objc_SignalMeasurement_getId]
277 // Get signal identifier
278 NSString *id = measurement.id;
279 NSLog(@"Signal ID: %@", id);
280 // [objc_SignalMeasurement_getId]
281
282 // [objc_SignalMeasurement_getRssi]
283 // Get RSSI value
284 double rssi = measurement.rssi;
285 NSLog(@"Signal RSSI: %f dBm", rssi);
286 // [objc_SignalMeasurement_getRssi]
287
288 // [objc_SignalMeasurement_getDistance]
289 // Get estimated distance
290 double distance = measurement.distance;
291 NSLog(@"Signal distance: %f meters", distance);
292 // [objc_SignalMeasurement_getDistance]
293
294 // [objc_SignalMeasurement_getTime]
295 // Get measurement timestamp
296 long long time = measurement.time;
297 NSLog(@"Signal measurement time: %lld ms", time);
298 // [objc_SignalMeasurement_getTime]
299 }];
300}
301
305- (void)demonstrateVector3d:(NCVector3d *)vector {
306 // [objc_Vector3d_getX]
307 // Get X coordinate
308 double x = vector.x;
309 NSLog(@"Vector X: %f", x);
310 // [objc_Vector3d_getX]
311
312 // [objc_Vector3d_getY]
313 // Get Y coordinate
314 double y = vector.y;
315 NSLog(@"Vector Y: %f", y);
316 // [objc_Vector3d_getY]
317
318 // [objc_Vector3d_getZ]
319 // Get Z coordinate
320 double z = vector.z;
321 NSLog(@"Vector Z: %f", z);
322 // [objc_Vector3d_getZ]
323}
324
328- (void)runExample {
329 NSLog(@"=== MeasurementManager Example ===");
330
331 [self demonstrateMeasurementManagerMethods];
332
333 // Wait a bit for measurements
334 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
335 NSLog(@"=== Example completed ===");
336 });
337}
338
339@end
340
344@interface MeasurementListenerImpl : NSObject <NCMeasurementListener>
345
346@property (nonatomic, weak) MeasurementManagerExample *example;
347
348- (instancetype)initWithExample:(MeasurementManagerExample *)example;
349
350@end
351
352@implementation MeasurementListenerImpl
353
354- (instancetype)initWithExample:(MeasurementManagerExample *)example {
355 self = [super init];
356 if (self) {
357 self.example = example;
358 }
359 return self;
360}
361
362// [objc_MeasurementListener_onSensorMeasurementDetected]
363- (void)onSensorMeasurementDetected:(NSDictionary<NSNumber *, NCSensorMeasurement *> *)sensors {
364 NSLog(@"Sensor measurements detected");
365 [self.example demonstrateSensorMeasurements:sensors];
366}
367// [objc_MeasurementListener_onSensorMeasurementDetected]
368
369// [objc_MeasurementListener_onSignalMeasurementDetected]
370- (void)onSignalMeasurementDetected:(NSDictionary<NSString *, NCSignalMeasurement *> *)signals {
371 NSLog(@"Signal measurements detected");
372 [self.example demonstrateSignalMeasurements:signals];
373}
374// [objc_MeasurementListener_onSignalMeasurementDetected]
375
376@end
377
381int main(int argc, const char * argv[]) {
382 @autoreleasepool {
384 [example runExample];
385
386 // Keep the app running for a while to see the output
387 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10.0]];
388 }
389 return 0;
390}