/
RFTransmitterObject.ts
81 lines (73 loc) · 2.5 KB
/
RFTransmitterObject.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { RFObject } from './RFObject';
import { SerializableObject, SerializableMember, DataObject, LengthUnit } from '@openhps/core';
@SerializableObject()
export class RFTransmitterObject extends DataObject implements RFObject {
/**
* RF transmission power
*/
@SerializableMember()
txPower: number;
private _calibratedRSSI: number;
private _environmentFactor: number;
/**
* RF transmission frequency
*/
@SerializableMember()
frequency: number;
constructor(uid?: string, calibratedRSSI?: number, txPower?: number) {
super(uid);
this.calibratedRSSI = calibratedRSSI;
this.txPower = txPower;
}
/**
* Get the calibrated rssi at 1 meter
* @returns {number} Calibrated RSSI
*/
@SerializableMember()
get calibratedRSSI(): number {
return this._calibratedRSSI ?? this.txPower;
}
/**
* Set the calibrated rssi at 1 meter
* @param {number} calibratedRSSI Calibrated RSSI > 0
*/
set calibratedRSSI(calibratedRSSI: number) {
if (calibratedRSSI < 0) {
this._calibratedRSSI = calibratedRSSI;
}
}
/**
* Get the calibrated RSSI at a specific distance
* @param {number} distance Distance
* @param {LengthUnit} [unit] Length Unit
* @returns {number} RSSI at distance
*/
getCalibratedRSSI(distance: number, unit: LengthUnit = LengthUnit.METER): number {
const distanceInMeter = unit.convert(distance, LengthUnit.METER);
return Math.ceil(this.calibratedRSSI - (1 - distanceInMeter) * -41);
}
/**
* Set the calibrated RSSI at a specific distance
* @param {number} rssi Received signal strength indicator
* @param {number} distance Distance
* @param {LengthUnit} [unit] Length Unit
* @returns {RFTransmitterObject} This instance
*/
setCalibratedRSSI(rssi: number, distance: number, unit: LengthUnit = LengthUnit.METER): this {
const distanceInMeter = unit.convert(distance, LengthUnit.METER);
this.calibratedRSSI = Math.ceil(rssi + (1 - distanceInMeter) * -41);
return this;
}
/**
* Set the environment factor of the beacon.
* Nodes such as [[RelativeRSSIProcessing]] can override this.
* @returns {number} environment factor
*/
@SerializableMember()
get environmentFactor(): number {
return this._environmentFactor;
}
set environmentFactor(environmentFactor: number) {
this._environmentFactor = environmentFactor;
}
}