?? initmodem.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 + -