АпаратнотАУпрограмний комплекс GSM-МТМ

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



j]=\0;

if ((op==MOBILPHONE)&&(strcmp(sbuf,phone)==0)){

j=0;i++;while(buf[i]!= )StarifIn[j++]=buf[i++];StarifIn[j]=\0;

j=0;i++;while(buf[i]!= )StarifOut[j++]=buf[i++];StarifOut[j]=\0;

j=0;i++;while(buf[i]!= )Smoney[j++]=buf[i++];Smoney[j]=\0;

j=0;i++;while(buf[i]!=\n)Sdir[j++]=buf[i++];Sdir[j]=\0;

break;

}

}

};// end while

if (feof(handle)) {

fclose(handle);

return -1;

};

*tarifIn = atoi(StarifIn);

*tarifOut = atoi(StarifOut);

tarifConnect = atoi(StarifConnect);

if (strstr(Sdir,"MT")!=NULL)*dir=PHONE;

if (strstr(Sdir,"GSM")!=NULL)*dir=MOBILPHONE;

if (strstr(Sdir,"MTGSM")!=NULL)*dir=3;

START_money = atof(Smoney);

*money = atof(Smoney);

fclose(handle);

if ((op==*dir)||(*dir == 3))return index;

else return -1;

};

// пiсля розмови залишок зберiгаСФмо у файлi

void SaveMoney(int index){

FILE* handle;

char Smoney[20];

char buf[100];

long siz = 0;

int i,j;

char Sdelta[40];

int k = 0,delta = 0;

//перевiрка визначаСФмо рiзницю часу

//index=index+1;

//кiнець

handle = fopen("Users.dat", "rb+");

if (handle == NULL) return;

while((!feof(handle))&&(index-->0)) {

fgets(buf,100,handle);

siz += strlen(buf);

};

i=0;k=0;

fgets(buf,100,handle);

while (buf[i]!= )i++;

i++;while (buf[i]!= )i++;

i++;while (buf[i]!= )i++;

i++;while (buf[i]!= )i++;

k = i+1;

ltoa(money,Smoney,10);

j=strlen(Smoney);

if (j<5){

for (i=j-1;i>=0;i--) Smoney[5-(j-i)]=Smoney[i];

for (i=0;i<5-j;i++)Smoney[i]=0;Smoney[5]=\0;

};

fseek(handle,siz+k,SEEK_SET);

fwrite(&Smoney,strlen(Smoney),1,handle);

fclose(handle);

};

// отримуСФмо час розмови у секундах для визначення часу розмови

unsigned long getSec(char *tim){

char *Ssec;

int i = 0,k = 0,numDigit=0;

unsigned long res = 0;

Ssec = strstr(tim,",");

Ssec[10]=\0;

while (Ssec[i]!=\0) {

if ((Ssec[i]9)){i++;continue;};

if (k==2){

if (i>4) res=res*60+numDigit; numDigit=0; k=0;

}

numDigit=numDigit*10+(Ssec[i]-48);

k++; i++;

}

return res*60+numDigit;

}

// записуСФмо протокол розмови у формi дата розмови час розмови кiлькiсть витрачених грошей

// номер телефону з якоСЧ сторони був дзвiнок МТМ чи GSM

void saveLog(char * timeStart,char * timeEnd,char *phoneNumber,char *direction){

FILE * f;

char Smoney[20];

double mresult = 0;

unsigned long intmres = 0;

unsigned long tStart = getSec(timeStart);

unsigned long tEnd = getSec(timeEnd);

char spase[3] = " ";

int i,j,delta = 0;

char Sdelta[10];

if (tStart>tEnd){

tEnd+=3600;

}

delta = tEnd-tStart;

itoa(delta,Sdelta,10);

f=fopen("Log.dat","at");

i=0;

while ((timeStart[i]>9)||(timeStart[i]<0))i++;

for (j=i;j<i+18;j++)timeStart[j-i]=timeStart[j];timeStart[17]=\0;

intmres = ((long)(money));

if (strcmp(direction, "з GSM")==0) money = intmres;

else money = intmres-1;

mresult = START_money-money;

ltoa(mresult,Smoney,10);

fwrite(timeStart,strlen(timeStart),1,f);

fwrite(spase,strlen(spase),1,f);

fwrite(Sdelta,strlen(Sdelta),1,f);

fwrite(spase,strlen(spase),1,f);

fwrite(Smoney,strlen(Smoney),1,f);

fwrite(spase,strlen(spase),1,f);

fwrite(phoneNumber,strlen(phoneNumber),1,f);

fwrite(spase,strlen(spase),1,f);

fwrite(direction,strlen(direction),1,f);

fputs("\n",f); fclose(f);

};

