@@ -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
173186bool 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
0 commit comments