SoftwareSerial inverse_logic initial state of TX

The library code:

void SoftwareSerial::setTX(uint8_t tx)
{
  pinMode(tx, OUTPUT);
  digitalWrite(tx, HIGH);
...

void SoftwareSerial::setRX(uint8_t rx)
{
  pinMode(rx, INPUT);
  if (!_inverse_logic)
    digitalWrite(rx, HIGH);  // pullup for normal logic!

This is leading to a long high pulse on the tx pin which causes my receiving device (a barcode scanner) to hang immediately. A workaround is to do this in my code:

   SoftwareSerial barcode =  SoftwareSerial(/*rx*/ 3, /*tx*/ 2, /*inverse*/ true);
   barcode.begin(1200);
   digitalWrite(2, 0);

In my opinion, the library should have the same conditional in setTX as it does in setRX.

Hmm, yes, but I believe the TX line sits high until it goes low for a start bit.
Normal Rx looks for that low to start the timing to a middle of a bit.

You are using parts like MAX232 on both ends to send & receive +/-3V to +/-5V signals?

This is in inverted mode, so I believe the receiver is mistaking the high for a '0' start bit that never ends.

My device talks 5V serial so I just connected it directly. Besides my workaround working, the other evidence was that the barcode scanner actually paused its flashing light when TX was left high.