Found in "gnokii-working" directory, some November-patches version
[gnokii.git] / common / phones / nk7110.c
index 67fc0f1..4dd584d 100644 (file)
   The various routines are called P7110_(whatever).
 
   $Log$
-  Revision 1.1.1.1  2001/11/25 21:59:13  short
-  :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001
-
-  Revision 1.27  2001/11/22 17:56:53  pkot
-  smslib update. sms sending
-
-  Revision 1.26  2001/11/19 17:09:59  pkot
-  Bugfixes
-
-  Revision 1.25  2001/11/19 16:24:31  pkot
-  Grrrr... I should have check if I have fixed this typo
-
-  Revision 1.24  2001/11/19 15:53:16  pkot
-  Typos
-
-  Revision 1.23  2001/11/19 13:46:42  pkot
-  reading unread SMS in 6210 from Inbox. Folder updates (Markus Plail)
-
-  Revision 1.22  2001/11/17 20:18:32  pkot
-  Added dau9p connection type for 6210/7110
-
-  Revision 1.21  2001/11/17 16:44:07  pkot
-  Cleanup. Reading SMS for 6100 series. Not that it has some bugs more and does not support UDH yet
-
-  Revision 1.20  2001/11/15 12:15:04  pkot
-  smslib updates. begin work on sms in 6100 series
-
-  Revision 1.19  2001/11/15 12:12:34  pkot
-  7110 and 6110 series phones introduce as Nokia
-
-  Revision 1.18  2001/11/15 12:04:06  pkot
-  Faster initialization for 6100 series (don't check for dlr3 cable)
-
-  Revision 1.17  2001/11/14 10:48:03  pkot
-  6210/7110 debug cleanups
-
-  Revision 1.16  2001/11/13 16:12:21  pkot
-  Preparing libsms to get to work. 6210/7110 SMS and SMS Folder updates
+  Revision 1.1.1.5  2002/04/03 00:08:10  short
+  Found in "gnokii-working" directory, some November-patches version
 
   Revision 1.15  2001/11/08 16:47:48  pkot
   Start fiddling with 7110 and SMS
   Revision 1.1  2001/01/14 22:46:59  chris
   Preliminary 7110 support (dlr9 only) and the beginnings of a new structure
 
+
 */
 
 #include <string.h>
@@ -239,9 +204,7 @@ static GSM_Error P7110_Functions(GSM_Operation op, GSM_Data *data, GSM_Statemach
                return P7110_GetCalendarNote(data, state);
        case GOP_GetSMS:
                return P7110_GetSMS(data, state);
-       case GOP_SendSMS:
-               return P7110_SendSMS(data, state);
-/* I'm not sure yet if folder functions will be shared or local
+/* I'm not suer yet if folder functions will be shared or local
        case GOP_GetSMSFolders:
                return P7110_GetSMSFolders(data, state);
        case GOP_GetSMSFolderStatus:
@@ -265,14 +228,11 @@ static GSM_Error P7110_Initialise(GSM_Statemachine *state)
        /* Copy in the phone info */
        memcpy(&(state->Phone), &phone_nokia_7110, sizeof(GSM_Phone));
 
-       dprintf("Connecting\n");
        while (!connected) {
                switch (state->Link.ConnectionType) {
-               case GCT_DAU9P:
-                       if (try == 0) try = 1;
                case GCT_Serial:
                        if (try > 1) return GE_NOTSUPPORTED;
-                       err = FBUS_Initialise(&(state->Link), state, 1 - try);
+                       err = FBUS_Initialise(&(state->Link), state);
                        break;
                case GCT_Infrared:
                case GCT_Irda:
@@ -285,7 +245,7 @@ static GSM_Error P7110_Initialise(GSM_Statemachine *state)
                }
 
                if (err != GE_NONE) {
-                       dprintf("Error in link initialisation: %d\n", err);
+                       dprintf("Error in link initialisation\n");
                        try++;
                        continue;
                }
@@ -351,12 +311,13 @@ static GSM_Error P7110_IncomingBattLevel(int messagetype, unsigned char *message
                        *(data->BatteryLevel) = message[5];
                        dprintf("Battery level %f\n",*(data->BatteryLevel));
                }
+               return GE_NONE;
                break;
        default:
                dprintf("Unknown subtype of type 0x17 (%d)\n", message[3]);
                return GE_UNKNOWN;
+               break;
        }
-       return GE_NONE;
 }
 
 static GSM_Error P7110_GetRFLevel(GSM_Data *data, GSM_Statemachine *state)
@@ -431,6 +392,7 @@ static GSM_Error P7110_IncomingNetwork(int messagetype, unsigned char *message,
                        }
                        blockstart += blockstart[1];
                }
