WORD GSM_SendSmsToData(far GSM * _Gsm)
{
WORD i, k, IndexDCID;
WORD m, n;
BYTE system_tel_set;
WORD IndexDataMessage;
char temp;
char *p;
BYTE PN[21];
if(Packet.ValidateDataReceive) return ERR_GSM_SendSmsToData_PACKET;
system_tel_set = 0;
if(strlen((const char*)Sms.RxBuff[0].Message) == 0){
Packet.Receiver.byte.HB = DCID[0][0];
Packet.Receiver.byte.LB = DCID[0][1];
// Packet.Command.Val = 0;
// API_CmdAnswer(&Packet, ERR_GSM_SendSmsToData_FORMAT);
return ERR_GSM_SendSmsToData_FORMAT;
}
for(IndexDCID=0; IndexDCID<MAX_DCID; IndexDCID++){
if((IndexAddressElement[IndexDCID][1] & 0x0f) == PHYSICAL_LAYER_GSM_SMS){
if(!strcmp((const char*)Sms.RxBuff[0].Tel, TableAddressSMS[IndexAddressElement[IndexDCID][0]].TelNumber)){
Packet.Sender.byte.HB = DCID[IndexDCID][0];
Packet.Sender.byte.LB = DCID[IndexDCID][1];
break;
}
}
}
for(IndexDataMessage=0; IndexDataMessage<strlen((const char*)Sms.RxBuff[0].Message); IndexDataMessage++){
if(Sms.RxBuff[0].Message[IndexDataMessage] == '='){
IndexDataMessage++;
VERSION_GetPN(PN);
for(m=0; m<21; m++){
if(PN[m] == '-') break;
}
if(m > 8) break;
PN[0] = PN[m+8];
PN[1] = PN[m+9];
PN[2] = PN[m+10];
PN[3] = PN[m+11];
PN[4] = 0;
break;
}
if(Sms.RxBuff[0].Message[IndexDataMessage] == ':'){
IndexDataMessage++;
break;
}
}
for(m = 0; m < IndexDataMessage; m++){
if(Sms.RxBuff[0].Message[m] >= 97 && Sms.RxBuff[0].Message[m] <= 122) Sms.RxBuff[0].Message[m] = Sms.RxBuff[0].Message[m] - 0x20;
}
if(Sms.RxBuff[0].Message[IndexDataMessage - 1] == ':' || Sms.RxBuff[0].Message[IndexDataMessage - 1] == '='){
for(m = IndexDataMessage; m < strlen((const char*)Sms.RxBuff[0].Message); m++){
if(Sms.RxBuff[0].Message[m] == 0x0a){
for(n = m; n < strlen((const char*)Sms.RxBuff[0].Message); n++){
Sms.RxBuff[0].Message[n] = Sms.RxBuff[0].Message[n+1];
}
}
}
}
if(!strcmp((const char*)(Sms.RxBuff[0].Message + IndexDataMessage + 2), PN)){
system_tel_set = 1;
Sms.RxBuff[0].Message[IndexDataMessage + 2] = 0;
temp = Sms.RxBuff[0].Message[IndexDataMessage] - 0x30 - 1;
for(m=0; m<strlen((const char*)Sms.RxBuff[0].Tel); m++) Sms.RxBuff[0].Message[IndexDataMessage + 2 + m] = Sms.RxBuff[0].Tel[m];
Sms.RxBuff[0].Message[IndexDataMessage + 2 + strlen((const char*)Sms.RxBuff[0].Tel)] = 0;
for(i=0; i<MAX_DCID; i++){
if((IndexAddressElement[i][1] & 0x0f) == PHYSICAL_LAYER_GSM_SMS){
if(IndexAddressElement[i][0] == temp){
Packet.Sender.byte.HB = DCID[i][0];
Packet.Sender.byte.LB = DCID[i][1];
break;
}
}
}
if(IndexDCID == MAX_DCID) IndexDCID = temp;
}
else if(IndexDCID == MAX_DCID) return ERR_GSM_SendSmsToData_TEL;
temp = Sms.RxBuff[0].Message[IndexDataMessage];
Sms.RxBuff[0].Message[IndexDataMessage] = 0;
for(i=0; i<NUM_COMMANDS_SMS; i++){
if(!strcmp((const char*)Sms.RxBuff[0].Message, TableCommandsSMS[i].Text)) break;
}
if(i == NUM_COMMANDS_SMS){
Packet.Receiver.byte.HB = DCID[0][0];
Packet.Receiver.byte.LB = DCID[0][1];
API_CmdAnswer(&Packet, ERR_GSM_SendSmsToData_NO_COMMAND);
return ERR_GSM_SendSmsToData_NO_COMMAND;
}
if(!GSM_AccessRights(IndexAddressElement[IndexDCID][0], TableCommandsSMS[i].Command) && !system_tel_set){
Packet.Receiver.byte.HB = DCID[0][0];
Packet.Receiver.byte.LB = DCID[0][1];
API_CmdAnswer(&Packet, ERR_GSM_SendSmsToData_ACCESS);
return ERR_GSM_SendSmsToData_ACCESS;
}
Packet.Command.Val = TableCommandsSMS[i].Command;
for(k=0; k<MAX_DCID; k++){
if((IndexAddressElement[k][1] & 0x0f) == PHYSICAL_LAYER_THIS){
if(IndexAddressElement[k][2] == TableCommandsSMS[i].Element){
Packet.Receiver.byte.HB = DCID[k][0];
Packet.Receiver.byte.LB = DCID[k][1];
break;
}
}
}
if(k == MAX_DCID){
Packet.Receiver.byte.HB = DCID[0][0];
Packet.Receiver.byte.LB = DCID[0][1];
API_CmdAnswer(&Packet, ERR_GSM_SendSmsToData_ELEMENT);
return ERR_GSM_SendSmsToData_ELEMENT;
}
Sms.RxBuff[0].Message[IndexDataMessage] = temp;
if(Sms.RxBuff[0].Message[IndexDataMessage] != 0){
if(k = GSM_ParseSmsCommand(&Packet, IndexDataMessage, Sms.RxBuff[0].Message) != ERR_OK){
Packet.Receiver.byte.HB = DCID[0][0];
Packet.Receiver.byte.LB = DCID[0][1];
API_CmdAnswer(&Packet, k);
return k;
}
}
else Packet.DataLength.Val = 0;
Packet.ValidateDataReceive = TRUE;
return ERR_OK;
}