]> git.basschouten.com Git - openhab-addons.git/blob
e10104487d3b003189e6cbde102afd93e7e6328a
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2024 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.insteon.internal.driver;
14
15 import java.io.IOException;
16 import java.util.HashMap;
17 import java.util.Map;
18 import java.util.concurrent.ScheduledExecutorService;
19 import java.util.concurrent.locks.ReentrantLock;
20
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;
27
28 /**
29  * The driver class manages the modem port.
30  *
31  * @author Bernd Pfrommer - Initial contribution
32  * @author Rob Nielsen - Port to openHAB 2 insteon binding
33  */
34 @NonNullByDefault
35 public class Driver {
36     private Port port;
37     private String portName;
38     private DriverListener listener;
39     private Map<InsteonAddress, ModemDBEntry> modemDBEntries = new HashMap<>();
40     private ReentrantLock modemDBEntriesLock = new ReentrantLock();
41
42     public Driver(String portName, DriverListener listener, @Nullable SerialPortManager serialPortManager,
43             ScheduledExecutorService scheduler) {
44         this.listener = listener;
45         this.portName = portName;
46
47         port = new Port(portName, this, serialPortManager, scheduler);
48     }
49
50     public boolean isReady() {
51         return port.isRunning();
52     }
53
54     public Map<InsteonAddress, ModemDBEntry> lockModemDBEntries() {
55         modemDBEntriesLock.lock();
56         return modemDBEntries;
57     }
58
59     public void unlockModemDBEntries() {
60         modemDBEntriesLock.unlock();
61     }
62
63     public void addMsgListener(MsgListener listener) {
64         port.addListener(listener);
65     }
66
67     public void removeListener(MsgListener listener) {
68         port.removeListener(listener);
69     }
70
71     public void start() {
72         port.start();
73     }
74
75     public void stop() {
76         port.stop();
77     }
78
79     public void writeMessage(Msg m) throws IOException {
80         port.writeMessage(m);
81     }
82
83     public String getPortName() {
84         return portName;
85     }
86
87     public boolean isRunning() {
88         return port.isRunning();
89     }
90
91     public boolean isMsgForUs(@Nullable InsteonAddress toAddr) {
92         return port.getAddress().equals(toAddr);
93     }
94
95     public void modemDBComplete(Port port) {
96         if (isModemDBComplete()) {
97             listener.driverCompletelyInitialized();
98         }
99     }
100
101     public boolean isModemDBComplete() {
102         return port.isModemDBComplete();
103     }
104
105     public void disconnected() {
106         listener.disconnected();
107     }
108 }