2 * Copyright (c) 2010-2024 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.insteon.internal.driver;
15 import java.io.IOException;
16 import java.util.HashMap;
18 import java.util.concurrent.ScheduledExecutorService;
19 import java.util.concurrent.locks.ReentrantLock;
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.eclipse.jdt.annotation.Nullable;
23 import org.openhab.binding.insteon.internal.device.InsteonAddress;
24 import org.openhab.binding.insteon.internal.message.Msg;
25 import org.openhab.binding.insteon.internal.message.MsgListener;
26 import org.openhab.core.io.transport.serial.SerialPortManager;
29 * The driver class manages the modem port.
31 * @author Bernd Pfrommer - Initial contribution
32 * @author Rob Nielsen - Port to openHAB 2 insteon binding
37 private String portName;
38 private DriverListener listener;
39 private Map<InsteonAddress, ModemDBEntry> modemDBEntries = new HashMap<>();
40 private ReentrantLock modemDBEntriesLock = new ReentrantLock();
42 public Driver(String portName, DriverListener listener, @Nullable SerialPortManager serialPortManager,
43 ScheduledExecutorService scheduler) {
44 this.listener = listener;
45 this.portName = portName;
47 port = new Port(portName, this, serialPortManager, scheduler);
50 public boolean isReady() {
51 return port.isRunning();
54 public Map<InsteonAddress, ModemDBEntry> lockModemDBEntries() {
55 modemDBEntriesLock.lock();
56 return modemDBEntries;
59 public void unlockModemDBEntries() {
60 modemDBEntriesLock.unlock();
63 public void addMsgListener(MsgListener listener) {
64 port.addListener(listener);
67 public void removeListener(MsgListener listener) {
68 port.removeListener(listener);
79 public void writeMessage(Msg m) throws IOException {
83 public String getPortName() {
87 public boolean isRunning() {
88 return port.isRunning();
91 public boolean isMsgForUs(@Nullable InsteonAddress toAddr) {
92 return port.getAddress().equals(toAddr);
95 public void modemDBComplete(Port port) {
96 if (isModemDBComplete()) {
97 listener.driverCompletelyInitialized();
101 public boolean isModemDBComplete() {
102 return port.isModemDBComplete();
105 public void disconnected() {
106 listener.disconnected();