-static GSM_Error EncodeData(GSM_SMSMessage *SMS, char *dcs, char *message)
-{
- SMS_AlphabetType al;
- unsigned short length = strlen(SMS->MessageText);
-
- switch (SMS->DCS.Type) {
- case SMS_GeneralDataCoding:
- switch (SMS->DCS.u.General.Class) {
- case 1: dcs[0] |= 0xf0; break;
- case 2: dcs[0] |= 0xf1; break;
- case 3: dcs[0] |= 0xf2; break;
- case 4: dcs[0] |= 0xf3; break;
- default: break;
- }
- if (SMS->DCS.u.General.Compressed) {
- /* Compression not supported yet */
- /* dcs[0] |= 0x20; */
- }
- al = SMS->DCS.u.General.Alphabet;
- break;
- case SMS_MessageWaiting:
- al = SMS->DCS.u.MessageWaiting.Alphabet;
- if (SMS->DCS.u.MessageWaiting.Discard) dcs[0] |= 0xc0;
- else if (SMS->DCS.u.MessageWaiting.Alphabet == SMS_UCS2) dcs[0] |= 0xe0;
- else dcs[0] |= 0xd0;
-
- if (SMS->DCS.u.MessageWaiting.Active) dcs[0] |= 0x08;
- dcs[0] |= (SMS->DCS.u.MessageWaiting.Type & 0x03);
-
- break;
- default:
- return GE_SMSWRONGFORMAT;
- }
- switch (al) {
- case SMS_DefaultAlphabet:
- Pack7BitCharacters((7 - (SMS->UDH_Length % 7)) % 7, SMS->MessageText, message);
- SMS->Length = 8 * SMS->UDH_Length + (7 - (SMS->UDH_Length % 7)) % 7 + length;
- break;
- case SMS_8bit:
- dcs[0] |= 0xf4;
- memcpy(message, SMS->MessageText + 1, SMS->MessageText[0]);
- SMS->Length = SMS->UDH_Length + SMS->MessageText[0];
- break;
- case SMS_UCS2:
- dcs[0] |= 0x08;
- EncodeUnicode(message, SMS->MessageText, length);
- SMS->Length = length;
- break;
- default:
- return GE_SMSWRONGFORMAT;
- }
- return GE_NONE;
-}
-