From b0bc05ed80c029ced53d29a3181b4aaf0fefe185 Mon Sep 17 00:00:00 2001
From: Hangzhi Yu <hangzhi@protonmail.com>
Date: Fri, 10 Jul 2020 21:22:52 +0200
Subject: [PATCH] Add banks

---
 fpga_device_manager/Banks.py            | 43 +++++++++++++++++++++++++
 fpga_device_manager/res/data/banks.json | 20 ++++++++++++
 2 files changed, 63 insertions(+)
 create mode 100644 fpga_device_manager/Banks.py
 create mode 100644 fpga_device_manager/res/data/banks.json

diff --git a/fpga_device_manager/Banks.py b/fpga_device_manager/Banks.py
new file mode 100644
index 0000000..2a63526
--- /dev/null
+++ b/fpga_device_manager/Banks.py
@@ -0,0 +1,43 @@
+"""Module that manages FPGA banks."""
+import json
+from typing import Optional, Tuple, Iterable, Generator, Iterator
+
+_banks = {}
+
+VOLTAGES = {1.2, 1.5, 1.8, 2.5, 3.3}
+
+
+class FPGABank:
+    """Represents a bank on the FPGA."""
+    def __init__(self, name, voltage=3.3):
+        self.name = name
+        self.voltage = voltage
+
+
+def init(filename: str) -> None:
+    """
+    Initializes the FPGA bank database by loading the bank configuration from the specified filename. The file must be
+    in JSON format and contains bank settings, indexed by the FPGA's bank names. 
+
+    :param filename: FPGA bank configuration file
+    """
+    global _banks
+    _banks = {}
+
+    try:
+        with open(filename, "r") as file:
+            bank_data = json.load(file)
+
+        for bank, bank_args in bank_data.items():
+            voltage = bank_args["voltage"]
+            if voltage in VOLTAGES:
+                _banks[bank] = FPGABank(name=bank,
+                                        voltage=voltage)
+            else:
+                raise Exception("invalid voltage")
+
+    except OSError as e:
+        raise Exception("failed to load bank data file: %s" % e)
+
+def get_voltage(bank_id: int) -> float:
+    return _banks.get(str(bank_id), _banks["0"]).voltage
diff --git a/fpga_device_manager/res/data/banks.json b/fpga_device_manager/res/data/banks.json
new file mode 100644
index 0000000..e17e741
--- /dev/null
+++ b/fpga_device_manager/res/data/banks.json
@@ -0,0 +1,20 @@
+{
+  "0": {
+    "voltage": 3.3
+  },
+  "1": {
+    "voltage": 2.5
+  },
+  "2": {
+    "voltage": 3.3
+  },
+  "3": {
+    "voltage": 2.5
+  },
+  "4": {
+    "voltage": 3.3
+  },
+  "5": {
+    "voltage": 3.3
+  }
+}
\ No newline at end of file
-- 
GitLab