SoftwareSerial mySerial(2, 3); // RX, TX
You told the SoftwareSerial instance that it owns pins 2 and 3.
pinMode(2, INPUT);
pinMode(3, OUTPUT);
digitalWrite(3, HIGH); //set high as per the data sheet recommendation to mitigate spurious data
Then you go messing with them. Why? What data sheet are you talking about? The SoftwareSerial instance should be doing this, if it is necessary.
mySerial.write(buffer, len); // Serial.write wants the array pointer and the number of elements
Write a bunch of stuff to the serial port. OK.
if (mySerial.available()>0){
Serial.println(mySerial.read());
Immediately, expect a one character response. Why?
Well, I'm waiting?
C'mon. Hurry up.
I'm not a patient type, either.