- bitmap->size = (bitmap->width * bitmap->height) / 8;
- memcpy(bitmap->bitmap, message + offset + 2, bitmap->size);
-
- dprintf("Bitmap from SMS: width %i, height %i\n", bitmap->width, bitmap->height);
-
- return GE_NONE;
-}
-
-
-/* Returns message length */
-
-int GSM_SaveSMSBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap)
-{
- int current=0;
-
- char UserDataHeader[7] = { 0x06, /* UDH Length */
- 0x05, /* IEI: application port addressing scheme, 16 bit address */
- 0x04, /* IEI length */
- 0x15, /* destination address: high byte */
- 0x00, /* destination address: low byte */
- 0x00, /* originator address */
- 0x00};
-
- char Data[7] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
- /* Default settings for SMS message:
- - no delivery report
- - Class Message 1
- - no compression
- - 8 bit data
- - SMSC no. 1
- - validity 3 days
- - set UserDataHeaderIndicator
- */
-
- message->Status = SMS_Sent;
- /* Data Coding Scheme */
- message->DCS.Type = SMS_GeneralDataCoding;
- message->DCS.u.General.Class = 2;
- message->DCS.u.General.Compressed = false;
- message->DCS.u.General.Alphabet = SMS_8bit;
-
-
- message->MessageCenter.No = 1;
- message->Validity.VPF = SMS_RelativeFormat;
- message->Validity.u.Relative = 4320; /* 4320 minutes == 72 hours */
- message->ReplyViaSameSMSC = false;
-
- switch (bitmap->type) {
- case GSM_OperatorLogo:
- message->UDH[0].Type = SMS_OpLogo;
- UserDataHeader[4] = 0x82; /* NBS port 0x1582 */
-
- /* Set the network code */
- Data[current++] = ((bitmap->netcode[1] & 0x0f) << 4) | (bitmap->netcode[0] & 0xf);
- Data[current++] = 0xf0 | (bitmap->netcode[2] & 0x0f);
- Data[current++] = ((bitmap->netcode[5] & 0x0f) << 4) | (bitmap->netcode[4] & 0xf);
-
- break;
- case GSM_CallerLogo:
- message->UDH[0].Type = SMS_CallerIDLogo;
- UserDataHeader[4] = 0x83; /* NBS port 0x1583 */
- break;
- default: /* error */
- break;
- }
+ switch (bitmap->type) {
+ case GSM_OperatorLogo:
+ UDHType=GSM_OpLogo;
+
+ EncodeNetworkCode(MessageBuffer, bitmap->netcode);
+ MessageLength=3;
+
+ /* Set the logo size */
+ MessageBuffer[MessageLength++] = 0x00;
+ MessageBuffer[MessageLength++] = bitmap->width;
+ MessageBuffer[MessageLength++] = bitmap->height;
+ MessageBuffer[MessageLength++] = 0x01;
+
+ memcpy(MessageBuffer+MessageLength,bitmap->bitmap,bitmap->size);
+ MessageLength=MessageLength+bitmap->size;
+
+ break;
+ case GSM_CallerLogo:
+ UDHType=GSM_CallerIDLogo;
+
+ /* Set the logo size */
+ MessageBuffer[MessageLength++] = 0x00;
+ MessageBuffer[MessageLength++] = bitmap->width;
+ MessageBuffer[MessageLength++] = bitmap->height;
+ MessageBuffer[MessageLength++] = 0x01;
+
+ memcpy(MessageBuffer+MessageLength,bitmap->bitmap,bitmap->size);
+ MessageLength=MessageLength+bitmap->size;
+
+ break;
+ case GSM_PictureImage:
+ UDHType=GSM_ProfileUDH;
+
+ MessageBuffer[MessageLength++]=0x30; //SM version. Here 3.0
+
+ if (!ScreenSaver)
+ MessageBuffer[MessageLength++]=SM30_OTA; //ID for OTA bitmap
+ else
+ MessageBuffer[MessageLength++]=SM30_SCREENSAVER; //ID for screen saver
+
+ /* Length for picture part */
+ MessageBuffer[MessageLength++]=0x01; //length hi
+ MessageBuffer[MessageLength++]=0x00; //length lo
+
+ /* Set the logo size */
+ MessageBuffer[MessageLength++] = 0x00;
+ MessageBuffer[MessageLength++] = bitmap->width;
+ MessageBuffer[MessageLength++] = bitmap->height;
+ MessageBuffer[MessageLength++] = 0x01;
+
+ memcpy(MessageBuffer+MessageLength,bitmap->bitmap,bitmap->size);
+ MessageLength=MessageLength+bitmap->size;
+
+ if (strlen(bitmap->text)!=0) {
+ if (UnicodeText) {
+ MessageBuffer[MessageLength++]=SM30_UNICODETEXT; //ID for Unicode text
+
+ /* Length for text part */
+ MessageBuffer[MessageLength++]=0x00; //length of text1
+ MessageBuffer[MessageLength++]=strlen(bitmap->text)*2;//length of text2
+
+ EncodeUnicode (MessageBuffer+MessageLength,bitmap->text,strlen(bitmap->text));
+ MessageLength=MessageLength+2*strlen(bitmap->text);
+ } else {
+ MessageBuffer[MessageLength++]=SM30_ISOTEXT; //ID for ISO-8859-1 text
+
+ /* Length for text part */
+ MessageBuffer[MessageLength++]=0x00; //length of text1
+ MessageBuffer[MessageLength++]=strlen(bitmap->text); //length of text2
+
+ memcpy(MessageBuffer+MessageLength,bitmap->text,strlen(bitmap->text));
+ MessageLength=MessageLength+strlen(bitmap->text);
+ }
+ }
+ break;
+
+ default: /* error */
+ break;
+ }