diff options
Diffstat (limited to 'libraries/GSM/examples/Tools/PinManagement')
| -rw-r--r-- | libraries/GSM/examples/Tools/PinManagement/PinManagement.ino | 168 | 
1 files changed, 168 insertions, 0 deletions
diff --git a/libraries/GSM/examples/Tools/PinManagement/PinManagement.ino b/libraries/GSM/examples/Tools/PinManagement/PinManagement.ino new file mode 100644 index 0000000..654d1b8 --- /dev/null +++ b/libraries/GSM/examples/Tools/PinManagement/PinManagement.ino @@ -0,0 +1,168 @@ +/* +  + This example enables you to change or remove the PIN number of  + a SIM card inserted into a GSM shield. +  + Circuit: + * GSM shield + * SIM card +  + Created 12 Jun 2012 + by David del Peral +  + This example code is part of the public domain  +  + http://arduino.cc/en/Tutorial/GSMToolsPinManagement +  + */ + +// libraries +#include <GSM.h> + +// pin manager object +GSMPIN PINManager; + +// save input in serial by user +String user_input = ""; + +// authenticated with PIN code +boolean auth = false; + +// serial monitor result messages +String oktext = "OK"; +String errortext = "ERROR"; + +void setup() +{ +  // initialize serial communications and wait for port to open: +  Serial.begin(9600); +  while (!Serial) { +    ; // wait for serial port to connect. Needed for Leonardo only +  } +   +  Serial.println("Change PIN example\n"); +  PINManager.begin(); +   +  // check if the SIM have pin lock +  while(!auth){ +    int pin_query = PINManager.isPIN(); +    if(pin_query == 1) +    { +      // if SIM is locked, enter PIN code +      Serial.print("Enter PIN code: "); +      user_input = readSerial(); +      // check PIN code +      if(PINManager.checkPIN(user_input) == 0) +      { +        auth = true; +        PINManager.setPINUsed(true); +        Serial.println(oktext); +      } +      else +      {   +        // if PIN code was incorrected +        Serial.println("Incorrect PIN. Remember that you have 3 opportunities."); +      } +    } +    else if(pin_query == -1) +    { +      // PIN code is locked, user must enter PUK code +      Serial.println("PIN locked. Enter PUK code: "); +      String puk = readSerial(); +      Serial.print("Now, enter a new PIN code: "); +      user_input = readSerial(); +      // check PUK code +      if(PINManager.checkPUK(puk, user_input) == 0) +      { +        auth = true; +        PINManager.setPINUsed(true); +        Serial.println(oktext); +      } +      else +      { +        // if PUK o the new PIN are incorrect +        Serial.println("Incorrect PUK or invalid new PIN. Try again!."); +      } +    } +    else if(pin_query == -2) +    { +      // the worst case, PIN and PUK are locked +      Serial.println("PIN & PUK locked. Use PIN2/PUK2 in a mobile phone."); +      while(true); +    } +    else +    { +      // SIM does not requires authetication  +      Serial.println("No pin necessary."); +      auth = true; +    } +  } +   +  // start GSM shield +  Serial.print("Checking register in GSM network..."); +  if(PINManager.checkReg() == 0) +    Serial.println(oktext); +  // if you are connect by roaming +  else if(PINManager.checkReg() == 1) +    Serial.println("ROAMING " + oktext);   +  else +  { +    // error connection +    Serial.println(errortext); +    while(true); +  } +} + +void loop() +{ +  // Function loop implements pin management user menu +  // Only if you SIM use pin lock, you can change PIN code +  // user_op variables save user option +   +  Serial.println("Choose an option:\n1 - On/Off PIN."); +  if(PINManager.getPINUsed()) +    Serial.println("2 - Change PIN."); +  String user_op = readSerial(); +  if(user_op == "1") +  { +    Serial.println("Enter your PIN code:"); +    user_input = readSerial(); +    // activate/deactivate PIN lock +    PINManager.switchPIN(user_input); +  } +  else if(user_op == "2" & PINManager.getPINUsed()) +  { +    Serial.println("Enter your actual PIN code:"); +    String oldPIN = readSerial(); +    Serial.println("Now, enter your new PIN code:"); +    String newPIN = readSerial(); +    // change PIN +    PINManager.changePIN(oldPIN, newPIN); +  } +  else +  { +    Serial.println("Incorrect option. Try again!."); +  } +  delay(1000); +} + +/* +  Read input serial + */ +String readSerial() +{ +  String text = ""; +  while(1) +  { +    while (Serial.available() > 0) +    { +      char inChar = Serial.read(); +      if (inChar == '\n') +      { +        return text; +      } +      if(inChar!='\r') +        text += inChar; +    } +  } +}  | 
