From 872b2dd0afab7ff3e9f09fd7dfc4545d8ec6d015 Mon Sep 17 00:00:00 2001 From: Bastian Bloessl Date: Thu, 12 Oct 2017 16:24:45 +0100 Subject: [PATCH] python frame utilities --- python/CMakeLists.txt | 1 + python/__init__.py | 1 + python/utils.py | 52 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 python/utils.py diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 1e6bd6d..22a2a83 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -29,6 +29,7 @@ endif() GR_PYTHON_INSTALL( FILES __init__.py + utils.py DESTINATION ${GR_PYTHON_DIR}/ieee802_11 ) diff --git a/python/__init__.py b/python/__init__.py index 6d4bcb4..90d9535 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -35,6 +35,7 @@ if _RTLD_GLOBAL != 0: # import swig generated symbols into the test namespace from ieee802_11_swig import * +from utils import * # import any pure python here # diff --git a/python/utils.py b/python/utils.py new file mode 100644 index 0000000..0d2c709 --- /dev/null +++ b/python/utils.py @@ -0,0 +1,52 @@ + +def encoding_to_parameters(encoding): + + encodings = [ + {"bpsc": 1, "cbps": 48, "dbps": 24}, + {"bpsc": 1, "cbps": 48, "dbps": 36}, + {"bpsc": 2, "cbps": 96, "dbps": 48}, + {"bpsc": 2, "cbps": 96, "dbps": 72}, + {"bpsc": 4, "cbps": 192, "dbps": 96}, + {"bpsc": 4, "cbps": 192, "dbps": 144}, + {"bpsc": 6, "cbps": 288, "dbps": 192}, + {"bpsc": 6, "cbps": 288, "dbps": 216} + ] + + enc = encodings[encoding] + + return enc["bpsc"], enc["cbps"], enc["dbps"] + + +def payload_to_symbols(payload, encoding): + + bpsc, cbps, dbps = encoding_to_parameters(encoding) + + # 24 header + 4 crc + payload + data_byte = 24 + 4 + payload + symbols = int(round((16 + data_byte * 8 + 6) / float(dbps) + 0.5)) + + return symbols + 5 + + +def mac_payload_to_payload(payload): + return payload - 28 + + +def payload_to_mac_payload(payload): + return payload + 28 + + +def payload_to_samples(payload, encoding): + return payload_to_symbols(payload, encoding) * 80 + 1 + + +def symbols_to_payload(symbols, encoding): + + bpsc, cbps, dbps = encoding_to_parameters(encoding) + + + bytes = (((symbols - 5) * dbps) - 16 - 6) / 8 + + assert(bytes > 28) + + return bytes - 24 - 4