summaryrefslogtreecommitdiffstats
path: root/src/target/trx_toolkit/fake_pm.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/target/trx_toolkit/fake_pm.py')
-rw-r--r--src/target/trx_toolkit/fake_pm.py66
1 files changed, 45 insertions, 21 deletions
diff --git a/src/target/trx_toolkit/fake_pm.py b/src/target/trx_toolkit/fake_pm.py
index 840b4e40..1992f8d3 100644
--- a/src/target/trx_toolkit/fake_pm.py
+++ b/src/target/trx_toolkit/fake_pm.py
@@ -2,9 +2,9 @@
# -*- coding: utf-8 -*-
# TRX Toolkit
-# Power measurement emulation for BB
+# Power measurement emulation
#
-# (C) 2017 by Vadim Yanitskiy <axilirator@gmail.com>
+# (C) 2017-2018 by Vadim Yanitskiy <axilirator@gmail.com>
#
# All Rights Reserved
#
@@ -25,29 +25,53 @@
from random import randint
class FakePM:
- # Freq. list for good power level
- bts_list = []
+ """ Power measurement emulation for fake transceivers.
- def __init__(self, noise_min, noise_max, bts_min, bts_max):
- # Save power level ranges
+ There is no such thing like RF signal level in fake Um-interface,
+ so we need to emulate this. The main idea is to have a list of
+ all running and idle transceivers. As soon as a measurement
+ request is received, FakePM will attempt to find a running
+ transceiver on a given frequency.
+
+ The result of such "measurement" is a random RSSI value
+ in one of the following ranges:
+
+ - trx_min ... trx_max - if at least one TRX was found,
+ - noise_min ... noise_max - no TRX instances were found.
+
+ FIXME: it would be great to average the rate of bursts
+ and indicated power / attenuation values for all
+ matching transceivers, so "pure traffic" ARFCNs
+ would be handled properly.
+
+ """
+
+ def __init__(self, noise_min, noise_max, trx_min, trx_max):
+ # Init list of transceivers
+ self.trx_list = []
+
+ # RSSI randomization ranges
self.noise_min = noise_min
self.noise_max = noise_max
- self.bts_min = bts_min
- self.bts_max = bts_max
+ self.trx_min = trx_min
+ self.trx_max = trx_max
+
+ @property
+ def rssi_noise(self):
+ return randint(self.noise_min, self.noise_max)
- def measure(self, bts):
- if bts in self.bts_list:
- return randint(self.bts_min, self.bts_max)
- else:
- return randint(self.noise_min, self.noise_max)
+ @property
+ def rssi_trx(self):
+ return randint(self.trx_min, self.trx_max)
- def update_bts_list(self, new_list):
- self.bts_list = new_list
+ def measure(self, freq):
+ # Iterate over all known transceivers
+ for trx in self.trx_list:
+ if not trx.running:
+ continue
- def add_bts_list(self, add_list):
- self.bts_list += add_list
+ # Match by given frequency
+ if trx.tx_freq == freq:
+ return self.rssi_trx
- def del_bts_list(self, del_list):
- for item in del_list:
- if item in self.bts_list:
- self.bts_list.remove(item)
+ return self.rssi_noise