Sending commands to GSM+GPS card

The code:

#include <SPI.h> // 
// Serial used for debug (D0, D1)
// Serial1 used for GPS/GSM module (D2,D3)
byte inMonitor;
byte inGPS;
char dataGPS[] = {46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,};

// Assign pins
byte pd3 = 4; // to GSM/GPS
byte pd4 = 5; // to GSM/GPS
byte pd5 = 6; // to GSM/GPS
byte cs1 = 7; // 
byte heat1Pin = 8; // 
byte c3 = 9; // 
byte cs0 = 10; // 
byte pressurePin = A0;  // 
byte stat1 = 15; // 
byte stat1State;
byte stat2 = 16; // 
byte stat2State;
byte can_int = 17; // 
byte can_csd = 18; // 
byte v3Pin = A5; // 
byte v1Pin = A6; //
byte v2Pin = A7; // 
byte oe = 22; // 
byte cs2 = 23; // 
byte c2 = 24; // 
byte c1 = 25; // 
byte c0 = 26; // 
byte fanPin = 27; // 
byte coolPin = 28; // 
byte heatPin = 29; //
byte cool1Pin = 30; // 
byte csPin = 31; // 

byte x=0; // chip counter
void setup(){

  // GPS/GSM pins
  pinMode (pd3, OUTPUT);
  pinMode (pd4, OUTPUT);
  pinMode (pd5, OUTPUT);
  // Output GSM Timing
  digitalWrite (pd5, HIGH);
  delay(1500);
  digitalWrite (pd5, LOW);

  digitalWrite (pd3, HIGH);
  digitalWrite (pd4, HIGH);


  Serial.begin(9600); // for debug
  Serial1.begin (9600); // for gps/gsm control
  // check incoming messages
  //NORMAL POWER DOWN - 17 - need a reset if get this
  // 
  //RDY
  //+CFUN: 1 - 8
  //+CPIN: READY - 12
  //+PACSP: 1 - 9
  //Call Ready - 10    
  //GPS Ready - 9 - these two may be swapped
  delay(2000);
  Serial.println("");
  Serial.print ("Starting GPS/GSM 'warmup' delay");
  Serial.print(" ");
  for (x=1; x<=12; x=x+1){
    Serial.print (x);
    delay(1000);
  }
  Serial.println("");
  Serial.println ("GPS ready for AT?");
  byte y =0;
  for (x=0; x<100; x=x+1){
    inGPS = Serial1.read();
    // 13, 10, 32 ignore CR, LF, Space
    if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
      dataGPS[y] = inGPS;
      y=y+1;
    } 
  }

  for (x=0; x<100; x=x+1){
    Serial.print (dataGPS[x]);
  }
  Serial.println("");

  if ((dataGPS[0] == 'N') || (dataGPS[0] == 255)){
    Serial.println("need a reset, find a way");
    while(1);
  }
  Serial.println("");
  if((dataGPS[0] == 'R') || (dataGPS[0] == '+') ){
    Serial.println("yes - sending AT");
    Serial1.write('a');
    Serial1.write('t');
    Serial1.write(13);
    Serial1.write(10);
  }
  Serial.print("received: ");
  y = 0;
  delay(2000);
  while (Serial1.available()>0){
    inGPS = Serial1.read();
    // 13, 10, 32 ignore CR, LF, Space
    if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
      dataGPS[y] = inGPS;
      y=y+1;
    }
  }
  // print response
  for (x=0; x<100; x=x+1){
    Serial.print (dataGPS[x]);
  }
  Serial.println("");
  Serial.println("");
    Serial.println("sending at+cgpspwr=1");
    Serial1.write('a');
    Serial1.write('t');
    Serial1.write('+');  
    Serial1.write('c');  
    Serial1.write('g');
    Serial1.write('p');
    Serial1.write('s');
    Serial1.write('p');
    Serial1.write('w');
    Serial1.write('r');
    Serial1.write('=');
    Serial1.write('1');
    Serial1.write(13);
    Serial1.write(10);

  y = 0;
  delay(2000);
  while (Serial1.available()>0){
    inGPS = Serial1.read();
    // 13, 10, 32 ignore CR, LF, Space
    if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
      dataGPS[y] = inGPS;
      y=y+1;
    }
  }
  // print response
  Serial.print("received: ");
  for (x=0; x<100; x=x+1){
    Serial.print (dataGPS[x]);
  }
  Serial.println("");
  Serial.println("");
    Serial.println("sending at+cgpsrst=1");
    Serial1.write('a');
    Serial1.write('t');
    Serial1.write('+');  
    Serial1.write('c');  
    Serial1.write('g');
    Serial1.write('p');
    Serial1.write('s');
    Serial1.write('r');
    Serial1.write('s');
    Serial1.write('t');
    Serial1.write('=');
    Serial1.write('1');
    Serial1.write(13);
    Serial1.write(10);
 
  y = 0;
  delay(2000);
  while (Serial1.available()>0){
    inGPS = Serial1.read();
    // 13, 10, 32 ignore CR, LF, Space
    if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
      dataGPS[y] = inGPS;
      y=y+1;
    }
  }
  // print response
  Serial.print("received: ");
  for (x=0; x<100; x=x+1){
    Serial.print (dataGPS[x]);
  }
  Serial.println("");
  Serial.println("");
    Serial.println("sending at+cgpsstatus?");
    Serial1.write('a');
    Serial1.write('t');
    Serial1.write('+');  
    Serial1.write('c');  
    Serial1.write('g');
    Serial1.write('p');
    Serial1.write('s');
    Serial1.write('s');
    Serial1.write('t');
    Serial1.write('a');
    Serial1.write('t');
    Serial1.write('u');
    Serial1.write('s');
    Serial1.write('?');
    Serial1.write(13);
    Serial1.write(10);
 
  y = 0;
  delay(4000);
  while (Serial1.available()>0){
    inGPS = Serial1.read();
    // 13, 10, 32 ignore CR, LF, Space
    if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
      dataGPS[y] = inGPS;
      y=y+1;
    }
  }
  // print response
  Serial.print("received: ");
  for (x=0; x<100; x=x+1){
    Serial.print (dataGPS[x]);
  }
  Serial.println("");
  Serial.println("");

    Serial.println("sending at+cgpsinf=4");
    Serial1.write('a');
    Serial1.write('t');
    Serial1.write('+');  
    Serial1.write('c');  
    Serial1.write('g');
    Serial1.write('p');
    Serial1.write('s');
    Serial1.write('i');
    Serial1.write('n');
    Serial1.write('f');
    Serial1.write('=');
    Serial1.write('4');
    Serial1.write(13);
    Serial1.write(10);
 
  Serial.println("");
  y = 0;
  delay(2000);
  while (Serial1.available()>0){
    inGPS = Serial1.read();
    // 13, 10, 32 ignore CR, LF, Space
    if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
      dataGPS[y] = inGPS;
      y=y+1;
    }
  }
  // print response
  Serial.print("received: ");
  for (x=0; x<100; x=x+1){
    Serial.print (dataGPS[x]);
  }

  Serial.println("");
  Serial.println("setup complete");
}
void loop(){
// GPS test code

  if (Serial.available()>0){
    inMonitor = Serial.read();
    Serial1.write(inMonitor);
  }

  if (Serial1.available()>0){
    inGPS = Serial1.read();
    Serial.write(inGPS);
  }
}

