вот человек то ты ленивый
main()
{
prs(0);
prtfdir(2);
prtf("\n Starting embedded application...");
wd(0,10000); /*сторожевой таймер на 500сек (50мсек 1тик).*/
CHECK_START_SIM(); /*после старта проверяем с какой СИМ будем работать*/
CHECK_REGISTRATION(); /*проверка GSM регистрации и состояния СИМ*/
prtf("\n");prtf("\n Starting SMS subsystem...");prtf("\n");
smsi(1,1); /*Инициализируем подсистему SMS*/
while(1)
{
CHECK_REGISTRATION(); /*проверка GSM регистрации и состояния СИМ*/
CHECK_IO_ADC_STATE();
CHECK_INCOMING_SMS();
wd(1,0); /* kick the watchdog */
}
prtf("\n End embedded application...");
prtf("\n");
wd(0,0); /*остановка сторожевого таймера*/
}
CHECK_INCOMING_SMS()
{
int sms_slot=0; /*номер слота для хранения SMS*/
char smsadrs[160]; /*буфер для номера абонента*/
char SMS[160]; /*буфер для SMS*/
int smserr;
int resCmdSize;
char resCmd[33];
char ID[6]="1234";
char adc[6];
prtf("\n");prtf("CHECK NEW SMS ARRIVED ... \n"); prtf("\n");
sms_slot=smsrs(); /*Находим в памяти первое непрочитанное SMS*/
if (sms_slot != 0)
{
prtf("NEW SMS ARRIVED!");
smserr = smsi(0,0);
smsra(smsadrs, 160, sms_slot); /*Определяем номер абонента*/
/*Создаем SMS ответ с данными и посылаем
на полученный номер телеметрическую информацию*/
prtf("PREPARING REPLY ...\n");
atcrt(); /*Открываем AT канал */
atsnd("AT+CCLK?",resCmd,8,33,&resCmdSize);
scpy (SMS, "OBJECT ID:");
scat (SMS,ID);
scat (SMS, "; CURRENT TIME: ");
sncpy(SMS+30,resCmd,33);
sncpy(SMS+61,";\nCURRENT: ",11);
itoa (gtb(0),adc,6);
scat (SMS,adc);
scat (SMS,"; VOLTAGE: ");
itoa (gtb(1),adc,6);
scat (SMS,adc);
smserr = smss(smsadrs,SMS,145,slen(smsadrs),slen(SMS));
if (smserr == 0)
{prtf("sent SMS message:\n");prtf(SMS);}
else
{prtf("\nSMS sent ERROR!\n")}
smsd(sms_slot); /*Удаляем SMS*/
atdst(); /*Закрываем AT канал */
}
prtf("\n");
prtf("NO NEW SMS FOUND ... \n");
prtf("\n");
}
CHECK_IO_ADC_STATE()
{
int io_err;
int io_state;
char ok;
io(2,"IO1",1); /*IO1 as output*/
prtf("\nNew...");
ok = io(1,"IO1",0);
prtf("\nIO1 return code low= %d",ok);
dlys(1);
ok = io(1,"IO1",1);
prtf("\nIO1 return code high= %d",ok);
dlys(1);
}
CHECK_START_SIM()
{
int nvmerr;
char NVMDATA[6];
int aterr;
int resCmdSize;
char resCmd[100];
/*читаем память NVRAM какая SIM записана*/
nvmerr = nvm(0,0,6,NVMDATA);
if (nvmerr == 0)
{
prtf ("Data read from NVM memory is: %s\n", NVMDATA);
prtf("\n");
}
/* если NVRAM пустой то инитим NVRAM c SIM0*/
if ((scmp(NVMDATA,"SIM0") != 0) && (scmp(NVMDATA,"SIM1") != 0))
{
nvmerr=nvm(1,0,4,"SIM0");
nvmerr = nvm(0,0,6,NVMDATA); /*обновляем буфер с новым значением*/
if (nvmerr == 0)
{
prtf ("CLEAR NVRAM. WRITING SIM0 TO NVRAM OK!");
prtf("\n");
}
else
{
prtf ("ERROR WRITING TO NVRAM!");
prtf("\n");
}
}
/* включаем нужную SIM */
if (scmp(NVMDATA,"SIM0") == 0)
{
atcrt ();
atsnd ("AT*ESSE=0", resCmd, 9, 100, &resCmdSize);
prtf ("Sent AT command SIM0 enable, response = %s:%d response code = %d\n",resCmd, resCmdSize, aterr); prtf("\n");
atdst ();
}
else
{
atcrt ();
atsnd ("AT*ESSE=1", resCmd, 9, 100, &resCmdSize);
prtf ("Sent AT command SIM1 enable, response = %s:%d response code = %d\n",resCmd, resCmdSize, aterr); prtf("\n");
atdst ();
}
}
CHECK_REGISTRATION()
{
/*For APPS_NETWORK_STATUSBYTE values are for reading network status*/
int APPS_NETWORK_STATUSBYTE =10;
int AT_NET_NOT_REG_NOT_SEARCHING = 0;
int AT_NET_REGISTERED = 1;
int AT_NET_NOT_REG_SEARCHING = 2;
int AT_NET_REGISTRATION_DENIED = 3;
int AT_NET_UNKNOWN = 4;
int AT_NET_REGISTERED_ROAMING = 5;
int AT_NET_UNDEFINED = 255;
/*For APPS_GPRS_STATUSBYTE values are for reading GPRS status*/
int APPS_GPRS_STATUSBYTE =11;
int NRS_NOT_REGISTERED_NOT_SEARCHING=0;
int NRS_REGISTERED_HOME = 1;
int NRS_NOT_REGISTERED_SEARCHING = 2;
int NRS_REGISTRATION_DENIED = 3;
int NRS_UNKNOWN = 4;
int NRS_REGISTERED_ROAMING = 5;
int NRS_VALUE_NOT_SET = 6;
/*For APPS_LOCK_STATUS_BYTE values are as follows*/
int APPS_LOCK_STATUS_BYTE =16;
int LOCKS_READY = 0; /*No code is required*/
int LOCKS_SIM_PIN_REQUIRED = 1;
int LOCKS_SIM_PUK_REQUIRED = 2;
int LOCKS_SIM_PIN2_REQUIRED = 3;
int LOCKS_SIM_PUK2_REQUIRED = 4;
int LOCKS_PH_SIM_PIN_REQUIRED = 5;
int LOCKS_SIM_FAILURE = 6; /*the SIM card is present but blocked.*/
int LOCKS_SIM_REQUIRED = 7; /*no SIM card is present.*/
int LOCKS_PH_SIM_STATUS_PENDIN = 8;
int LOCKS_STATUS_UNKNOWN = 255;
/*Основная SIM*/
char PINCODE[5] = "0000";
char PUKCODE[9] = "53247491";
/*Резервная SIM*/
char PINCODE1[5] = "0000";
char PUKCODE1[9] = "53247491";
int PIN_result;
int nvmerr;
char NVMDATA[6];
int tm_val1 = 20000; /*значение таймера 1 ставим на 100 сек*/
int count1 = 0;
prtf("\n Checking SIM card and registration GSM network ...");
prtf("\n");
nvm(0,0,6,NVMDATA); /*читаем данные NVRAM*/
while(1) /*проверяем сеть GSM,наличие СИМ и вводим ПИН если надо*/
{
if(gtb(APPS_LOCK_STATUS_BYTE) == LOCKS_SIM_REQUIRED | LOCKS_SIM_FAILURE)
{
prtf("\n No SIM card is present or SIM blocked!");
prtf("\n Try to restart device ...");
prtf("\n");
if (scmp (NVMDATA,"SIM0") == 0)
{
nvmerr = nvm(1,0,4,"SIM1");
if (nvmerr != 0)
{
prtf ("ERROR WRITING TO NVRAM!");
prtf("\n");
}
{
prtf ("WRITING SIM1 TO NVRAM OK!");
prtf("\n");
}
}
else
{
nvmerr = nvm(1,0,4,"SIM0");
if (nvmerr != 0)
{
prtf ("ERROR WRITING TO NVRAM!");
prtf("\n");
}
{
prtf ("WRITING SIM0 TO NVRAM OK!");
prtf("\n");
}
}
dlys(5);
rst (0);
}
if(gtb(APPS_LOCK_STATUS_BYTE) == LOCKS_READY)
{
prtf("\n No code is required!");
break;
}
if(gtb(APPS_LOCK_STATUS_BYTE) == LOCKS_SIM_PIN_REQUIRED)
{
prtf("\n PIN is required!");
prtf("\n Enter PIN...");
PIN_result=pin(PINCODE,0);
prtf("\n SIM result = %d",PIN_result);
prtf("\n");
break;
}
}
/*после SIM проверяем GSM регистрацию*/
cts(1,tm_val1,1); /*таймер 1 ставим на однократный счет 100sec*/
while(gtb(APPS_NETWORK_STATUSBYTE)!= AT_NET_REGISTERED||AT_NET_REGISTERED_ROAMING)
{
if(gtb(APPS_NETWORK_STATUSBYTE) == AT_NET_REGISTERED)
{ prtf("\n We are registered in GSM network!"); break; }
if(gtb(APPS_NETWORK_STATUSBYTE) == AT_NET_REGISTERED_ROAMING)
{ prtf("\n We are registered in Roaming!"); break; }
/*если вышел таймаут 100сек */
if ( ctq(1,&tm_val1,&count1) == 1)
{
prtf("\n GSM registration timeout!!!");
prtf("\n Try to restart device with another SIM...");
prtf("\n");
if (scmp (NVMDATA,"SIM0") == 0)
{
nvmerr = nvm(1,0,4,"SIM1");
if (nvmerr != 0)
{prtf ("ERROR WRITING TO NVRAM!");prtf("\n");}
{prtf ("WRITING SIM1 TO NVRAM OK!");prtf("\n");}
}
else
{
nvmerr = nvm(1,0,4,"SIM0");
if (nvmerr != 0)
{prtf ("ERROR WRITING TO NVRAM!");prtf("\n");}
{prtf ("WRITING SIM0 TO NVRAM OK!");prtf("\n");}
}
dlys(5); rst(0);
}
}
}