+               return GE_NONE;
                break;
        case 0x82:
                if (data->RFLevel) { 
@@ -438,15 +400,16 @@ static GSM_Error P7110_IncomingNetwork(int messagetype, unsigned char *message,
                        *(data->RFLevel) = message[4];
                        dprintf("RF level %f\n",*(data->RFLevel));
                }
+               return GE_NONE;
                break;
        case 0xa4:
                dprintf("Op Logo Set OK\n");
-               break;
+               return GE_NONE;
        default:
                dprintf("Unknown subtype of type 0x0a (%d)\n", message[3]);
                return GE_UNKNOWN;
+               break;
        }
-       return GE_NONE;
 }
 
 static GSM_Error P7110_GetMemoryStatus(GSM_Data *data, GSM_Statemachine *state)
@@ -477,11 +440,14 @@ static GSM_Error P7110_IncomingPhonebook(int messagetype, unsigned char *message
                                data->MemoryStatus->Used = (message[16] << 8) + message[17];
                                data->MemoryStatus->Free = ((message[14] << 8) + message[15]) - data->MemoryStatus->Used;
                                dprintf("Memory status - location = %d\n", (message[8] << 8) + message[9]);
+                               return GE_NONE;
                        } else {
                                dprintf("Unknown error getting mem status\n");
                                return GE_NOTIMPLEMENTED;
+                               
                        }
                }
+               return GE_NONE;
                break;
        case 0x08:  /* Read Memory response */
                if (data->PhonebookEntry) {
@@ -630,19 +596,20 @@ static GSM_Error P7110_IncomingPhonebook(int messagetype, unsigned char *message
                        }
                        blockstart += blockstart[3];
                }
+               return GE_NONE;
                break;
        case 0x0c:
                switch (message[6]) {
-               case 0x3d: return GE_PHBOOKWRITEFAILED;
-               case 0x3e: return GE_PHBOOKWRITEFAILED;
-               default: return GE_NONE;
+               case 0x3d: return GE_PHBOOKWRITEFAILED; break;
+               case 0x3e: return GE_PHBOOKWRITEFAILED; break;
+               default: return GE_NONE; break; 
                }
                break;  
        default:
                dprintf("Unknown subtype of type 0x03 (%d)\n", message[3]);
                return GE_UNKNOWN;
+               break;
        }
-       return GE_NONE;
 }
 
 /* Just as an example.... */
@@ -653,7 +620,6 @@ static GSM_Error P7110_Identify(GSM_Data *data, GSM_Statemachine *state)
        unsigned char req2[] = {FBUS_FRAME_HEADER, 0x03, 0x01, 0x32};
   
        dprintf("Identifying...\n");
-       PNOK_GetManufacturer(data->Manufacturer);
        if (SM_SendMessage(state, 4, 0x1b, req) != GE_NONE) return GE_NOTREADY;
        if (SM_SendMessage(state, 6, 0x1b, req2) != GE_NONE) return GE_NOTREADY;
        SM_WaitFor(state, data, 0x1b);
@@ -673,6 +639,7 @@ static GSM_Error P7110_Incoming0x1b(int messagetype, unsigned char *message, int
                        snprintf(data->Imei, GSM_MAX_IMEI_LENGTH, "%s", message + 4);
                        dprintf("Received imei %s\n",data->Imei);
                }
+               return GE_NONE;
                break;
        case 04:
                if (data->Model) { 
@@ -683,202 +650,132 @@ static GSM_Error P7110_Incoming0x1b(int messagetype, unsigned char *message, int
                        snprintf(data->Revision, GSM_MAX_REVISION_LENGTH, "%s", message + 7);
                        dprintf("Received revision %s\n",data->Revision);
                }
+               return GE_NONE;
                break;
        default:
                dprintf("Unknown subtype of type 0x1b (%d)\n", message[3]);
                return GE_UNKNOWN;
+               break;
        }
