АпаратнотАУпрограмний комплекс 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м с