⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initmodem.c

📁 Linux下用C来操作gsm modem, 初始化gsm modem.
💻 C
字号:
/*     
    *   初始化   gsm   modem     
    *     
    *   Author   :   Tengulre   
    *   CreateTime:   2004/04/12   
    *   
    */   
  void   initmodem()   
  {   
      char   command[100];   
      char   answer[500];   
      int   retries=0;   
      int   success=0;   
    
      if   (!   quickinit)   
      {   
          writelogfile(LOG_INFO,"Checking   if   modem   is   ready");   
          retries=0;   
          do   
          {   
              retries++;   
              put_command("\x1A\r",answer,sizeof(answer),5,0);   
              put_command("AT\r",answer,sizeof(answer),50,"OK");   
              if   (strstr(answer,"OK"))   
                  writelogfile(LOG_INFO,"Modem   is   ready");   
              else   
                  writelogfile(LOG_NOTICE,"Modem   is   not   ready,   retry");   
          }   
          while   ((retries<=10)   &&   (!   strstr(answer,"OK")));   
          if   (!   strstr(answer,"OK"))   
          {   
              writelogfile(LOG_ERR,"Modem   is   not   ready   to   answer   commands");   
              alarm_handler(LOG_ERR,"","Modem   is   not   ready   to   answer   commands");   
              exit(2);   
          }   
      }   
    
      if   ((!   quickinit)   &&   pin[0])   
      {   
          writelogfile(LOG_INFO,"Checking   if   modem   needs   PIN");   
          put_command("AT+CPIN?\r",answer,sizeof(answer),50,"+CPIN:");   
          if   (strstr(answer,"+CPIN:   SIM   PIN"))   
          {   
              writelogfile(LOG_NOTICE,"Modem   needs   PIN,   entering   PIN...");   
              sprintf(command,"AT+CPIN=\"%s\"\r",pin);   
              put_command(command,answer,sizeof(answer),300,0);   
              put_command("AT+CPIN?\r",answer,sizeof(answer),50,"+CPIN:");   
              if   (strstr(answer,"+CPIN:   SIM   PIN"))   
              {   
                  writelogfile(LOG_ERR,"Modem   did   not   accept   this   PIN");   
                  alarm_handler(LOG_ERR,"","Modem   did   not   accept   this   PIN");   
                  exit(2);   
              }   
              else   if   (strstr(answer,"+CPIN:   READY"))   
                  writelogfile(LOG_INFO,"PIN   Ready");   
          }   
          if   (strstr(answer,"+CPIN:   SIM   PUK"))   
          {   
              writelogfile(LOG_CRIT,"Your   PIN   is   locked.   Unlock   it   manually");   
              alarm_handler(LOG_CRIT,"","Your   PIN   is   locked.   Unlock   it   manually");   
              exit(2);   
          }   
      }   
    
      if   ((!   quickinit)   &&   initstring[0])   
      {   
          writelogfile(LOG_INFO,"Initializing   modem");   
          put_command(initstring,answer,sizeof(answer),100,"OK");   
          if   (strstr(answer,"ERROR"))   
          {   
              writelogfile(LOG_INFO,"Initializing   modem   (retry)");   
              put_command(initstring,answer,sizeof(answer),100,"OK");       
          }     
          if   (strstr(answer,"OK")==0)   
          {   
              writelogfile(LOG_ERR,"Modem   did   not   accept   the   init   string");   
              alarm_handler(LOG_ERR,"","Modem   did   not   accept   the   init   string");   
              exit(2);   
          }   
      }   
      if   (quickinit   ||   (strcmp(mode,"digicom")==0))   
          success=1;   
      else   
      {   
          writelogfile(LOG_INFO,"Checking   if   Modem   is   registered   to   the   network");   
          success=0;   
          retries=0;   
          do   
          {   
              retries++;   
              put_command("AT+CREG?\r",answer,sizeof(answer),100,0);   
              if   (strstr(answer,"1"))   
              {   
                  writelogfile(LOG_INFO,"Modem   is   registered   to   the   network");   
                  success=1;   
              }   
              else   if   (strstr(answer,"5"))   
              {   
              //   added   by   Thomas   Stoeckel   
              writelogfile(LOG_INFO,"Modem   is   registered   to   a   roaming   partner   network");   
  success=1;   
              }   
              else   if   (strstr(answer,"ERROR"))   
              {   
                  writelogfile(LOG_INFO,"Ignoring   that   modem   does   not   support   +CREG   command.");   
  success=1;   
              }   
              else   if   (strstr(answer,"+CREG:"))   
              {   
                  writelogfile(LOG_NOTICE,"Modem   is   not   registered,   waiting   %i   sec.   before   retrying",errorsleeptime);   
                  sleep(errorsleeptime);   
              }   
              else   
              {   
                  writelogfile(LOG_ERR,"Error:   Unexpected   answer   from   Modem   after   +CREG?");   
  alarm_handler(LOG_ERR,"","Error:   Unexpected   answer   from   Modem   after   +CREG?");   
  break;   
              }   
          }   
          while   ((success==0)&&(retries<10));   
      }   
    
      if   (success==0)   
      {   
          writelogfile(LOG_ERR,"Error:   Modem   is   not   registered   to   the   network");   
          alarm_handler(LOG_ERR,"","Error:   Modem   is   not   registered   to   the   network");   
          exit(3);   
      }   
    
    
      if   ((strcmp(mode,"ascii")==0)   ||   (strcmp(mode,"digicom")==0))   
      {   
          writelogfile(LOG_INFO,"Selecting   ASCII   mode   1");   
          strcpy(command,"AT+CMGF=1\r");   
      }   
      else   
      {   
          writelogfile(LOG_INFO,"Selecting   PDU   mode   0");   
          strcpy(command,"AT+CMGF=0\r");   
      }   
    
      retries=0;   
      success=0;   
      do   
      {   
          retries++;   
          put_command(command,answer,sizeof(answer),50,0);   
          if   (strstr(answer,"ERROR"))   
          {   
              writelogfile(LOG_NOTICE,"Waiting   %i   sec.   before   retrying",errorsleeptime);   
              sleep(errorsleeptime);   
          }   
          else   
              success=1;   
      }   
      while   ((success==0)&&(retries<3));   
    
      if   (success==0)   
      {   
          writelogfile(LOG_ERR,"Error:   Modem   did   not   accept   PDU   mode");   
          alarm_handler(LOG_ERR,"","Error:   Modem   did   not   accept   PDU   mode");   
          exit(3);   
      }   
    
      if   (smsc[0])   
      {   
          writelogfile(LOG_INFO,"Changing   SMSC");   
          sprintf(command,"AT+CSCA=\"+%s\"\r",smsc);   
          put_command(command,answer,sizeof(answer),50,0);   
      }   
    
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -