@@ -46,6 +46,7 @@ void ESP32UARTChannel::begin(const ChannelConfig& conf)
4646 }
4747
4848 uart_set_pin (_uart_num, tx, rx, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
49+ configureGPIO (conf);
4950
5051 if (conf.isInverted )
5152 uart_set_line_inverse (_uart_num, UART_SIGNAL_TXD_INV | UART_SIGNAL_RXD_INV);
@@ -68,6 +69,27 @@ void ESP32UARTChannel::end()
6869 _uart_q = NULL ;
6970}
7071
72+ void ESP32UARTChannel::configureGPIO (const ChannelConfig& conf)
73+ {
74+ controlPins = conf.pins ;
75+
76+ fnSystem.set_pin_mode (controlPins.rts , gpio_mode_t ::GPIO_MODE_INPUT);
77+ fnSystem.set_pin_mode (controlPins.cts , gpio_mode_t ::GPIO_MODE_OUTPUT);
78+ fnSystem.digital_write (controlPins.cts , DIGI_LOW);
79+
80+ fnSystem.set_pin_mode (controlPins.dtr , gpio_mode_t ::GPIO_MODE_INPUT);
81+ fnSystem.set_pin_mode (controlPins.dsr , gpio_mode_t ::GPIO_MODE_OUTPUT);
82+ fnSystem.digital_write (controlPins.dsr , DIGI_LOW);
83+
84+ fnSystem.set_pin_mode (controlPins.dcd , gpio_mode_t ::GPIO_MODE_OUTPUT);
85+ fnSystem.digital_write (controlPins.dcd , DIGI_HIGH);
86+
87+ fnSystem.set_pin_mode (controlPins.ri , gpio_mode_t ::GPIO_MODE_OUTPUT);
88+ fnSystem.digital_write (controlPins.ri , DIGI_HIGH);
89+
90+ return ;
91+ }
92+
7193void ESP32UARTChannel::updateFIFO ()
7294{
7395 uart_event_t event;
@@ -117,36 +139,46 @@ size_t ESP32UARTChannel::dataOut(const void *buffer, size_t size)
117139 return uart_write_bytes (_uart_num, (const char *)buffer, size);
118140}
119141
142+ bool ESP32UARTChannel::getPin (int pin)
143+ {
144+ if (pin < 0 )
145+ return 0 ;
146+ return fnSystem.digital_read (pin) == DIGI_LOW;
147+ }
148+
149+ void ESP32UARTChannel::setPin (int pin, bool state)
150+ {
151+ if (pin >= 0 )
152+ fnSystem.digital_write (pin, !state);
153+ return ;
154+ }
155+
120156bool ESP32UARTChannel::getDTR ()
121157{
122- #if defined(FUJINET_OVER_USB) || !defined(PIN_RS232_DTR)
123- return 0 ;
124- #else /* FUJINET_OVER_USB */
125- return fnSystem.digital_read (PIN_RS232_DTR) == DIGI_LOW;
126- #endif /* FUJINET_OVER_USB */
158+ return getPin (controlPins.dtr );
127159}
128160
129161void ESP32UARTChannel::setDSR (bool state)
130162{
131- #if !defined(FUJINET_OVER_USB) && defined(PIN_RS232_DSR)
132- fnSystem.digital_write (PIN_RS232_DSR, !state);
133- #endif
134- return ;
163+ setPin (controlPins.dsr , state);
135164}
136165
137166bool ESP32UARTChannel::getRTS ()
138167{
139- #if defined(FUJINET_OVER_USB) || !defined(PIN_RS232_RTS)
140- return 0 ;
141- #else /* FUJINET_OVER_USB */
142- return fnSystem.digital_read (PIN_RS232_RTS) == DIGI_LOW;
143- #endif /* FUJINET_OVER_USB */
168+ return getPin (controlPins.rts );
144169}
145170
146171void ESP32UARTChannel::setCTS (bool state)
147172{
148- #if !defined(FUJINET_OVER_USB) && defined(PIN_RS232_CTS)
149- fnSystem.digital_write (PIN_RS232_CTS, !state);
150- #endif
151- return ;
173+ setPin (controlPins.cts , state);
174+ }
175+
176+ void ESP32UARTChannel::setDCD (bool state)
177+ {
178+ setPin (controlPins.dcd , state);
179+ }
180+
181+ void ESP32UARTChannel::setRI (bool state)
182+ {
183+ setPin (controlPins.ri , state);
152184}
0 commit comments