The response:

Starting GPS/GSM 'warmup' delay 123456789101112
GPS ready for AT?
+CFUN:1+CPIN:READY+PACSP:1CallReadyGPSReÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.......................

yes - sending AT
received: atOKN:1+CPIN:READY+PACSP:1CallReadyGPSReÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.......................

sending at+cgpspwr=1
received: at+cgpspwr=1OKEADY+PACSP:1CallReadyGPSReÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.......................

sending at+cgpsrst=1
received: at+cgpsrst=1OKEADY+PACSP:1CallReadyGPSReÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.......................

sending at+cgpsstatus?
received: at+cgpsstatus?+CGPSSTATUS:LocationNotFixOKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.......................

sending at+cgpsinf=4

received: at+cgpsinf=44,0.000000,N,0.000000,E,012650.000,V,AOKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.......................
setup complete
manually sending
at

OK
at+cgpspwr=1 

OK
 at+cgpsrst=1 

OK
at+cgpsstatus?

+CGPSSTATUS: Location Unknown

OK
at+cgpsinf=4

4,4222.059991,N,7131.702272,W,012809.633,A,A
OK

Why do some commands get mimicked, and some only mimicked when the command is sent from within a sketch?

Hmm, I guess they all do, it just looks funny sometimes.

Ok, never mind, I think I'm all set. On to next step ...