+ String am2901CellSuffix = getAm2901CellSuffix(r);
+ for (int i = 0; i < 16; i += 4)
+ {
+ String hlsID = String.format("am2901_%d-%d.%s", (i + 3), i, am2901CellSuffix);
+ am2900.setHighLevelState(hlsID, value.subVector(i, i + 4));
+ }
+ }
+
+ @Override
+ public void addRegisterListener(Register r, Consumer<BitVector> listener)
+ {
+ Map<Consumer<BitVector>, Consumer<Object>> modelListenersPerRegisterListener = modelListenersPerRegisterListenerPerRegister
+ .computeIfAbsent(r, k -> new HashMap<>());
+ if (modelListenersPerRegisterListener.containsKey(listener))
+ return;
+
+ Consumer<Object> modelListener = v -> listener.accept(getRegister(r));
+ String am2901CellSuffix = getAm2901CellSuffix(r);
+ for (int i = 0; i < 16; i += 4)
+ {
+ String hlsID = String.format("am2901_%d-%d.%s", (i + 3), i, am2901CellSuffix);
+ am2900.addHighLevelStateListener(hlsID, modelListener);
+ }
+ }
+
+ @Override
+ public void removeRegisterListener(Register r, Consumer<BitVector> listener)
+ {
+ Map<Consumer<BitVector>, Consumer<Object>> modelListenersPerRegisterListener = modelListenersPerRegisterListenerPerRegister.get(r);
+ if (modelListenersPerRegisterListener == null)
+ return;
+
+ Consumer<Object> modelListener = modelListenersPerRegisterListener.get(listener);
+ if (modelListener == null)
+ return;