@@ -46,7 +46,6 @@ volatile uint8_t SoftwareSerial::_receive_buffer_head = 0;
46
46
//
47
47
// Globals
48
48
//
49
- uint8_t txPin;
50
49
uint8_t rxPin;
51
50
uint16_t bitDelay;
52
51
uint16_t rxIntraBitDelay;
@@ -95,8 +94,16 @@ bool SoftwareSerial::listen()
95
94
bufferOverflow = false ;
96
95
_receive_buffer_head = _receive_buffer_tail = 0 ;
97
96
active_object = this ;
98
-
99
- setRxIntMsk (true );
97
+ rxPin = _receivePin;
98
+ if (invertedLogic)
99
+ {
100
+ attachInterrupt (rxPin, recv, HIGH);
101
+ }
102
+ else
103
+ {
104
+ attachInterrupt (rxPin, recv, LOW);
105
+ }
106
+
100
107
return true ;
101
108
}
102
109
@@ -108,8 +115,8 @@ bool SoftwareSerial::stopListening()
108
115
{
109
116
if (active_object == this )
110
117
{
111
- setRxIntMsk (false );
112
118
active_object = NULL ;
119
+ detachInterrupt (rxPin);
113
120
return true ;
114
121
}
115
122
return false ;
@@ -230,9 +237,9 @@ SoftwareSerial::SoftwareSerial(uint32_t receivePin, uint32_t transmitPin, bool i
230
237
{
231
238
invertedLogic = inverse_logic;
232
239
setTX (transmitPin);
233
- txPin = transmitPin;
240
+ _transmitPin = transmitPin;
234
241
setRX (receivePin);
235
- rxPin = receivePin;
242
+ _receivePin = receivePin;
236
243
}
237
244
238
245
//
@@ -313,24 +320,9 @@ void SoftwareSerial::begin(long speed)
313
320
pinMode (_DEBUG_PIN1, OUTPUT);
314
321
pinMode (_DEBUG_PIN2, OUTPUT);
315
322
#endif
316
- digitalRead (rxPin);
317
- if (invertedLogic)
318
- {
319
- attachInterrupt (rxPin, recv, HIGH);
320
- }
321
- else
322
- {
323
- attachInterrupt (rxPin, recv, LOW);
324
- }
325
-
326
323
listen ();
327
324
}
328
325
329
- void SoftwareSerial::setRxIntMsk (bool enable)
330
- {
331
-
332
- }
333
-
334
326
void SoftwareSerial::end ()
335
327
{
336
328
stopListening ();
@@ -380,29 +372,29 @@ size_t SoftwareSerial::write(uint8_t b)
380
372
381
373
// Write the start bit
382
374
if (invertedLogic)
383
- digitalWrite (txPin , HIGH);
375
+ digitalWrite (_transmitPin , HIGH);
384
376
else
385
- digitalWrite (txPin , LOW);
377
+ digitalWrite (_transmitPin , LOW);
386
378
387
379
delayTicks (delay);
388
380
389
381
// Write each of the 8 bits
390
382
for (uint8_t i = 8 ; i > 0 ; --i)
391
383
{
392
384
if (b & 1 ) // choose bit
393
- digitalWrite (txPin , HIGH);
385
+ digitalWrite (_transmitPin , HIGH);
394
386
else
395
- digitalWrite (txPin , LOW);
387
+ digitalWrite (_transmitPin , LOW);
396
388
397
389
delayTicks (delay);
398
390
b >>= 1 ;
399
391
}
400
392
401
393
// restore pin to natural state
402
394
if (invertedLogic)
403
- digitalWrite (txPin , LOW);
395
+ digitalWrite (_transmitPin , LOW);
404
396
else
405
- digitalWrite (txPin , HIGH);
397
+ digitalWrite (_transmitPin , HIGH);
406
398
407
399
interrupts ();
408
400
delayTicks (delay);
0 commit comments