public void execute() {
   logger.debug("Exec");
   if (commandInternalStatus.equals("check")) {
     Kernel.getSerialConnectionManager().write("AT+CPIN?\r\n");
   } else {
     Kernel.getSerialConnectionManager().write("AT+CPIN=\"" + pinCode + "\"\r\n");
   }
 }
 public boolean isExpected(String s) {
   logger.debug("isExpected(" + s + ") [" + status.toString() + "]");
   switch (status) {
     case WAITING:
       {
         if (s.startsWith("AT+CPIN?")) { // ECHO Pin check
           status = Status.INITIALIZED;
           logger.debug("Echo:" + s);
         } else if (s.startsWith("AT+CPIN=")) { // ECHO Set Pin
           status = Status.ANSWERED;
           logger.debug("Echo:" + s);
         } else {
           logger.warn("[WAITING] Unexpected answer:" + s);
           return false;
         }
         return true;
       }
     case INITIALIZED:
       {
         logger.debug("Answer:" + s);
         if (s.contains("+CPIN: SIM PIN")) { // XmppModem waiting for a PIN
           status = Status.ANSWERED;
           CPIN cmd2 = new CPIN();
           cmd2.setPinCode(pinCode);
           cmd2.commandInternalStatus = "set";
           Kernel.getCommandManager().renewCommand(cmd2);
           logger.debug("Command renewed.");
         } else if (s.contains("READY")) {
           status = Status.ANSWERED;
         } else {
           logger.warn("[INITIALIZED] Unexpected answer:" + s);
           return false;
         }
         return true;
       }
     case ANSWERED:
       {
         if (s.contains("OK")) {
           status = Status.TERMINATED;
           result = Result.OK;
         } else if (s.contains("ERROR")) {
           status = Status.TERMINATED;
           result = Result.ERROR;
         } else {
           logger.warn("[Answered] Unexpected answer:" + s);
           return false;
         }
         return true;
       }
   }
   return false; // To change body of implemented methods use File | Settings | File Templates.
 }