View Javadoc
1   /*
2    * Copyright (C) 2018 Alberto Irurueta Carro (alberto@irurueta.com)
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *         http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package com.irurueta.navigation.indoor;
17  
18  import com.irurueta.algebra.Matrix;
19  import com.irurueta.geometry.Point;
20  
21  import java.util.List;
22  
23  /**
24   * Data related to a beacon whose transmitted power, standard deviation of such
25   * transmitted power and its location are known.
26   *
27   * @param <P> a {@link Point} type.
28   */
29  public class BeaconWithPowerAndLocated<P extends Point<?>> extends BeaconWithPower
30          implements RadioSourceWithPowerAndLocated<P> {
31  
32      /**
33       * Position where beacon is located.
34       */
35      private P position;
36  
37      /**
38       * Covariance of inhomogeneous coordinates of current position (if available).
39       */
40      private Matrix positionCovariance;
41  
42      /**
43       * Constructor.
44       *
45       * @param identifiers      list of the multipart identifiers of the beacon.
46       * @param transmittedPower calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
47       * @param position         position where beacon is located.
48       * @throws IllegalArgumentException if either identifiers or position are null.
49       */
50      public BeaconWithPowerAndLocated(
51              final List<BeaconIdentifier> identifiers, final double transmittedPower, final P position) {
52          super(identifiers, transmittedPower);
53  
54          if (position == null) {
55              throw new IllegalArgumentException();
56          }
57  
58          this.position = position;
59      }
60  
61      /**
62       * Constructor.
63       *
64       * @param identifiers      list of the multipart identifiers of the beacon.
65       * @param transmittedPower calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
66       * @param bluetoothAddress the bluetooth mac address.
67       * @param beaconTypeCode   the two byte value indicating the type of beacon.
68       * @param manufacturer     a two byte code indicating the beacon manufacturer.
69       * @param serviceUuid      a 32 bit service uuid for the beacon.
70       * @param bluetoothName    the bluetooth device name.
71       * @param position         position where beacon is located.
72       * @throws IllegalArgumentException if either identifiers or position are null.
73       */
74      public BeaconWithPowerAndLocated(
75              final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
76              final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
77              final P position) {
78          super(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
79                  bluetoothName);
80  
81          if (position == null) {
82              throw new IllegalArgumentException();
83          }
84  
85          this.position = position;
86      }
87  
88      /**
89       * Constructor.
90       *
91       * @param identifiers                       list of the multipart identifiers of the beacon.
92       * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
93       * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
94       * @param position                          position where beacon is located.
95       * @throws IllegalArgumentException if either identifiers or position are null or
96       *                                  standard deviation is negative.
97       */
98      public BeaconWithPowerAndLocated(
99              final List<BeaconIdentifier> identifiers, final double transmittedPower,
100             final Double transmittedPowerStandardDeviation, final P position) {
101         super(identifiers, transmittedPower, transmittedPowerStandardDeviation);
102 
103         if (position == null) {
104             throw new IllegalArgumentException();
105         }
106 
107         this.position = position;
108     }
109 
110     /**
111      * Constructor.
112      *
113      * @param identifiers                       list of the multipart identifiers of the beacon.
114      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
115      * @param bluetoothAddress                  the bluetooth mac address.
116      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
117      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
118      * @param serviceUuid                       a 32 bit service uuid for the beacon.
119      * @param bluetoothName                     the bluetooth device name.
120      * @param transmittedPowerStandardDeviation transmitted power standard deviation.
121      * @param position                          position where beacon is located.
122      * @throws IllegalArgumentException if either identifiers or position are null or
123      *                                  standard deviation is negative.
124      */
125     public BeaconWithPowerAndLocated(
126             final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
127             final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
128             final Double transmittedPowerStandardDeviation, final P position) {
129         super(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid, bluetoothName,
130                 transmittedPowerStandardDeviation);
131 
132         if (position == null) {
133             throw new IllegalArgumentException();
134         }
135 
136         this.position = position;
137     }
138 
139     /**
140      * Constructor.
141      *
142      * @param identifiers        list of the multipart identifiers of the beacon.
143      * @param transmittedPower   calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
144      * @param position           position where beacon is located.
145      * @param positionCovariance covariance of inhomogeneous coordinates of current
146      *                           position (if available).
147      * @throws IllegalArgumentException if either identifiers or position are null or
148      *                                  covariance has invalid size.
149      */
150     public BeaconWithPowerAndLocated(
151             final List<BeaconIdentifier> identifiers, final double transmittedPower, final P position,
152             final Matrix positionCovariance) {
153         this(identifiers, transmittedPower, position);
154 
155         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
156                 || positionCovariance.getColumns() != position.getDimensions())) {
157             throw new IllegalArgumentException();
158         }
159         this.positionCovariance = positionCovariance;
160     }
161 
162     /**
163      * Constructor.
164      *
165      * @param identifiers        list of the multipart identifiers of the beacon.
166      * @param transmittedPower   calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
167      * @param bluetoothAddress   the bluetooth mac address.
168      * @param beaconTypeCode     the two byte value indicating the type of beacon.
169      * @param manufacturer       a two byte code indicating the beacon manufacturer.
170      * @param serviceUuid        a 32 bit service uuid for the beacon.
171      * @param bluetoothName      the bluetooth device name.
172      * @param position           position where beacon is located.
173      * @param positionCovariance covariance of inhomogeneous coordinates of current
174      *                           position (if available).
175      * @throws IllegalArgumentException if either identifiers or position are null or
176      *                                  covariance has invalid size.
177      */
178     public BeaconWithPowerAndLocated(
179             final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
180             final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
181             final P position, final Matrix positionCovariance) {
182         this(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid, bluetoothName,
183                 position);
184 
185         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
186                 || positionCovariance.getColumns() != position.getDimensions())) {
187             throw new IllegalArgumentException();
188         }
189         this.positionCovariance = positionCovariance;
190     }
191 
192     /**
193      * Constructor.
194      *
195      * @param identifiers                       list of the multipart identifiers of the beacon.
196      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
197      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
198      * @param position                          position where beacon is located.
199      * @param positionCovariance                covariance of inhomogeneous coordinates of current
200      *                                          position (if available).
201      * @throws IllegalArgumentException if either identifiers or position are null,
202      *                                  covariance has invalid size or standard deviation is negative.
203      */
204     public BeaconWithPowerAndLocated(
205             final List<BeaconIdentifier> identifiers, final double transmittedPower,
206             final Double transmittedPowerStandardDeviation, final P position, final Matrix positionCovariance) {
207         this(identifiers, transmittedPower, transmittedPowerStandardDeviation, position);
208 
209         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
210                 || positionCovariance.getColumns() != position.getDimensions())) {
211             throw new IllegalArgumentException();
212         }
213         this.positionCovariance = positionCovariance;
214     }
215 
216     /**
217      * Constructor.
218      *
219      * @param identifiers                       list of the multipart identifiers of the beacon.
220      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
221      * @param bluetoothAddress                  the bluetooth mac address.
222      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
223      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
224      * @param serviceUuid                       a 32 bit service uuid for the beacon.
225      * @param bluetoothName                     the bluetooth device name.
226      * @param transmittedPowerStandardDeviation transmitted power standard deviation.
227      * @param position                          position where beacon is located.
228      * @param positionCovariance                covariance of inhomogeneous coordinates of current
229      *                                          position (if available).
230      * @throws IllegalArgumentException if either identifiers or position are null,
231      *                                  covariance has invalid size or standard deviation is negative.
232      */
233     public BeaconWithPowerAndLocated(
234             final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
235             final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
236             final Double transmittedPowerStandardDeviation, final P position,
237             final Matrix positionCovariance) {
238         this(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid, bluetoothName,
239                 transmittedPowerStandardDeviation, position);
240 
241         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
242                 || positionCovariance.getColumns() != position.getDimensions())) {
243             throw new IllegalArgumentException();
244         }
245         this.positionCovariance = positionCovariance;
246     }
247 
248     /**
249      * Constructor.
250      *
251      * @param identifiers      list of the multipart identifiers of the beacon.
252      * @param transmittedPower calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
253      * @param frequency        frequency used by this Beacon.
254      * @param bluetoothAddress the bluetooth mac address.
255      * @param beaconTypeCode   the two byte value indicating the type of beacon.
256      * @param manufacturer     a two byte code indicating the beacon manufacturer.
257      * @param serviceUuid      a 32 bit service uuid for the beacon.
258      * @param bluetoothName    the bluetooth device name.
259      * @param position         position where beacon is located.
260      * @throws IllegalArgumentException if either identifiers or position are null.
261      */
262     public BeaconWithPowerAndLocated(
263             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
264             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
265             final String bluetoothName, final P position) {
266         super(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
267                 bluetoothName);
268 
269         if (position == null) {
270             throw new IllegalArgumentException();
271         }
272 
273         this.position = position;
274     }
275 
276     /**
277      * Constructor.
278      *
279      * @param identifiers                       list of the multipart identifiers of the beacon.
280      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
281      * @param frequency                         frequency used by this Beacon.
282      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
283      * @param position                          position where beacon is located.
284      * @throws IllegalArgumentException if either identifiers or position are null or
285      *                                  standard deviation is negative.
286      */
287     public BeaconWithPowerAndLocated(
288             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
289             final Double transmittedPowerStandardDeviation, final P position) {
290         super(identifiers, transmittedPower, frequency, transmittedPowerStandardDeviation);
291 
292         if (position == null) {
293             throw new IllegalArgumentException();
294         }
295 
296         this.position = position;
297     }
298 
299     /**
300      * Constructor.
301      *
302      * @param identifiers                       list of the multipart identifiers of the beacon.
303      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
304      * @param frequency                         frequency used by this Beacon.
305      * @param bluetoothAddress                  the bluetooth mac address.
306      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
307      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
308      * @param serviceUuid                       a 32 bit service uuid for the beacon.
309      * @param bluetoothName                     the bluetooth device name.
310      * @param transmittedPowerStandardDeviation transmitted power standard deviation.
311      * @param position                          position where beacon is located.
312      * @throws IllegalArgumentException if either identifiers or position are null or
313      *                                  standard deviation is negative.
314      */
315     public BeaconWithPowerAndLocated(
316             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
317             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
318             final String bluetoothName, final Double transmittedPowerStandardDeviation, final P position) {
319         super(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
320                 bluetoothName, transmittedPowerStandardDeviation);
321 
322         if (position == null) {
323             throw new IllegalArgumentException();
324         }
325 
326         this.position = position;
327     }
328 
329     /**
330      * Constructor.
331      *
332      * @param identifiers        list of the multipart identifiers of the beacon.
333      * @param transmittedPower   calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
334      * @param frequency          frequency used by this Beacon.
335      * @param bluetoothAddress   the bluetooth mac address.
336      * @param beaconTypeCode     the two byte value indicating the type of beacon.
337      * @param manufacturer       a two byte code indicating the beacon manufacturer.
338      * @param serviceUuid        a 32 bit service uuid for the beacon.
339      * @param bluetoothName      the bluetooth device name.
340      * @param position           position where beacon is located.
341      * @param positionCovariance covariance of inhomogeneous coordinates of current
342      *                           position (if available).
343      * @throws IllegalArgumentException if either identifiers or position are null or
344      *                                  covariance has invalid size.
345      */
346     public BeaconWithPowerAndLocated(
347             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
348             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
349             final String bluetoothName, final P position, final Matrix positionCovariance) {
350         this(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
351                 bluetoothName, position);
352 
353         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
354                 || positionCovariance.getColumns() != position.getDimensions())) {
355             throw new IllegalArgumentException();
356         }
357         this.positionCovariance = positionCovariance;
358     }
359 
360     /**
361      * Constructor.
362      *
363      * @param identifiers                       list of the multipart identifiers of the beacon.
364      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
365      * @param frequency                         frequency used by this Beacon.
366      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
367      * @param position                          position where beacon is located.
368      * @param positionCovariance                covariance of inhomogeneous coordinates of current
369      *                                          position (if available).
370      * @throws IllegalArgumentException if either identifiers or position are null,
371      *                                  covariance has invalid size or standard deviation is negative.
372      */
373     public BeaconWithPowerAndLocated(
374             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
375             final Double transmittedPowerStandardDeviation, final P position, final Matrix positionCovariance) {
376         this(identifiers, transmittedPower, frequency, transmittedPowerStandardDeviation, position);
377 
378         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
379                 || positionCovariance.getColumns() != position.getDimensions())) {
380             throw new IllegalArgumentException();
381         }
382         this.positionCovariance = positionCovariance;
383     }
384 
385     /**
386      * Constructor.
387      *
388      * @param identifiers                       list of the multipart identifiers of the beacon.
389      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
390      * @param frequency                         frequency used by this Beacon.
391      * @param bluetoothAddress                  the bluetooth mac address.
392      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
393      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
394      * @param serviceUuid                       a 32 bit service uuid for the beacon.
395      * @param bluetoothName                     the bluetooth device name.
396      * @param transmittedPowerStandardDeviation transmitted power standard deviation.
397      * @param position                          position where beacon is located.
398      * @param positionCovariance                covariance of inhomogeneous coordinates of current
399      *                                          position (if available).
400      * @throws IllegalArgumentException if either identifiers or position are null,
401      *                                  covariance has invalid size or standard deviation is negative.
402      */
403     public BeaconWithPowerAndLocated(
404             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
405             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
406             final String bluetoothName, final Double transmittedPowerStandardDeviation, final P position,
407             final Matrix positionCovariance) {
408         this(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
409                 bluetoothName, transmittedPowerStandardDeviation, position);
410 
411         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
412                 || positionCovariance.getColumns() != position.getDimensions())) {
413             throw new IllegalArgumentException();
414         }
415         this.positionCovariance = positionCovariance;
416     }
417 
418     /**
419      * Constructor.
420      *
421      * @param identifiers      list of the multipart identifiers of the beacon.
422      * @param transmittedPower calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
423      * @param pathLossExponent path loss exponent. By default, this is 2.0.
424      * @param position         position where beacon is located.
425      * @throws IllegalArgumentException if either identifiers or position are null.
426      */
427     public BeaconWithPowerAndLocated(
428             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double pathLossExponent,
429             final P position) {
430         super(identifiers, transmittedPower, pathLossExponent);
431 
432         if (position == null) {
433             throw new IllegalArgumentException();
434         }
435 
436         this.position = position;
437     }
438 
439     /**
440      * Constructor.
441      *
442      * @param identifiers      list of the multipart identifiers of the beacon.
443      * @param transmittedPower calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
444      * @param bluetoothAddress the bluetooth mac address.
445      * @param beaconTypeCode   the two byte value indicating the type of beacon.
446      * @param manufacturer     a two byte code indicating the beacon manufacturer.
447      * @param serviceUuid      a 32 bit service uuid for the beacon.
448      * @param bluetoothName    the bluetooth device name.
449      * @param pathLossExponent path loss exponent. By default, this is 2.0.
450      * @param position         position where beacon is located.
451      * @throws IllegalArgumentException if either identifiers or position are null.
452      */
453     public BeaconWithPowerAndLocated(
454             final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
455             final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
456             final double pathLossExponent, final P position) {
457         super(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid, bluetoothName,
458                 pathLossExponent);
459 
460         if (position == null) {
461             throw new IllegalArgumentException();
462         }
463 
464         this.position = position;
465     }
466 
467     /**
468      * Constructor.
469      *
470      * @param identifiers                       list of the multipart identifiers of the beacon.
471      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
472      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
473      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
474      * @param position                          position where beacon is located.
475      * @throws IllegalArgumentException if either identifiers or position are null or
476      *                                  standard deviation is negative.
477      */
478     public BeaconWithPowerAndLocated(
479             final List<BeaconIdentifier> identifiers, final double transmittedPower,
480             final Double transmittedPowerStandardDeviation, final double pathLossExponent, final P position) {
481         super(identifiers, transmittedPower, transmittedPowerStandardDeviation, pathLossExponent);
482 
483         if (position == null) {
484             throw new IllegalArgumentException();
485         }
486 
487         this.position = position;
488     }
489 
490     /**
491      * Constructor.
492      *
493      * @param identifiers                       list of the multipart identifiers of the beacon.
494      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
495      * @param bluetoothAddress                  the bluetooth mac address.
496      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
497      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
498      * @param serviceUuid                       a 32 bit service uuid for the beacon.
499      * @param bluetoothName                     the bluetooth device name.
500      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
501      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
502      * @param position                          position where beacon is located.
503      * @throws IllegalArgumentException if either identifiers or position are null or
504      *                                  standard deviation is negative.
505      */
506     public BeaconWithPowerAndLocated(
507             final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
508             final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
509             final double pathLossExponent, final Double transmittedPowerStandardDeviation, final P position) {
510         super(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid, bluetoothName,
511                 pathLossExponent, transmittedPowerStandardDeviation);
512 
513         if (position == null) {
514             throw new IllegalArgumentException();
515         }
516 
517         this.position = position;
518     }
519 
520     /**
521      * Constructor.
522      *
523      * @param identifiers        list of the multipart identifiers of the beacon.
524      * @param transmittedPower   calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
525      * @param pathLossExponent   path loss exponent. By default, this is 2.0.
526      * @param position           position where beacon is located.
527      * @param positionCovariance covariance of inhomogeneous coordinates of current
528      *                           position (if available).
529      * @throws IllegalArgumentException if either identifiers or position are null or
530      *                                  covariance has invalid size.
531      */
532     public BeaconWithPowerAndLocated(
533             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double pathLossExponent,
534             final P position, final Matrix positionCovariance) {
535         this(identifiers, transmittedPower, pathLossExponent, position);
536 
537         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
538                 || positionCovariance.getColumns() != position.getDimensions())) {
539             throw new IllegalArgumentException();
540         }
541         this.positionCovariance = positionCovariance;
542     }
543 
544     /**
545      * Constructor.
546      *
547      * @param identifiers        list of the multipart identifiers of the beacon.
548      * @param transmittedPower   calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
549      * @param bluetoothAddress   the bluetooth mac address.
550      * @param beaconTypeCode     the two byte value indicating the type of beacon.
551      * @param manufacturer       a two byte code indicating the beacon manufacturer.
552      * @param serviceUuid        a 32 bit service uuid for the beacon.
553      * @param bluetoothName      the bluetooth device name.
554      * @param pathLossExponent   path loss exponent. By default, this is 2.0.
555      * @param position           position where beacon is located.
556      * @param positionCovariance covariance of inhomogeneous coordinates of current
557      *                           position (if available).
558      * @throws IllegalArgumentException if either identifiers or position are null or
559      *                                  covariance has invalid size.
560      */
561     public BeaconWithPowerAndLocated(
562             final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
563             final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
564             final double pathLossExponent, final P position, final Matrix positionCovariance) {
565         this(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid, bluetoothName,
566                 pathLossExponent, position);
567 
568         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
569                 || positionCovariance.getColumns() != position.getDimensions())) {
570             throw new IllegalArgumentException();
571         }
572         this.positionCovariance = positionCovariance;
573     }
574 
575     /**
576      * Constructor.
577      *
578      * @param identifiers                       list of the multipart identifiers of the beacon.
579      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
580      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
581      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
582      * @param position                          position where beacon is located.
583      * @param positionCovariance                covariance of inhomogeneous coordinates of current
584      *                                          position (if available).
585      * @throws IllegalArgumentException if either identifiers or position are null,
586      *                                  covariance has invalid size or standard deviation is negative.
587      */
588     public BeaconWithPowerAndLocated(
589             final List<BeaconIdentifier> identifiers, final double transmittedPower,
590             final Double transmittedPowerStandardDeviation, final double pathLossExponent, final P position,
591             final Matrix positionCovariance) {
592         this(identifiers, transmittedPower, transmittedPowerStandardDeviation, pathLossExponent, position);
593 
594         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
595                 || positionCovariance.getColumns() != position.getDimensions())) {
596             throw new IllegalArgumentException();
597         }
598         this.positionCovariance = positionCovariance;
599     }
600 
601     /**
602      * Constructor.
603      *
604      * @param identifiers                       list of the multipart identifiers of the beacon.
605      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
606      * @param bluetoothAddress                  the bluetooth mac address.
607      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
608      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
609      * @param serviceUuid                       a 32 bit service uuid for the beacon.
610      * @param bluetoothName                     the bluetooth device name.
611      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
612      * @param transmittedPowerStandardDeviation transmitted power standard deviation.
613      * @param position                          position where beacon is located.
614      * @param positionCovariance                covariance of inhomogeneous coordinates of current
615      *                                          position (if available).
616      * @throws IllegalArgumentException if either identifiers or position are null,
617      *                                  covariance has invalid size or standard deviation is negative.
618      */
619     public BeaconWithPowerAndLocated(
620             final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
621             final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
622             final double pathLossExponent, final Double transmittedPowerStandardDeviation, final P position,
623             final Matrix positionCovariance) {
624         this(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid, bluetoothName,
625                 pathLossExponent, transmittedPowerStandardDeviation, position);
626 
627         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
628                 || positionCovariance.getColumns() != position.getDimensions())) {
629             throw new IllegalArgumentException();
630         }
631         this.positionCovariance = positionCovariance;
632     }
633 
634     /**
635      * Constructor.
636      *
637      * @param identifiers      list of the multipart identifiers of the beacon.
638      * @param transmittedPower calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
639      * @param frequency        frequency used by this Beacon.
640      * @param bluetoothAddress the bluetooth mac address.
641      * @param beaconTypeCode   the two byte value indicating the type of beacon.
642      * @param manufacturer     a two byte code indicating the beacon manufacturer.
643      * @param serviceUuid      a 32 bit service uuid for the beacon.
644      * @param bluetoothName    the bluetooth device name.
645      * @param pathLossExponent path loss exponent. By default, this is 2.0.
646      * @param position         position where beacon is located.
647      * @throws IllegalArgumentException if either identifiers or position are null.
648      */
649     public BeaconWithPowerAndLocated(
650             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
651             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
652             final String bluetoothName, final double pathLossExponent, final P position) {
653         super(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
654                 bluetoothName, pathLossExponent);
655 
656         if (position == null) {
657             throw new IllegalArgumentException();
658         }
659 
660         this.position = position;
661     }
662 
663     /**
664      * Constructor.
665      *
666      * @param identifiers                       list of the multipart identifiers of the beacon.
667      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
668      * @param frequency                         frequency used by this Beacon.
669      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
670      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
671      * @param position                          position where beacon is located.
672      * @throws IllegalArgumentException if either identifiers or position are null or
673      *                                  standard deviation is negative.
674      */
675     public BeaconWithPowerAndLocated(
676             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
677             final double pathLossExponent, final Double transmittedPowerStandardDeviation, final P position) {
678         super(identifiers, transmittedPower, frequency, pathLossExponent, transmittedPowerStandardDeviation);
679 
680         if (position == null) {
681             throw new IllegalArgumentException();
682         }
683 
684         this.position = position;
685     }
686 
687     /**
688      * Constructor.
689      *
690      * @param identifiers                       list of the multipart identifiers of the beacon.
691      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
692      * @param frequency                         frequency used by this Beacon.
693      * @param bluetoothAddress                  the bluetooth mac address.
694      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
695      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
696      * @param serviceUuid                       a 32 bit service uuid for the beacon.
697      * @param bluetoothName                     the bluetooth device name.
698      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
699      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
700      * @param position                          position where beacon is located.
701      * @throws IllegalArgumentException if either identifiers or position are null or
702      *                                  standard deviation is negative.
703      */
704     public BeaconWithPowerAndLocated(
705             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
706             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
707             final String bluetoothName, final double pathLossExponent, final Double transmittedPowerStandardDeviation,
708             final P position) {
709         super(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
710                 bluetoothName, pathLossExponent, transmittedPowerStandardDeviation);
711 
712         if (position == null) {
713             throw new IllegalArgumentException();
714         }
715 
716         this.position = position;
717     }
718 
719     /**
720      * Constructor.
721      *
722      * @param identifiers        list of the multipart identifiers of the beacon.
723      * @param transmittedPower   calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
724      * @param frequency          frequency used by this Beacon.
725      * @param bluetoothAddress   the bluetooth mac address.
726      * @param beaconTypeCode     the two byte value indicating the type of beacon.
727      * @param manufacturer       a two byte code indicating the beacon manufacturer.
728      * @param serviceUuid        a 32 bit service uuid for the beacon.
729      * @param bluetoothName      the bluetooth device name.
730      * @param pathLossExponent   path loss exponent. By default, this is 2.0.
731      * @param position           position where beacon is located.
732      * @param positionCovariance covariance of inhomogeneous coordinates of current
733      *                           position (if available).
734      * @throws IllegalArgumentException if either identifiers or position are null or
735      *                                  covariance has invalid size.
736      */
737     public BeaconWithPowerAndLocated(
738             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
739             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
740             final String bluetoothName, final double pathLossExponent, final P position,
741             final Matrix positionCovariance) {
742         this(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
743                 bluetoothName, pathLossExponent, position);
744 
745         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
746                 || positionCovariance.getColumns() != position.getDimensions())) {
747             throw new IllegalArgumentException();
748         }
749         this.positionCovariance = positionCovariance;
750     }
751 
752     /**
753      * Constructor.
754      *
755      * @param identifiers                       list of the multipart identifiers of the beacon.
756      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
757      * @param frequency                         frequency used by this Beacon.
758      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
759      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
760      * @param position                          position where beacon is located.
761      * @param positionCovariance                covariance of inhomogeneous coordinates of current
762      *                                          position (if available).
763      * @throws IllegalArgumentException if either identifiers or position are null,
764      *                                  covariance has invalid size or standard deviation is negative.
765      */
766     public BeaconWithPowerAndLocated(
767             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
768             final double pathLossExponent, final Double transmittedPowerStandardDeviation, final P position,
769             final Matrix positionCovariance) {
770         this(identifiers, transmittedPower, frequency, pathLossExponent, transmittedPowerStandardDeviation, position);
771 
772         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
773                 || positionCovariance.getColumns() != position.getDimensions())) {
774             throw new IllegalArgumentException();
775         }
776         this.positionCovariance = positionCovariance;
777     }
778 
779     /**
780      * Constructor.
781      *
782      * @param identifiers                       list of the multipart identifiers of the beacon.
783      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
784      * @param frequency                         frequency used by this Beacon.
785      * @param bluetoothAddress                  the bluetooth mac address.
786      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
787      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
788      * @param serviceUuid                       a 32 bit service uuid for the beacon.
789      * @param bluetoothName                     the bluetooth device name.
790      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
791      * @param transmittedPowerStandardDeviation transmitted power standard deviation.
792      * @param position                          position where beacon is located.
793      * @param positionCovariance                covariance of inhomogeneous coordinates of current
794      *                                          position (if available).
795      * @throws IllegalArgumentException if either identifiers or position are null,
796      *                                  covariance has invalid size or standard deviation is negative.
797      */
798     public BeaconWithPowerAndLocated(
799             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
800             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
801             final String bluetoothName, final double pathLossExponent, final Double transmittedPowerStandardDeviation,
802             final P position, final Matrix positionCovariance) {
803         this(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
804                 bluetoothName, pathLossExponent, transmittedPowerStandardDeviation, position);
805 
806         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
807                 || positionCovariance.getColumns() != position.getDimensions())) {
808             throw new IllegalArgumentException();
809         }
810         this.positionCovariance = positionCovariance;
811     }
812 
813     /**
814      * Constructor.
815      *
816      * @param identifiers                       list of the multipart identifiers of the beacon.
817      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
818      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
819      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
820      * @param pathLossExponentStandardDeviation standard deviation of path loss exponent or null if
821      *                                          unknown.
822      * @param position                          position where beacon is located.
823      * @throws IllegalArgumentException if either identifiers or position are null or
824      *                                  any standard deviation is negative.
825      */
826     public BeaconWithPowerAndLocated(
827             final List<BeaconIdentifier> identifiers, final double transmittedPower,
828             final Double transmittedPowerStandardDeviation, final double pathLossExponent,
829             final Double pathLossExponentStandardDeviation, final P position) {
830         super(identifiers, transmittedPower, transmittedPowerStandardDeviation, pathLossExponent,
831                 pathLossExponentStandardDeviation);
832 
833         if (position == null) {
834             throw new IllegalArgumentException();
835         }
836 
837         this.position = position;
838     }
839 
840     /**
841      * Constructor.
842      *
843      * @param identifiers                       list of the multipart identifiers of the beacon.
844      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
845      * @param bluetoothAddress                  the bluetooth mac address.
846      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
847      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
848      * @param serviceUuid                       a 32 bit service uuid for the beacon.
849      * @param bluetoothName                     the bluetooth device name.
850      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
851      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
852      * @param pathLossExponentStandardDeviation standard deviation of path loss exponent or null if
853      *                                          unknown.
854      * @param position                          position where beacon is located.
855      * @throws IllegalArgumentException if either identifiers or position are null or
856      *                                  any standard deviation is negative.
857      */
858     public BeaconWithPowerAndLocated(
859             final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
860             final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
861             final double pathLossExponent, final Double transmittedPowerStandardDeviation,
862             final Double pathLossExponentStandardDeviation, final P position) {
863         super(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid, bluetoothName,
864                 pathLossExponent, transmittedPowerStandardDeviation, pathLossExponentStandardDeviation);
865 
866         if (position == null) {
867             throw new IllegalArgumentException();
868         }
869 
870         this.position = position;
871     }
872 
873     /**
874      * Constructor.
875      *
876      * @param identifiers                       list of the multipart identifiers of the beacon.
877      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
878      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
879      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
880      * @param pathLossExponentStandardDeviation standard deviation of path loss exponent or null if
881      *                                          unknown.
882      * @param position                          position where beacon is located.
883      * @param positionCovariance                covariance of inhomogeneous coordinates of current
884      *                                          position (if available).
885      * @throws IllegalArgumentException if either identifiers or position are null,
886      *                                  covariance has invalid size or any standard deviation is negative.
887      */
888     public BeaconWithPowerAndLocated(
889             final List<BeaconIdentifier> identifiers, final double transmittedPower,
890             final Double transmittedPowerStandardDeviation, final double pathLossExponent,
891             final Double pathLossExponentStandardDeviation, final P position, final Matrix positionCovariance) {
892         this(identifiers, transmittedPower, transmittedPowerStandardDeviation, pathLossExponent,
893                 pathLossExponentStandardDeviation, position);
894 
895         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
896                 || positionCovariance.getColumns() != position.getDimensions())) {
897             throw new IllegalArgumentException();
898         }
899         this.positionCovariance = positionCovariance;
900     }
901 
902     /**
903      * Constructor.
904      *
905      * @param identifiers                       list of the multipart identifiers of the beacon.
906      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
907      * @param bluetoothAddress                  the bluetooth mac address.
908      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
909      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
910      * @param serviceUuid                       a 32 bit service uuid for the beacon.
911      * @param bluetoothName                     the bluetooth device name.
912      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
913      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value or null
914      *                                          if unknown.
915      * @param pathLossExponentStandardDeviation standard deviation of path loss exponent or null if
916      *                                          unknown.
917      * @param position                          position where beacon is located.
918      * @param positionCovariance                covariance of inhomogeneous coordinates of current
919      *                                          position (if available).
920      * @throws IllegalArgumentException if either identifiers or position are null,
921      *                                  covariance has invalid size or any standard deviation is negative.
922      */
923     public BeaconWithPowerAndLocated(
924             final List<BeaconIdentifier> identifiers, final double transmittedPower, final String bluetoothAddress,
925             final int beaconTypeCode, final int manufacturer, final int serviceUuid, final String bluetoothName,
926             final double pathLossExponent, final Double transmittedPowerStandardDeviation,
927             final Double pathLossExponentStandardDeviation, final P position, final Matrix positionCovariance) {
928         this(identifiers, transmittedPower, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid, bluetoothName,
929                 pathLossExponent, transmittedPowerStandardDeviation, pathLossExponentStandardDeviation, position);
930 
931         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
932                 || positionCovariance.getColumns() != position.getDimensions())) {
933             throw new IllegalArgumentException();
934         }
935         this.positionCovariance = positionCovariance;
936     }
937 
938     /**
939      * Constructor.
940      *
941      * @param identifiers                       list of the multipart identifiers of the beacon.
942      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
943      * @param frequency                         frequency used by this Beacon.
944      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
945      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
946      * @param pathLossExponentStandardDeviation standard deviation of path loss exponent or null if
947      *                                          unknown.
948      * @param position                          position where beacon is located.
949      * @throws IllegalArgumentException if either identifiers or position are null or
950      *                                  any standard deviation is negative.
951      */
952     public BeaconWithPowerAndLocated(
953             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
954             final double pathLossExponent, final Double transmittedPowerStandardDeviation,
955             final Double pathLossExponentStandardDeviation, final P position) {
956         super(identifiers, transmittedPower, frequency, pathLossExponent, transmittedPowerStandardDeviation,
957                 pathLossExponentStandardDeviation);
958 
959         if (position == null) {
960             throw new IllegalArgumentException();
961         }
962 
963         this.position = position;
964     }
965 
966     /**
967      * Constructor.
968      *
969      * @param identifiers                       list of the multipart identifiers of the beacon.
970      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
971      * @param frequency                         frequency used by this Beacon.
972      * @param bluetoothAddress                  the bluetooth mac address.
973      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
974      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
975      * @param serviceUuid                       a 32 bit service uuid for the beacon.
976      * @param bluetoothName                     the bluetooth device name.
977      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
978      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
979      * @param pathLossExponentStandardDeviation standard deviation of path loss exponent or null if
980      *                                          unknown.
981      * @param position                          position where beacon is located.
982      * @throws IllegalArgumentException if either identifiers or position are null or
983      *                                  any standard deviation is negative.
984      */
985     public BeaconWithPowerAndLocated(
986             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
987             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
988             final String bluetoothName, final double pathLossExponent, final Double transmittedPowerStandardDeviation,
989             final Double pathLossExponentStandardDeviation, final P position) {
990         super(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
991                 bluetoothName, pathLossExponent, transmittedPowerStandardDeviation, pathLossExponentStandardDeviation);
992 
993         if (position == null) {
994             throw new IllegalArgumentException();
995         }
996 
997         this.position = position;
998     }
999 
1000     /**
1001      * Constructor.
1002      *
1003      * @param identifiers                       list of the multipart identifiers of the beacon.
1004      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
1005      * @param frequency                         frequency used by this Beacon.
1006      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
1007      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value.
1008      * @param pathLossExponentStandardDeviation standard deviation of path loss exponent or null if
1009      *                                          unknown.
1010      * @param position                          position where beacon is located.
1011      * @param positionCovariance                covariance of inhomogeneous coordinates of current
1012      *                                          position (if available).
1013      * @throws IllegalArgumentException if either identifiers or position are null,
1014      *                                  covariance has invalid size or any standard deviation is negative.
1015      */
1016     public BeaconWithPowerAndLocated(
1017             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
1018             final double pathLossExponent, final Double transmittedPowerStandardDeviation,
1019             final Double pathLossExponentStandardDeviation, final P position, final Matrix positionCovariance) {
1020         this(identifiers, transmittedPower, frequency, pathLossExponent, transmittedPowerStandardDeviation,
1021                 pathLossExponentStandardDeviation, position);
1022 
1023         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
1024                 || positionCovariance.getColumns() != position.getDimensions())) {
1025             throw new IllegalArgumentException();
1026         }
1027         this.positionCovariance = positionCovariance;
1028     }
1029 
1030     /**
1031      * Constructor.
1032      *
1033      * @param identifiers                       list of the multipart identifiers of the beacon.
1034      * @param transmittedPower                  calibrated measured Tx power of the Beacon in RSSI (expressed in dBm's).
1035      * @param frequency                         frequency used by this Beacon.
1036      * @param bluetoothAddress                  the bluetooth mac address.
1037      * @param beaconTypeCode                    the two byte value indicating the type of beacon.
1038      * @param manufacturer                      a two byte code indicating the beacon manufacturer.
1039      * @param serviceUuid                       a 32 bit service uuid for the beacon.
1040      * @param bluetoothName                     the bluetooth device name.
1041      * @param pathLossExponent                  path loss exponent. By default, this is 2.0.
1042      * @param transmittedPowerStandardDeviation standard deviation of transmitted power value or null
1043      *                                          if unknown.
1044      * @param pathLossExponentStandardDeviation standard deviation of path loss exponent or null if
1045      *                                          unknown.
1046      * @param position                          position where beacon is located.
1047      * @param positionCovariance                covariance of inhomogeneous coordinates of current
1048      *                                          position (if available).
1049      * @throws IllegalArgumentException if either identifiers or position are null,
1050      *                                  covariance has invalid size or any standard deviation is negative.
1051      */
1052     public BeaconWithPowerAndLocated(
1053             final List<BeaconIdentifier> identifiers, final double transmittedPower, final double frequency,
1054             final String bluetoothAddress, final int beaconTypeCode, final int manufacturer, final int serviceUuid,
1055             final String bluetoothName, final double pathLossExponent, final Double transmittedPowerStandardDeviation,
1056             final Double pathLossExponentStandardDeviation, final P position, final Matrix positionCovariance) {
1057         this(identifiers, transmittedPower, frequency, bluetoothAddress, beaconTypeCode, manufacturer, serviceUuid,
1058                 bluetoothName, pathLossExponent, transmittedPowerStandardDeviation, pathLossExponentStandardDeviation,
1059                 position);
1060 
1061         if (positionCovariance != null && (positionCovariance.getRows() != position.getDimensions()
1062                 || positionCovariance.getColumns() != position.getDimensions())) {
1063             throw new IllegalArgumentException();
1064         }
1065         this.positionCovariance = positionCovariance;
1066     }
1067 
1068     /**
1069      * Empty constructor.
1070      */
1071     protected BeaconWithPowerAndLocated() {
1072         super();
1073     }
1074 
1075     /**
1076      * Gets position where beacon is located.
1077      *
1078      * @return position where beacon is located.
1079      */
1080     @Override
1081     public P getPosition() {
1082         return position;
1083     }
1084 
1085     /**
1086      * Gets covariance of inhomogeneous coordinates of current position (if available).
1087      *
1088      * @return covariance of position or null.
1089      */
1090     @Override
1091     public Matrix getPositionCovariance() {
1092         return positionCovariance;
1093     }
1094 }