// отримати число видане контролером DTMF

int getDigit(int criticalTime){

int i,res = 0;

char b;

char *st;

while((inportb(LPTin)&STROB)==0);

do{

b = inportb(LPTin);

delay(60);

if (criticalTime-- < 0) break;

}while ((b&STROB)!= 0);

if ((b & DIGIT1)!=0) res = res+1;

if ((b & DIGIT2)!=0) res = res+2;

if ((b & DIGIT3)!=0) res = res+4;

if ((b & DIGIT4)!=0) res = res+8;

itoa(res,st,10);

if (criticalTime<0) return -1; //timeout

else return res;

};

//************************************************************************************************************

//**********************обробити дзвiнок з мiста***********************************

//********************************************************************************************************

void phoneCity(){

int digit[3];//читаСФмо кому абонент телефонноСЧ лiнiСЧ хоче подзвонити

int i,no = 0;

int PhoneNum = 0;

int tarifUser;

int isDigit,credits;

int MD = atoi(numDigits);

char *st,

temp[30];

int NoUser; // номер абонента в списку користувачiв мережою

PhoneUp();

Cdelay(1500);

beep(2); // два гудка говорять про готовнiсть приймача прийняти код

do{

isDigit = getDigit(100);

if (isDigit<0) {

beep(3);

error(3);

PhoneDown();

return;

}

if (isDigit>10) continue;

isDigit%=10;

digit[no++] = isDigit;

PhoneNum=PhoneNum*10+digit[no-1];

}while ((isDigit>=0)&&(no<MD));

itoa(PhoneNum,st,10);

temp[0] = \0;

strcat(temp,"\nНабраний додатковий номер ");;

strcat(temp,st);

strcat(temp,"\n");

printf(temp);

//Ок!

dialNumber[0]=\0;

beep(1);

// отримуСФмо реквiзити номера

no = getPhoneNumber(PHONE,&PhoneNum,dialNumber,&tarifIn,&tarifOut,&money,&dir);

if (no<0){

beep(3);

error(4);

PhoneDown();

return;

};

temp[0] = \0;

dialNumber[0]= ;

strcat(temp, dialPrefix);

strcat(temp, dialNumber);

strcat(temp, dialSuffix);

sendstr(temp);

Csleep(1);

credits = tarifUser;

StartToking(PHONE);

SaveMoney(no);

};

//*******************************************************************************************************

//****************обробити дзвiнок з мобiльного телефону *****************************

//*******************************************************************************************************

void phoneMobiline(void){

int i = 0;

char phone[15];

char temp[80];

int no,creditUser = -1;

// знаходимо стрiчку з номером телефону звiдки телефонують

// перевiряСФмо чи номер присутнiй у базi i чи достатньо у нього часу для розмови

// функцiя повертаСФ час що залишився в абонента або -1,

// якщо часу немаСФ або абонент вiдсутнiй у бд

no = getPhoneNumber(MOBILPHONE,&PhoneNum,dialNumber,&tarifIn,&tarifOut,&money,&dir);

if (no<0) return;

// пiднiмаСФмо трубку i подаСФмо сигнал готовностi beep

PhoneUp();

while (1){

printf("\nПiднiмаю трубку...\n");

sendstr("ATA");

Csleep(1);

sread(temp,r_count_pending(),0);

if (strstr(temp,"OK")!=NULL) break;

}

StartToking(MOBILPHONE);

SaveMoney(no);

}

//******************************************************************************************************

//******************РЖнiцiалiзацiя пристрою************************************************

//******************************************************************************************************

int initializeDevice(){

int i,j;

char buf[80];

getconfig();

LPTout = atoi(LPT);

LPTin = LPTout+1;

// устанавливаем обработчик прерiваний и инициализируем

// регистрi UART и контроллера прерiваний

PhoneDown();

openline(device, speed);

// очищаСФмо буфер прийому

while (sread(buf,1,0));

printf("\nРЖнiцiалiзiруСФм пристрiй\n\n");

// передаем модему стрiчку iнiцiалiзацiСЧ

// (строка инициализации определяется ключевiм с