WORD GSM_SendDataToSms(WORD aSender, WORD aReceiver, WORD aCommand, WORD aDataLength, BYTE *aData)
{
WORD index, k, j;
char *p;
float f;
WORD_VAL wvTemp;
BYTE i,m;
strcpy((char*)Gsm.CommandData,GSMCommand[mcCMGS]);
Gsm.ActualCommand = mcCMGS;
strcat((char*)Gsm.CommandData, "\"");
strcat((char*)Gsm.CommandData, TableAddressSMS[IndexAddressElement[DesElement.IndexDCIDreceiver][0]].TelNumber);
strcat((char*)Gsm.CommandData, "\"\r");
strcpy((char*)Sms.RxBuff[0].Message, TableNameDcidSMS[DesElement.IndexDCIDsender].Text); // kto hlasi
strcat((char*)Sms.RxBuff[0].Message, ": "); // aka sprava
wvTemp.byte.HB = DCID[0][0];
wvTemp.byte.LB = DCID[0][1];
if(aCommand & ERROR_FLAG){
for(k=0; k<NUM_ANSWERS_EVENTS_SMS; k++){
if(TableAnswerSMS[k].Answer == SA_ERROR) break;
}
if(k == NUM_ANSWERS_EVENTS_SMS) API_Error(wvTemp.Val, ERR_GSM_SendDataToSms_NO_COMMAND);
wvTemp.byte.HB = aData[9];
wvTemp.byte.LB = aData[10];
for(j=0; j<NUM_ERRORS_SMS; j++){
if(wvTemp.Val == TableErrorSMS[j].Error) break;
}
if(j == NUM_ERRORS_SMS) j=0xffff;
if(j != 0xffff) strcat((char*)Sms.RxBuff[0].Message, TableErrorSMS[j].Text); // chyba chybneho SMS prikazu
else{
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[k].Text); // chyba
p = (char*)Sms.RxBuff[0].Message + strlen((char*)Sms.RxBuff[0].Message);
sprintf( p, " %d ", wvTemp.Val );
}
}
else{
for(index=0; index<NUM_ANSWERS_EVENTS_SMS; index++){
if(TableAnswerSMS[index].Answer == aCommand && (TableAnswerSMS[index].Element == IndexAddressElement[DesElement.IndexDCIDsender][2] ||
TableAnswerSMS[index].Element == ALL_ELEMENTS)) break;
}
wvTemp.byte.HB = DCID[0][0];
wvTemp.byte.LB = DCID[0][1];
if(index == NUM_ANSWERS_EVENTS_SMS){
for(k=0; k<NUM_ANSWERS_EVENTS_SMS; k++){
if(TableAnswerSMS[k].Answer == SA_ERROR) break;
}
if(k == NUM_ANSWERS_EVENTS_SMS) API_Error(wvTemp.Val, ERR_GSM_SendDataToSms_NO_COMMAND);
wvTemp.Val = ERR_GSM_SendSmsToData_NO_ANSWER;
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[k].Text); // chyba
p = (char*)Sms.RxBuff[0].Message + strlen((char*)Sms.RxBuff[0].Message);
sprintf( p, " %d ", wvTemp.Val );
}
else{
switch(aCommand){
case BA_GET_PROTOCOL_VERSION:
break;
case BA_GET_DESCRIPTION:
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[index].Text);
strncat((char*)Sms.RxBuff[0].Message, aData, aDataLength);
for(j=0; j<strlen((char*)Sms.RxBuff[0].Message); j++){
if(Sms.RxBuff[0].Message[j] == '|') Sms.RxBuff[0].Message[j] = '*';
}
break;
case BA_SET_TIME:
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[index].Text);
break;
case BA_GET_TIME:
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[index].Text);
break;
case BA_SET_ALARM:
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[index].Text);
break;
case BA_GET_ALARM:
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[index].Text);
for(i=1, m=10; i<9; i++, m+=10){
if(aData[m+9] == 1) sprintf((char*)Sms.RxBuff[0].Message + strlen((char*)Sms.RxBuff[0].Message), "%d,%02d:%02d:00*", i, aData[m+4], aData[m+5]);
}
break;
case BA_GET_SIGNAL_QUALITY:
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[index].Text);
p = (char*)Sms.RxBuff[0].Message + strlen((char*)Sms.RxBuff[0].Message);
sprintf(p, "%.1f", (float) ((100 * (WORD)aData[0]) / 32));
strcat(p, "% ");
break;
case BA_EVENTS_ON:
case BA_EVENTS_OFF:
case BA_DISABLE_ALARM:
case BA_SUMMER_WINTER_TIME_ENABLE:
case BA_SUMMER_WINTER_TIME_DISABLE:
case BA_NTP_ENABLE:
case BA_NTP_DISABLE:
case BA_SET_NTP_SERVER:
case BA_SET_TIME_ZONE:
case BA_RESET:
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[index].Text);
break;
case BA_UPDATE_SAVE:
case BA_UPDATE_NO_SAVE:
strcat((char*)Sms.RxBuff[0].Message, TableAnswerSMS[index].Text);
break;
default:
GSM_CreateSmsAnswer(aCommand, aData, aDataLength, index, Sms.RxBuff[0].Message);
break;
}
}
}
index = strlen((char*)Sms.RxBuff[0].Message);
Sms.RxBuff[0].Message[index] = 26; //ctrl+Z; SUB
Sms.RxBuff[0].Message[index+1] = '\0';
ModemGsm.Signal.Control.SendCommand = TRUE;
ModemGsm.Signal.Control.SendSms = TRUE;
ModemGsm.Signal.Control.Process = TRUE;
return ERR_OK;
}