-       return GE_NONE;
 }
 
 
 /* handle messages of type 0x14 (SMS Handling, Folders, Logos.. */
 static GSM_Error P7110_IncomingFolder(int messagetype, unsigned char *message, int length, GSM_Data *data)
 {
-        int i, j;
-        int nextfolder = 0x10;
-        bool found;
-
+#if 0
+        int off, offset;
+        int wc,i,j,tmp=0;
         switch (message[3]) {
         /* getfolders */
         case 0x7B:
                 i = 5;
-               memset(data->SMSFolderList, 0, sizeof(SMS_FolderList));
-               dprintf("Message: %d SMS Folders received:\n", message[4]);
-
-               strcpy(data->SMSFolderList->Folder[1].Name, "               ");
-               data->SMSFolderList->number = message[4];
+                data->SMSFolders->number = message[4];
+                dprintf("Message: %d SMS Folders received:\n", data->SMSFolders->number);
       
                 for (j = 0; j < message[4]; j++) {
-                       int len;
-                        strcpy(data->SMSFolderList->Folder[j].Name, "               ");
-                        data->SMSFolderList->FolderID[j] = message[i];
-                        dprintf("Folder Index: %d", data->SMSFolderList->FolderID[j]);
-                        i += 2;
+                        strcpy(data->SMSFolders->Folder[j].Name, "               ");
+                        data->SMSFolders->FoldersID[j] = message[i];
+                        dprintf("Folder Index: %d", data->SMSFolders->FoldersID[j]);
+                        i = i + 2;
                         dprintf("   Folder name: ");
-                       len = 0;
-                       /* search for next folder's index number, i.e. length of folder name */
-                       while (message[i+1] != nextfolder && i < length) {
-                               i += 2;
-                               len++;
-                       }
-                       /* see nk7110.txt */
-                       nextfolder += 0x08;
-                       if (nextfolder == 0x28) nextfolder++;
-                       i -= 2 * len +1;
-                       DecodeUnicode(data->SMSFolderList->Folder[j].Name, message + i, len);
-                       dprintf("%s\n", data->SMSFolderList->Folder[j].Name);
-                       i += 2 * len + 2;
+                        tmp = 0;
+                        while ((message[i] != 0x00) & (message[i+1] == 0x00)) {
+                                wc = message[i] | (message[i+1] << 8);
+                               data->SMSFolders->Folder[j].Name[tmp] = DecodeWithUnicodeAlphabet(wc);
+                                dprintf("%c", data->SMSFolders->Folder[j].Name[tmp]);
+                                tmp++;
+                                i = i + 2;
+                        }
+                        dprintf("\n");
+                        tmp = 0;
+                        i = i + 1;
                 }
                 break;
 
         /* getfolderstatus */
         case 0x6C:
-               memset(data->SMSFolder, 0, sizeof(SMS_Folder));
                 dprintf("Message: SMS Folder status received: \n" );
-               data->SMSFolder->FolderID = data->SMSMessage->MemoryType;
-                data->SMSFolder->number = (message[5] * 256) + message[5];
-                dprintf("Message: Number of Entries: %i\n" , data->SMSFolder->number);
+                data->OneSMSFolder->number = (message[5] * 256) + message[5];
+                dprintf("Message: Number of Entries: %i\n" , data->OneSMSFolder->number);
                 dprintf("Message: IDs of Entries : ");
-                for (i = 0; i < message[4] * 256 + message[5]; i++) {
-                        data->SMSFolder->locations[i] = message[6+(i*2)] * 256 + message[(i*2)+7];
-                        dprintf("%d, ", data->SMSFolder->locations[i]);
+                for (i=0;i<message[4]*256+message[5];i++) {
+                        data->OneSMSFolder->locations[i]=message[6+(i*2)]*256+message[(i*2)+7];
+                        dprintf("%d, ", data->OneSMSFolder->locations[i]);
                 }
                 dprintf("\n");
                 break;
 
         /* getsms */    
         case 0x08:
-                for (i = 0; i < length; i ++)
+                for (i = 0; i < length-2; i ++)
                         if (isprint(message[i]))
                                 dprintf("[%02x%c]", message[i], message[i]);
                         else
                                 dprintf("[%02x ]", message[i]);
                 dprintf("\n");
 
-               memset(data->SMSMessage, 0, sizeof(GSM_SMSMessage));
-
-               /* Number of SMS in folder */
-               data->SMSMessage->Number = message[7]; 
-
-               /* MessageType/FolderID */
-               data->SMSMessage->MemoryType = message[5];
+                dprintf("Message: Getting SMS  %i " , data->SMSMessage->Location);
+                dprintf("in Folder  %i\n", data->SMSMessage->Destination);
+                if (message[5] != data->SMSMessage->Destination) {
+                        dprintf("Invalid SMS location (Folder)\n");
+                        return GE_INVALIDSMSLOCATION;
+                }
+                if ((message[6] * 256 + message[7]) != data->SMSMessage->Location) {
+                        dprintf("Invalid SMS location (ID)\n");
+                        return GE_INVALIDSMSLOCATION;
+                }
 
-               /* These offsets are 6210/7110 series specific */
-               /* Short Message status */
-               data->SMSMessage->Status = message[4];
-               dprintf("\tStatus: ");
-               switch (data->SMSMessage->Status) {
-               case SMS_Read:
-                       dprintf("READ\n");
-                       break;
-               case SMS_Unread:
-                       dprintf("UNREAD\n");
-                       break;
-               case SMS_Sent:
-                       dprintf("SENT\n");
-                       break;
-               case SMS_Unsent:
-                       dprintf("UNSENT\n");
-                       break;
-               default:
-                       dprintf("UNKNOWN\n");
-                       break;
-               }
-               /* See if message# is given back by phone. If not and status is unread */
-               /* we want it, if status is not unread it's a "random" message given back */
-               /* by the phone because we want a message of which the # doesn't exist */
-               found = false;
-               for (i = 0; i < data->SMSFolder->number; i++) {
-                       if (data->SMSMessage->Number == data->SMSFolder->locations[i]) 
-                               found = true;
-               }
-               if (found==false && data->SMSMessage->Status != SMS_Unread) return GE_INVALIDSMSLOCATION;
+                /* Status see nk7110.txt */
+                data->SMSMessage->Status = message[4];
 
-               DecodePDUSMS(message + 6, data->SMSMessage, length);
+                if (message[8]==0x01) data->SMSMessage->Type = SMS_Deliver_Report;
+                offset=4;
+                if (data->SMSMessage->Status == SMS_MO_SENT) offset=5;
+                off = 0;
+                if (message[9+12] & 0x40) { /* UDH header available */
 
+                        off = (message[9+31+offset] + 1); /* Length of UDH header */
+    
+                        dprintf("   UDH header available (length %i)\n",off);
+                }
+                  
+                DecodeSMSHeader(message, length, data->SMSMessage, 9, offset);
+                DecodeTextSMS(message, length, data->SMSMessage, 9, offset, off);
+              
                 break;
-
-               /* get list of SMS pictures */
-               case 0x97:
-               dprintf("Getting list of SMS pictures...\n");
-               for (i = 0; i < length; i ++)
-                       if (isprint(message[i]))
-                               dprintf("[%02x%c]", message[i], message[i]);
-                       else
-                               dprintf("[%02x ]", message[i]);
-               dprintf("\n");
-               break;
+    
         default:
 
-               for (i = 0; i < length; i ++)
+               for (i = 0; i < length-2; i ++)
                        if (isprint(message[i]))
                                dprintf("[%02x%c]", message[i], message[i]);
                        else
                                dprintf("[%02x ]", message[i]);
                 dprintf("\n");
                 dprintf("Message: Unknown message of type 14 : %d  length: %d\n", message[3], length);
-               return GE_UNKNOWN;
+               break;
         }
+#endif
         return GE_NONE;
 }
 
 static GSM_Error P7110_GetSMS(GSM_Data *data, GSM_Statemachine *state)
 {
-       unsigned char req_folders[] = {FBUS_FRAME_HEADER, 0x7a, 0x00, 0x00};
-       unsigned char req_status[] = {FBUS_FRAME_HEADER, 0x6b, 
-                               0x08, // Folder ID
-                               0x0f, 0x01};
-       unsigned char req_sms[] = {FBUS_FRAME_HEADER, 0x07, 
+       unsigned char req[] = {FBUS_FRAME_HEADER, 0x07, 
                                0x08, // FolderID
                                0x00, 
                                0x01, // Location
                                0x01, 0x65, 0x01};
-       unsigned char req_list[] = {FBUS_FRAME_HEADER, 0x96, 
-                                        0x09, /* location */
-                                        0x0f, 0x07};
-       GSM_Error error;
-
-       /* just testiung picture listing */
-       req_list[4] = data->SMSMessage->MemoryType;
-       if (SM_SendMessage(state, 7, 0x14, req_list) != GE_NONE) return GE_NOTREADY;
-       error = SM_Block(state, data, 0x14);
-
-       /* see if the message we want is from the last read folder, i.e. */
-       /* we don't have to get folder status again */
-       if (data->SMSMessage->MemoryType != data->SMSFolder->FolderID) {
-
-               dprintf("Getting list of SMS folders...\n");
-               if (SM_SendMessage(state, 6, 0x14, req_folders) != GE_NONE) return GE_NOTREADY;
-               error = SM_Block(state, data, 0x14);
-
-               if (data->SMSMessage->MemoryType > data->SMSFolderList->FolderID[data->SMSFolderList->number-1])
-                       return GE_INVALIDMEMORYTYPE;
-               data->SMSFolder->FolderID = data->SMSMessage->MemoryType;
-               req_status[4] = data->SMSMessage->MemoryType;
-
-               dprintf("Getting entries for SMS folder %i...\n", data->SMSMessage->MemoryType);
-               if (SM_SendMessage(state, 7, 0x14, req_status) != GE_NONE) return GE_NOTREADY;
-               error = SM_Block(state, data, 0x14);
-       }
-        
+      
        dprintf("Getting SMS...\n");
-       req_sms[4] = data->SMSMessage->MemoryType;
-       req_sms[6] = data->SMSMessage->Number;
-       if (SM_SendMessage(state, 10, 0x14, req_sms) != GE_NONE) return GE_NOTREADY;
+       req[4] = data->SMSMessage->MemoryType;
+       req[6] = data->SMSMessage->Location;
+       if (SM_SendMessage(state, 10, 0x14, req) != GE_NONE) return GE_NOTREADY;
        return SM_Block(state, data, 0x14);
 }
 
-static GSM_Error P7110_GetPicture(GSM_Data *data, GSM_Statemachine *state)
-{
-       unsigned char req_list[] = {FBUS_FRAME_HEADER, 0x96, 
-                                        0x09, /* location */
-                                        0x0f, 0x07};
-       if (SM_SendMessage(state, 7, 0x14, req_list) != GE_NONE) return GE_NOTREADY;
-       return SM_Block(state, data, 0x14);
-}
 
-#if 0
 static GSM_Error P7110_GetSMSFolders(GSM_Data *data, GSM_Statemachine *state)
 {
        unsigned char req[] = {FBUS_FRAME_HEADER, 0x7A, 0x00, 0x00};
@@ -890,65 +787,39 @@ static GSM_Error P7110_GetSMSFolders(GSM_Data *data, GSM_Statemachine *state)
 
 static GSM_Error P7110_GetSMSFolderStatus(GSM_Data *data, GSM_Statemachine *state)
 {
+#if 0
        unsigned char req[] = {FBUS_FRAME_HEADER, 0x6B, 
                                0x08, // Folder ID
                                0x0F, 0x01};
       
-        req[4] = data->SMSFolder->FolderID;
+        req[4] = data->OneSMSFolder->FolderID;
        dprintf("Getting SMS Folder Status...\n");
        if (SM_SendMessage(state, 7, 0x14, req) != GE_NONE) return GE_NOTREADY;
        return SM_Block(state, data, 0x14);
-}
 #endif
-
-static GSM_Error P7110_SendSMS(GSM_Data *data, GSM_Statemachine *state)
-{
-       unsigned char req[256] = {FBUS_FRAME_HEADER, 0x01, 0x02, 0x00};
-       unsigned char smsc_req[] = {FBUS_FRAME_HEADER, 0x33, 0x64, 0x00};
-       int length, i;
-
-       if (data->SMSMessage->MessageCenter.No) {
-               data->MessageCenter = &data->SMSMessage->MessageCenter;
-               P7110_GetSMSCenter(data, state);
-//             SM_SendMessage(state, 6, 0x02, smsc_req);
-//             SM_Block(state, data, 0x02);
-       }
-
-       length = EncodePDUSMS(data->SMSMessage, req + 6);
-       if (!length) return GE_SMSWRONGFORMAT;
-       dprintf("Sending SMS...(%d)\n", length);
-       for (i = 0; i < length + 6; i++) {
-               dprintf("%02x ", req[i]);
-       }
-       dprintf("\n");
-       if (SM_SendMessage(state, length+6, 0x02, req) != GE_NONE) return GE_NOTREADY;
-       return SM_Block(state, data, 0x02);
+       return GE_NONE;
 }
 
 static GSM_Error P7110_IncomingSMS(int messagetype, unsigned char *message, int length, GSM_Data *data)
 {
        GSM_Error       e = GE_NONE;
-       int             digits, bytes, i;
-
-       if (!data) return GE_INTERNALERROR;
+       int             digits, bytes;
+       
+       if (!data || !data->MessageCenter) return GE_INTERNALERROR;
 
        switch (message[3]) {
        case P7110_SUBSMS_SMSC_RCVD:
-               dprintf("SMSC Received\n");
                /* FIXME: Implement all these in gsm-sms.c */
                data->MessageCenter->No = message[4];
                data->MessageCenter->Format = message[6];
                data->MessageCenter->Validity = message[8];  /* due to changes in format */
+               
                digits = message[9];
                bytes = message[21] - 1;
                
 
                sprintf(data->MessageCenter->Name, "%s", message + 33);
                
-               strcpy(data->MessageCenter->Recipient, GetBCDNumber(message+9));
-               strcpy(data->MessageCenter->Number, GetBCDNumber(message+21));
-               data->MessageCenter->Type = message[22];
-               
                if (strlen(data->MessageCenter->Recipient) == 0) {
                        sprintf(data->MessageCenter->Recipient, "(none)");
                }
@@ -960,17 +831,8 @@ static GSM_Error P7110_IncomingSMS(int messagetype, unsigned char *message, int
                }
                
                break;
-
        case P7110_SUBSMS_SMS_SENT:
-               dprintf("SMS sent\n");
-               e = GE_SMSSENDOK;
-               break;
-
        case P7110_SUBSMS_SEND_FAIL:
-               dprintf("SMS sending failed\n");
-               e = GE_SMSSENDFAILED;
-               break;
-
        case P7110_SUBSMS_SMS_RCVD:
        case P7110_SUBSMS_CELLBRD_OK:
        case P7110_SUBSMS_CELLBRD_FAIL:
@@ -981,7 +843,6 @@ static GSM_Error P7110_IncomingSMS(int messagetype, unsigned char *message, int
                dprintf("Subtype 0x%02x of type 0x%02x (SMS handling) not implemented\n", message[3], P7110_MSG_SMS);
                e = GE_NOTIMPLEMENTED;
                break;
-
        default:
                dprintf("Unknown subtype of type 0x%02x (SMS handling): 0x%02x\n", P7110_MSG_SMS, message[3]);
                e = GE_UNKNOWN;
@@ -1593,7 +1454,7 @@ static GSM_Error P7110_GetSpeedDial(GSM_Data *data, GSM_Statemachine *state)
 static GSM_Error P7110_GetSMSCenter(GSM_Data *data, GSM_Statemachine *state)
 {
        GSM_Error       error;
-       unsigned char   req[] = {FBUS_FRAME_HEADER, P7110_SUBSMS_GET_SMSC, 0x64, 0x00};
+       unsigned char   req[2000] = {FBUS_FRAME_HEADER, P7110_SUBSMS_GET_SMSC, 0x64, 0x00};
        
        req[5] = data->MessageCenter->No;
        
@@ -1606,7 +1467,7 @@ static GSM_Error P7110_GetSMSCenter(GSM_Data *data, GSM_Statemachine *state)
 static GSM_Error P7110_GetClock(char req_type, GSM_Data *data, GSM_Statemachine *state)
 {
        GSM_Error       error;
-       unsigned char   req[] = {FBUS_FRAME_HEADER, req_type};
+       unsigned char   req[2000] = {FBUS_FRAME_HEADER, req_type};
        
        if (SM_SendMessage(state, 4, P7110_MSG_CLOCK, req) != GE_NONE) return GE_NOTREADY;
        error = SM_Block(state, data, P7110_MSG_CLOCK);
@@ -1617,8 +1478,8 @@ static GSM_Error P7110_GetClock(char req_type, GSM_Data *data, GSM_Statemachine
 static GSM_Error P7110_GetCalendarNote(GSM_Data *data, GSM_Statemachine *state)
 {
        GSM_Error       error = GE_NOTREADY;
-       unsigned char   req[] = {FBUS_FRAME_HEADER, P7110_SUBCAL_GET_NOTE, 0x00, 0x00};
-       unsigned char   date[] = {FBUS_FRAME_HEADER, P7110_SUBCLO_GET_DATE};
+       unsigned char   req[2000] = {FBUS_FRAME_HEADER, P7110_SUBCAL_GET_NOTE, 0x00, 0x00};
+       unsigned char   date[2000] = {FBUS_FRAME_HEADER, P7110_SUBCLO_GET_DATE};
        GSM_Data        tmpdata;
        GSM_DateTime    tmptime;