Skip to content

Commit 2ab9e7c

Browse files
committed
Detect if we have input interface
1 parent 0013a4d commit 2ab9e7c

2 files changed

Lines changed: 21 additions & 5 deletions

File tree

drivers/io/waveshare_modbus_relay.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ bool WaveshareRelay::initProperties()
4040
INDI::OutputInterface::initProperties("Relays", 8, "Output");
4141
INDI::InputInterface::initProperties("Digital Inputs", 8, 0, "Input");
4242

43-
setDriverInterface(AUX_INTERFACE | OUTPUT_INTERFACE | INPUT_INTERFACE);
43+
setDriverInterface(AUX_INTERFACE | OUTPUT_INTERFACE);
4444

4545
addAuxControls();
4646

@@ -68,7 +68,9 @@ bool WaveshareRelay::updateProperties()
6868
{
6969
INDI::DefaultDevice::updateProperties();
7070
INDI::OutputInterface::updateProperties();
71-
INDI::InputInterface::updateProperties();
71+
72+
if (m_HaveInput)
73+
INDI::InputInterface::updateProperties();
7274

7375
if (isConnected())
7476
{
@@ -108,6 +110,17 @@ bool WaveshareRelay::Handshake()
108110
// Set only the response timeout. Byte timeout will be handled by the TCP connection
109111
nmbs_set_read_timeout(&nmbs, 1000);
110112

113+
// Check if we have input support
114+
{
115+
nmbs_bitfield inputs_buffer = {0};
116+
m_HaveInput = nmbs_read_discrete_inputs(&nmbs, 0, 8, inputs_buffer) != NMBS_ERROR_NONE;
117+
if (m_HaveInput)
118+
{
119+
setDriverInterface(AUX_INTERFACE | OUTPUT_INTERFACE | INPUT_INTERFACE);
120+
syncDriverInfo();
121+
}
122+
}
123+
111124
uint16_t output;
112125
err = nmbs_read_holding_registers(&nmbs, 0x8000, 1, &output);
113126
if (err == NMBS_ERROR_NONE)
@@ -142,7 +155,7 @@ bool WaveshareRelay::ISNewText(const char *dev, const char *name, char *texts[],
142155
return true;
143156

144157
// Check Input Properties
145-
if (INDI::InputInterface::processText(dev, name, texts, names, n)) // Added this line
158+
if (m_HaveInput && INDI::InputInterface::processText(dev, name, texts, names, n))
146159
return true;
147160

148161
return INDI::DefaultDevice::ISNewText(dev, name, texts, names, n);
@@ -173,7 +186,8 @@ bool WaveshareRelay::ISNewNumber(const char *dev, const char *name, double value
173186
bool WaveshareRelay::saveConfigItems(FILE * fp)
174187
{
175188
INDI::OutputInterface::saveConfigItems(fp);
176-
INDI::InputInterface::saveConfigItems(fp);
189+
if (m_HaveInput)
190+
INDI::InputInterface::saveConfigItems(fp);
177191
return INDI::DefaultDevice::saveConfigItems(fp);
178192
}
179193

@@ -185,7 +199,8 @@ void WaveshareRelay::TimerHit()
185199
if (!isConnected())
186200
return;
187201

188-
UpdateDigitalInputs();
202+
if (m_HaveInput)
203+
UpdateDigitalInputs();
189204
UpdateDigitalOutputs();
190205

191206

drivers/io/waveshare_modbus_relay.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class WaveshareRelay : public INDI::DefaultDevice, public INDI::OutputInterface,
7373
Connection::TCP *tcpConnection {nullptr};
7474
INDI::PropertyText FirmwareVersionTP {1};
7575
int PortFD{-1};
76+
bool m_HaveInput {false};
7677
nmbs_t nmbs;
7778

7879
};

0 commit comments

Comments
 (0)