Hilo GPRS en arduino mega

Buenas, he puesto el modulo de GPRS de Cooking-hacks en el arduino Mega, he sacado los pines RX y TX al puerto serie 3 del arduino, para poder debugear el codigo bien.

No he conseguido transmitir las respuestas del serial 3 (ue deberia responder OK al comando AT) a serial de arduino, el modulo funciona correctamente cunaod lo alimento con una fuente externa y lo uso en modo gateway en un arduino UNO.
Desde el arduino mega tampoco hace correctamente el ATD.

Por lo que parece Serial3.available() nunca devuelve un valor mayor que 0.

Os dejo el codigo a ver is podeis echarme una mano:

int led = 13;
int onModulePin = 2; // the pin to switch on the module (without press on button)

int timesToSend = 5; // Numbers of calls to make
int count = 0;

char inData[20]={'\0'}; // Allocate some space for the string
char inChar=-1; // Where to store the character read
byte index = 0; // Index into array; where to store the character

void testModule(){
Serial.flush();
Serial3.flush();
}

void switchModule(){
Serial.println("Encendiendo el modulo");
digitalWrite(onModulePin,HIGH);
delay(2000);
digitalWrite(onModulePin,LOW);
}

char * serial_read(void) {
Serial.println("entrando en serial_read");

inData[0]=0;
index=0;

while (Serial3.available() > 0) // Don't read unless
// there you know there is data
{
Serial.println("Serial3.available > 0");
if(index < 19) // One less than the size of the array
{
inChar = Serial3.read(); // Read a character
inData[index] = inChar; // Store it
index++; // Increment where to write next
inData[index] = '\0'; // Null terminate the string
}
}

return inData;

}

void setup(){

Serial.begin(9600); // the GPRS baud rate
Serial3.begin(9600);
Serial.println("Entrando en el setup");
delay(2000);
pinMode(led, OUTPUT);
pinMode(onModulePin, OUTPUT);
switchModule(); // swith the module ON

for (int i=0;i<5;i++){
delay(5000);
}
Serial.println("Saliendo del setup");
}

void loop(){

while (count < timesToSend){
delay(1500);
Serial.println("AT");
Serial3.println(serial_read());
Serial.println("Mandando AT+CREG");
Serial3.println("AT+CREG?");
Serial.println(serial_read());
Serial.println("Mandando ATD666666666;"); // ********* is the number to call
Serial3.println("ATD666666666;"); // ********* is the number to call
delay(12000);
Serial.println("Mandando ATH"); // disconnect the call
Serial3.println("ATH"); // disconnect the call

delay(5000);

count++;
}
}