Diffstat (limited to 'gammu/emb/common/phone/at/siemens.c') (more/less context) (show whitespace changes)
-rw-r--r-- | gammu/emb/common/phone/at/siemens.c | 74 |
1 files changed, 35 insertions, 39 deletions
diff --git a/gammu/emb/common/phone/at/siemens.c b/gammu/emb/common/phone/at/siemens.c index ab7dd2c..7f66cf8 100644 --- a/gammu/emb/common/phone/at/siemens.c +++ b/gammu/emb/common/phone/at/siemens.c | |||
@@ -10,31 +10,17 @@ | |||
10 | 10 | ||
11 | #include "../../misc/coding/coding.h" | 11 | #include "../../misc/coding/coding.h" |
12 | #include "../../gsmcomon.h" | 12 | #include "../../gsmcomon.h" |
13 | #include "../../service/sms/gsmsms.h" | 13 | #include "../../service/sms/gsmsms.h" |
14 | #include "../pfunc.h" | 14 | #include "../pfunc.h" |
15 | 15 | ||
16 | extern GSM_Error ATGEN_HandleCMSError(GSM_StateMachine *s); | 16 | #include "atgen.h" |
17 | #include "siemens.h" | ||
17 | 18 | ||
18 | GSM_Error ATGEN_CMS35ReplySetFunction (GSM_Protocol_Message msg, GSM_StateMachine *s,char *function) | ||
19 | { | ||
20 | if (s->Protocol.Data.AT.EditMode) { | ||
21 | s->Protocol.Data.AT.EditMode = false; | ||
22 | return ERR_NONE; | ||
23 | } | ||
24 | dbgprintf ("Written %s",function); | ||
25 | if (s->Phone.Data.Priv.ATGEN.ReplyState == AT_Reply_OK){ | ||
26 | dbgprintf (" - OK\n"); | ||
27 | return ERR_NONE; | ||
28 | } else { | ||
29 | dbgprintf (" - error\n"); | ||
30 | return ERR_UNKNOWN; | ||
31 | } | ||
32 | } | ||
33 | 19 | ||
34 | GSM_Error GetSiemensFrame(GSM_Protocol_Message msg, GSM_StateMachine *s, char *templ, | 20 | static GSM_Error GetSiemensFrame(GSM_Protocol_Message msg, GSM_StateMachine *s, char *templ, |
35 | unsigned char *buffer, int *len) | 21 | unsigned char *buffer, int *len) |
36 | { | 22 | { |
37 | GSM_Phone_ATGENData *Priv = &s->Phone.Data.Priv.ATGEN; | 23 | GSM_Phone_ATGENData *Priv = &s->Phone.Data.Priv.ATGEN; |
38 | int i=2, pos=0, length=0; | 24 | int i=2, pos=0, length=0; |
39 | unsigned char buf[512]; | 25 | unsigned char buf[512]; |
40 | 26 | ||
@@ -54,13 +40,13 @@ GSM_Error GetSiemensFrame(GSM_Protocol_Message msg, GSM_StateMachine *s, char *t | |||
54 | i++; | 40 | i++; |
55 | } | 41 | } |
56 | *len = pos; | 42 | *len = pos; |
57 | return ERR_NONE; | 43 | return ERR_NONE; |
58 | } | 44 | } |
59 | 45 | ||
60 | GSM_Error SetSiemensFrame (GSM_StateMachine *s, unsigned char *buff, char *templ, | 46 | static GSM_Error SetSiemensFrame (GSM_StateMachine *s, unsigned char *buff, char *templ, |
61 | int Location, GSM_Phone_RequestID RequestID, int len) | 47 | int Location, GSM_Phone_RequestID RequestID, int len) |
62 | { | 48 | { |
63 | GSM_Phone_Data *Phone = &s->Phone.Data; | 49 | GSM_Phone_Data *Phone = &s->Phone.Data; |
64 | GSM_Error error; | 50 | GSM_Error error; |
65 | unsigned char req[20],req1[512],hexreq[2096]; | 51 | unsigned char req[20],req1[512],hexreq[2096]; |
66 | int MaxFrame,CurrentFrame,size,sz,pos=0; | 52 | int MaxFrame,CurrentFrame,size,sz,pos=0; |
@@ -87,13 +73,13 @@ GSM_Error SetSiemensFrame (GSM_StateMachine *s, unsigned char *buff, char *templ | |||
87 | error = GSM_WaitForOnce(s, NULL, 0x00, 0x00, 4); | 73 | error = GSM_WaitForOnce(s, NULL, 0x00, 0x00, 4); |
88 | if (error == ERR_TIMEOUT) return error; | 74 | if (error == ERR_TIMEOUT) return error; |
89 | } | 75 | } |
90 | return Phone->DispatchError; | 76 | return Phone->DispatchError; |
91 | } | 77 | } |
92 | 78 | ||
93 | GSM_Error ATGEN_CMS35ReplyGetBitmap(GSM_Protocol_Message msg, GSM_StateMachine *s) | 79 | GSM_Error SIEMENS_ReplyGetBitmap(GSM_Protocol_Message msg, GSM_StateMachine *s) |
94 | { | 80 | { |
95 | unsigned char buffer[4096]; | 81 | unsigned char buffer[4096]; |
96 | int length; | 82 | int length; |
97 | GSM_Error error; | 83 | GSM_Error error; |
98 | 84 | ||
99 | error = GetSiemensFrame(msg,s,"bmp",buffer,&length); | 85 | error = GetSiemensFrame(msg,s,"bmp",buffer,&length); |
@@ -101,50 +87,64 @@ GSM_Error ATGEN_CMS35ReplyGetBitmap(GSM_Protocol_Message msg, GSM_StateMachine * | |||
101 | dbgprintf ("Operator logo received lenght=%i\n",length); | 87 | dbgprintf ("Operator logo received lenght=%i\n",length); |
102 | error = BMP2Bitmap (buffer,NULL,s->Phone.Data.Bitmap); | 88 | error = BMP2Bitmap (buffer,NULL,s->Phone.Data.Bitmap); |
103 | if (error==ERR_NONE) return error; | 89 | if (error==ERR_NONE) return error; |
104 | else return ERR_UNKNOWN; | 90 | else return ERR_UNKNOWN; |
105 | } | 91 | } |
106 | 92 | ||
107 | GSM_Error ATGEN_CMS35ReplySetBitmap(GSM_Protocol_Message msg, GSM_StateMachine *s) | 93 | GSM_Error SIEMENS_ReplySetFunction (GSM_Protocol_Message msg, GSM_StateMachine *s,char *function) |
108 | { | 94 | { |
109 | return ATGEN_CMS35ReplySetFunction (msg, s, "Operator Logo"); | 95 | if (s->Protocol.Data.AT.EditMode) { |
96 | s->Protocol.Data.AT.EditMode = false; | ||
97 | return ERR_NONE; | ||
98 | } | ||
99 | dbgprintf ("Written %s",function); | ||
100 | if (s->Phone.Data.Priv.ATGEN.ReplyState == AT_Reply_OK){ | ||
101 | dbgprintf (" - OK\n"); | ||
102 | return ERR_NONE; | ||
103 | } else { | ||
104 | dbgprintf (" - error\n"); | ||
105 | return ERR_UNKNOWN; | ||
106 | } | ||
110 | } | 107 | } |
111 | 108 | ||
112 | GSM_Error ATGEN_GetBitmap(GSM_StateMachine *s, GSM_Bitmap *Bitmap) | 109 | GSM_Error SIEMENS_ReplySetBitmap(GSM_Protocol_Message msg, GSM_StateMachine *s) |
110 | { | ||
111 | return SIEMENS_ReplySetFunction (msg, s, "Operator Logo"); | ||
112 | } | ||
113 | |||
114 | GSM_Error SIEMENS_GetBitmap(GSM_StateMachine *s, GSM_Bitmap *Bitmap) | ||
113 | { | 115 | { |
114 | unsigned char req[32]; | 116 | unsigned char req[32]; |
115 | 117 | ||
116 | if (s->Phone.Data.Priv.ATGEN.Manufacturer!=AT_Siemens) return ERR_NOTSUPPORTED; | ||
117 | if (Bitmap->Type!=GSM_OperatorLogo) return ERR_NOTSUPPORTED; | 118 | if (Bitmap->Type!=GSM_OperatorLogo) return ERR_NOTSUPPORTED; |
118 | if (Bitmap->Location-1 < 0) Bitmap->Location++; | 119 | if (Bitmap->Location-1 < 0) Bitmap->Location++; |
119 | s->Phone.Data.Bitmap=Bitmap; | 120 | s->Phone.Data.Bitmap=Bitmap; |
120 | sprintf(req, "AT^SBNR=\"bmp\",%i\r", Bitmap->Location-1); | 121 | sprintf(req, "AT^SBNR=\"bmp\",%i\r", Bitmap->Location-1); |
121 | smprintf(s, "Getting Bitmap\n"); | 122 | smprintf(s, "Getting Bitmap\n"); |
122 | return GSM_WaitFor (s, req, strlen(req), 0x00, 4, ID_GetBitmap); | 123 | return GSM_WaitFor (s, req, strlen(req), 0x00, 4, ID_GetBitmap); |
123 | } | 124 | } |
124 | 125 | ||
125 | GSM_Error ATGEN_SetBitmap(GSM_StateMachine *s, GSM_Bitmap *Bitmap) | 126 | GSM_Error SIEMENS_SetBitmap(GSM_StateMachine *s, GSM_Bitmap *Bitmap) |
126 | { | 127 | { |
127 | unsigned char buffer[4096]; | 128 | unsigned char buffer[4096]; |
128 | int length; | 129 | int length; |
129 | GSM_Errorerror; | 130 | GSM_Errorerror; |
130 | 131 | ||
131 | if (s->Phone.Data.Priv.ATGEN.Manufacturer!=AT_Siemens) return ERR_NOTSUPPORTED; | ||
132 | if (Bitmap->Type!=GSM_OperatorLogo) return ERR_NOTSUPPORTED; | 132 | if (Bitmap->Type!=GSM_OperatorLogo) return ERR_NOTSUPPORTED; |
133 | 133 | ||
134 | error = Bitmap2BMP (buffer,NULL,Bitmap); | 134 | error = Bitmap2BMP (buffer,NULL,Bitmap); |
135 | if (error!=ERR_NONE) return error; | 135 | if (error!=ERR_NONE) return error; |
136 | length = 0x100 * buffer[3] + buffer[2]; | 136 | length = 0x100 * buffer[3] + buffer[2]; |
137 | buffer[58]=0xff; buffer[59]=0xff; buffer[60]=0xff; | 137 | buffer[58]=0xff; buffer[59]=0xff; buffer[60]=0xff; |
138 | if (Bitmap->Location-1 < 0) Bitmap->Location++; | 138 | if (Bitmap->Location-1 < 0) Bitmap->Location++; |
139 | s->Phone.Data.Bitmap=Bitmap; | 139 | s->Phone.Data.Bitmap=Bitmap; |
140 | return SetSiemensFrame(s, buffer,"bmp",Bitmap->Location-1, | 140 | return SetSiemensFrame(s, buffer,"bmp",Bitmap->Location-1, |
141 | ID_SetBitmap,length); | 141 | ID_SetBitmap,length); |
142 | } | 142 | } |
143 | 143 | ||
144 | GSM_Error ATGEN_CMS35ReplyGetRingtone(GSM_Protocol_Message msg, GSM_StateMachine *s) | 144 | GSM_Error SIEMENS_ReplyGetRingtone(GSM_Protocol_Message msg, GSM_StateMachine *s) |
145 | { | 145 | { |
146 | unsigned char buffer[32]; | 146 | unsigned char buffer[32]; |
147 | int length; | 147 | int length; |
148 | GSM_Error error; | 148 | GSM_Error error; |
149 | 149 | ||
150 | error = GetSiemensFrame(msg,s,"mid",s->Phone.Data.Ringtone->NokiaBinary.Frame,&length); | 150 | error = GetSiemensFrame(msg,s,"mid",s->Phone.Data.Ringtone->NokiaBinary.Frame,&length); |
@@ -155,45 +155,41 @@ GSM_Error ATGEN_CMS35ReplyGetRingtone(GSM_Protocol_Message msg, GSM_StateMachine | |||
155 | s->Phone.Data.Ringtone->NokiaBinary.Length= length; | 155 | s->Phone.Data.Ringtone->NokiaBinary.Length= length; |
156 | sprintf(buffer,"Individual"); | 156 | sprintf(buffer,"Individual"); |
157 | EncodeUnicode (s->Phone.Data.Ringtone->Name,buffer,strlen(buffer)); | 157 | EncodeUnicode (s->Phone.Data.Ringtone->Name,buffer,strlen(buffer)); |
158 | return ERR_NONE; | 158 | return ERR_NONE; |
159 | } | 159 | } |
160 | 160 | ||
161 | GSM_Error ATGEN_GetRingtone(GSM_StateMachine *s, GSM_Ringtone *Ringtone, bool PhoneRingtone) | 161 | GSM_Error SIEMENS_GetRingtone(GSM_StateMachine *s, GSM_Ringtone *Ringtone, bool PhoneRingtone) |
162 | { | 162 | { |
163 | unsigned char req[32]; | 163 | unsigned char req[32]; |
164 | 164 | ||
165 | if (s->Phone.Data.Priv.ATGEN.Manufacturer!=AT_Siemens) return ERR_NOTSUPPORTED; | ||
166 | |||
167 | s->Phone.Data.Ringtone=Ringtone; | 165 | s->Phone.Data.Ringtone=Ringtone; |
168 | sprintf(req, "AT^SBNR=\"mid\",%i\r", Ringtone->Location-1); | 166 | sprintf(req, "AT^SBNR=\"mid\",%i\r", Ringtone->Location-1); |
169 | smprintf(s, "Getting RingTone\n"); | 167 | smprintf(s, "Getting RingTone\n"); |
170 | return GSM_WaitFor (s, req, strlen(req), 0x00, 4, ID_GetRingtone); | 168 | return GSM_WaitFor (s, req, strlen(req), 0x00, 4, ID_GetRingtone); |
171 | } | 169 | } |
172 | 170 | ||
173 | GSM_Error ATGEN_CMS35ReplySetRingtone(GSM_Protocol_Message msg, GSM_StateMachine *s) | 171 | GSM_Error SIEMENS_ReplySetRingtone(GSM_Protocol_Message msg, GSM_StateMachine *s) |
174 | { | 172 | { |
175 | return ATGEN_CMS35ReplySetFunction (msg, s, "Ringtone"); | 173 | return SIEMENS_ReplySetFunction (msg, s, "Ringtone"); |
176 | } | 174 | } |
177 | 175 | ||
178 | GSM_Error ATGEN_SetRingtone(GSM_StateMachine *s, GSM_Ringtone *Ringtone, int *maxlength) | 176 | GSM_Error SIEMENS_SetRingtone(GSM_StateMachine *s, GSM_Ringtone *Ringtone, int *maxlength) |
179 | { | 177 | { |
180 | GSM_Phone_Data *Phone = &s->Phone.Data; | 178 | GSM_Phone_Data *Phone = &s->Phone.Data; |
181 | 179 | ||
182 | if (s->Phone.Data.Priv.ATGEN.Manufacturer!=AT_Siemens) return ERR_NOTSUPPORTED; | ||
183 | |||
184 | if (Ringtone->Location==255) Ringtone->Location=1; | 180 | if (Ringtone->Location==255) Ringtone->Location=1; |
185 | if (Ringtone->Location-1 > 1) return ERR_INVALIDLOCATION; | 181 | if (Ringtone->Location-1 > 1) return ERR_INVALIDLOCATION; |
186 | 182 | ||
187 | s->Phone.Data.Ringtone= Ringtone; | 183 | s->Phone.Data.Ringtone= Ringtone; |
188 | Phone->Ringtone = Ringtone; | 184 | Phone->Ringtone = Ringtone; |
189 | return SetSiemensFrame(s, Ringtone->NokiaBinary.Frame,"mid",Ringtone->Location-1, | 185 | return SetSiemensFrame(s, Ringtone->NokiaBinary.Frame,"mid",Ringtone->Location-1, |
190 | ID_SetRingtone,Ringtone->NokiaBinary.Length); | 186 | ID_SetRingtone,Ringtone->NokiaBinary.Length); |
191 | } | 187 | } |
192 | 188 | ||
193 | GSM_Error ATGEN_CMS35ReplyGetNextCal(GSM_Protocol_Message msg, GSM_StateMachine *s) | 189 | GSM_Error SIEMENS_ReplyGetNextCalendar(GSM_Protocol_Message msg, GSM_StateMachine *s) |
194 | { | 190 | { |
195 | GSM_Phone_Data *Data = &s->Phone.Data; | 191 | GSM_Phone_Data *Data = &s->Phone.Data; |
196 | GSM_CalendarEntry*Calendar = Data->Cal; | 192 | GSM_CalendarEntry*Calendar = Data->Cal; |
197 | GSM_ToDoEntry ToDo; | 193 | GSM_ToDoEntry ToDo; |
198 | GSM_Error error; | 194 | GSM_Error error; |
199 | unsigned char buffer[354]; | 195 | unsigned char buffer[354]; |
@@ -232,18 +228,18 @@ GSM_Error SIEMENS_GetNextCalendar(GSM_StateMachine *s, GSM_CalendarEntry *Note, | |||
232 | if (Location > MAX_VCALENDAR_LOCATION) return ERR_EMPTY; | 228 | if (Location > MAX_VCALENDAR_LOCATION) return ERR_EMPTY; |
233 | if (error==ERR_NONE) return error; | 229 | if (error==ERR_NONE) return error; |
234 | } | 230 | } |
235 | return error; | 231 | return error; |
236 | } | 232 | } |
237 | 233 | ||
238 | GSM_Error ATGEN_CMS35ReplySetCalendar(GSM_Protocol_Message msg, GSM_StateMachine *s) | 234 | GSM_Error SIEMENS_ReplyAddCalendarNote(GSM_Protocol_Message msg, GSM_StateMachine *s) |
239 | { | 235 | { |
240 | return ATGEN_CMS35ReplySetFunction (msg, s, "Calendar Note"); | 236 | return SIEMENS_ReplySetFunction (msg, s, "Calendar Note"); |
241 | } | 237 | } |
242 | 238 | ||
243 | GSM_Error ATGEN_CMS35ReplyDeleteCalendar(GSM_Protocol_Message msg, GSM_StateMachine *s) | 239 | GSM_Error SIEMENS_ReplyDelCalendarNote(GSM_Protocol_Message msg, GSM_StateMachine *s) |
244 | { | 240 | { |
245 | GSM_Phone_Data *Data = &s->Phone.Data; | 241 | GSM_Phone_Data *Data = &s->Phone.Data; |
246 | 242 | ||
247 | if (Data->Cal->Location > MAX_VCALENDAR_LOCATION) return ERR_UNKNOWN; | 243 | if (Data->Cal->Location > MAX_VCALENDAR_LOCATION) return ERR_UNKNOWN; |
248 | 244 | ||
249 | if (Data->Priv.ATGEN.ReplyState== AT_Reply_OK) { | 245 | if (Data->Priv.ATGEN.ReplyState== AT_Reply_OK) { |
@@ -280,13 +276,13 @@ GSM_Error SIEMENS_AddCalendarNote(GSM_StateMachine *s, GSM_CalendarEntry *Note) | |||
280 | error=GSM_EncodeVCALENDAR(req,&size,Note,true,Siemens_VCalendar); | 276 | error=GSM_EncodeVCALENDAR(req,&size,Note,true,Siemens_VCalendar); |
281 | 277 | ||
282 | return SetSiemensFrame (s,req,"vcs",Note->Location,ID_SetCalendarNote,size); | 278 | return SetSiemensFrame (s,req,"vcs",Note->Location,ID_SetCalendarNote,size); |
283 | } | 279 | } |
284 | 280 | ||
285 | /* (c) by Timo Teras */ | 281 | /* (c) by Timo Teras */ |
286 | GSM_Error ATGEN_SL45ReplyGetMemory(GSM_Protocol_Message msg, GSM_StateMachine *s) | 282 | GSM_Error SIEMENS_ReplyGetMemory(GSM_Protocol_Message msg, GSM_StateMachine *s) |
287 | { | 283 | { |
288 | #ifndef ENABLE_LGPL | 284 | #ifndef ENABLE_LGPL |
289 | GSM_Phone_ATGENData *Priv = &s->Phone.Data.Priv.ATGEN; | 285 | GSM_Phone_ATGENData *Priv = &s->Phone.Data.Priv.ATGEN; |
290 | GSM_MemoryEntry *Memory = s->Phone.Data.Memory; | 286 | GSM_MemoryEntry *Memory = s->Phone.Data.Memory; |
291 | unsigned char buffer[500],buffer2[500]; | 287 | unsigned char buffer[500],buffer2[500]; |
292 | 288 | ||