summaryrefslogtreecommitdiffabout
path: root/gammu/emb/common/gsmstate.h
Unidiff
Diffstat (limited to 'gammu/emb/common/gsmstate.h') (more/less context) (ignore whitespace changes)
-rw-r--r--gammu/emb/common/gsmstate.h1562
1 files changed, 1562 insertions, 0 deletions
diff --git a/gammu/emb/common/gsmstate.h b/gammu/emb/common/gsmstate.h
new file mode 100644
index 0000000..cb17623
--- a/dev/null
+++ b/gammu/emb/common/gsmstate.h
@@ -0,0 +1,1562 @@
1/* (c) 2002-2004 by Marcin Wiacek & Michal Cihar */
2
3#ifndef __gsm_state_h
4#define __gsm_state_h
5
6#include <time.h>
7
8#include "config.h"
9#include "misc/cfg.h"
10
11#ifdef GSM_ENABLE_NOKIA3320
12# include "phone/nokia/dct4/n3320.h"
13#endif
14#ifdef GSM_ENABLE_NOKIA3650
15# include "phone/nokia/dct4/n3650.h"
16#endif
17#ifdef GSM_ENABLE_NOKIA6110
18# include "phone/nokia/dct3/n6110.h"
19#endif
20#ifdef GSM_ENABLE_NOKIA6510
21# include "phone/nokia/dct4/n6510.h"
22#endif
23#ifdef GSM_ENABLE_NOKIA7110
24# include "phone/nokia/dct3/n7110.h"
25#endif
26#ifdef GSM_ENABLE_NOKIA9210
27# include "phone/nokia/dct3/n9210.h"
28#endif
29#ifdef GSM_ENABLE_ATGEN
30# include "phone/at/atgen.h"
31#endif
32#ifdef GSM_ENABLE_ALCATEL
33# include "phone/alcatel/alcatel.h"
34#endif
35#ifdef GSM_ENABLE_OBEXGEN
36# include "phone/obex/obexgen.h"
37#endif
38#ifdef GSM_ENABLE_MROUTERGEN
39# include "phone/symbian/mroutgen.h"
40#endif
41
42#ifndef GSM_USED_MBUS2
43# undef GSM_ENABLE_MBUS2
44#endif
45#ifndef GSM_USED_FBUS2
46# undef GSM_ENABLE_FBUS2
47#endif
48#ifndef GSM_USED_FBUS2DLR3
49# undef GSM_ENABLE_FBUS2DLR3
50#endif
51#ifndef GSM_USED_FBUS2DKU5
52# undef GSM_ENABLE_FBUS2DKU5
53#endif
54#ifndef GSM_USED_FBUS2PL2303
55# undef GSM_ENABLE_FBUS2PL2303
56#endif
57#ifndef GSM_USED_FBUS2BLUE
58# undef GSM_ENABLE_FBUS2BLUE
59#endif
60#ifndef GSM_USED_FBUS2IRDA
61# undef GSM_ENABLE_FBUS2IRDA
62#endif
63#ifndef GSM_USED_PHONETBLUE
64# undef GSM_ENABLE_PHONETBLUE
65#endif
66#ifndef GSM_USED_AT
67# undef GSM_ENABLE_AT
68#endif
69#ifndef GSM_USED_IRDAOBEX
70# undef GSM_ENABLE_IRDAOBEX
71#endif
72#ifndef GSM_USED_BLUEOBEX
73# undef GSM_ENABLE_BLUEOBEX
74#endif
75#ifndef GSM_USED_ALCABUS
76# undef GSM_ENABLE_ALCABUS
77#endif
78#ifndef GSM_USED_IRDAPHONET
79# undef GSM_ENABLE_IRDAPHONET
80#endif
81#ifndef GSM_USED_BLUEFBUS2
82# undef GSM_ENABLE_BLUEFBUS2
83#endif
84#ifndef GSM_USED_BLUEPHONET
85# undef GSM_ENABLE_BLUEPHONET
86#endif
87#ifndef GSM_USED_BLUEAT
88# undef GSM_ENABLE_BLUEAT
89#endif
90#ifndef GSM_USED_IRDAAT
91# undef GSM_ENABLE_IRDAAT
92#endif
93#ifndef GSM_USED_MROUTERBLUE
94# undef GSM_ENABLE_MROUTERBLUE
95#endif
96
97#if defined(GSM_ENABLE_NOKIA3320) || defined(GSM_ENABLE_NOKIA6110) || defined(GSM_ENABLE_NOKIA7110) || defined(GSM_ENABLE_NOKIA9210)
98# define GSM_ENABLE_NOKIA_DCT3
99#endif
100#if defined(GSM_ENABLE_NOKIA3650) || defined(GSM_ENABLE_NOKIA6510)
101# define GSM_ENABLE_NOKIA_DCT4
102#endif
103
104#include "protocol/protocol.h"
105#if defined(GSM_ENABLE_FBUS2) || defined(GSM_ENABLE_FBUS2IRDA) || defined(GSM_ENABLE_FBUS2DLR3) || defined(GSM_ENABLE_FBUS2BLUE) || defined(GSM_ENABLE_BLUEFBUS2) || defined(GSM_ENABLE_FBUS2DKU5) || defined(GSM_ENABLE_FBUS2PL2303)
106# include "protocol/nokia/fbus2.h"
107#endif
108#ifdef GSM_ENABLE_MBUS2
109# include "protocol/nokia/mbus2.h"
110#endif
111#if defined(GSM_ENABLE_PHONETBLUE) || defined(GSM_ENABLE_IRDAPHONET) || defined(GSM_ENABLE_BLUEPHONET)
112# include "protocol/nokia/phonet.h"
113#endif
114#if defined(GSM_ENABLE_AT) || defined(GSM_ENABLE_BLUEAT) || defined(GSM_ENABLE_IRDAAT)
115# include "protocol/at/at.h"
116#endif
117#ifdef GSM_ENABLE_ALCABUS
118# include "protocol/alcatel/alcabus.h"
119#endif
120#if defined(GSM_ENABLE_IRDAOBEX) || defined(GSM_ENABLE_BLUEOBEX)
121# include "protocol/obex/obex.h"
122#endif
123#if defined(GSM_ENABLE_MROUTERBLUE)
124# include "protocol/symbian/mrouter.h"
125#endif
126
127#define GSM_ENABLE_SERIALDEVICE
128#ifndef GSM_USED_SERIALDEVICE
129# undef GSM_ENABLE_SERIALDEVICE
130#endif
131#define GSM_ENABLE_IRDADEVICE
132#ifndef GSM_USED_IRDADEVICE
133# undef GSM_ENABLE_IRDADEVICE
134#endif
135#define GSM_ENABLE_BLUETOOTHDEVICE
136#ifndef GSM_USED_BLUETOOTHDEVICE
137# undef GSM_ENABLE_BLUETOOTHDEVICE
138#endif
139
140#ifdef DJGPP
141# undef GSM_ENABLE_IRDADEVICE
142# undef GSM_ENABLE_IRDAPHONET
143# undef GSM_ENABLE_IRDAOBEX
144# undef GSM_ENABLE_IRDAAT
145# undef GSM_ENABLE_FBUS2IRDA
146
147# undef GSM_ENABLE_BLUETOOTHDEVICE
148# undef GSM_ENABLE_BLUEPHONET
149# undef GSM_ENABLE_BLUEOBEX
150# undef GSM_ENABLE_BLUEAT
151# undef GSM_ENABLE_BLUEFBUS2
152# undef GSM_ENABLE_PHONETBLUE
153# undef GSM_ENABLE_FBUS2BLUE
154# undef GSM_ENABLE_MROUTERBLUE
155#endif
156
157#ifndef WIN32
158# ifdef ENABLE_LGPL
159# undef GSM_ENABLE_IRDADEVICE
160# undef GSM_ENABLE_IRDAPHONET
161# undef GSM_ENABLE_IRDAOBEX
162# undef GSM_ENABLE_IRDAAT
163# undef GSM_ENABLE_FBUS2IRDA
164
165# undef GSM_ENABLE_BLUETOOTHDEVICE
166# undef GSM_ENABLE_BLUEPHONET
167# undef GSM_ENABLE_BLUEOBEX
168# undef GSM_ENABLE_BLUEAT
169# undef GSM_ENABLE_BLUEFBUS2
170# undef GSM_ENABLE_PHONETBLUE
171# undef GSM_ENABLE_FBUS2BLUE
172# undef GSM_ENABLE_MROUTERBLUE
173# endif
174#endif
175
176#ifdef GSM_ENABLE_SERIALDEVICE
177# include "device/serial/ser_w32.h"
178# include "device/serial/ser_unx.h"
179# include "device/serial/ser_djg.h"
180#endif
181#ifdef GSM_ENABLE_IRDADEVICE
182# include "device/irda/irda.h"
183#endif
184#ifdef GSM_ENABLE_BLUETOOTHDEVICE
185# include "device/bluetoth/bluetoth.h"
186#endif
187
188#include "service/gsmpbk.h"
189#include "service/gsmnet.h"
190#include "service/gsmring.h"
191#include "service/gsmcal.h"
192#include "service/gsmdata.h"
193#include "service/gsmlogo.h"
194#include "service/gsmmisc.h"
195#include "service/gsmprof.h"
196#include "service/gsmcall.h"
197#include "service/sms/gsmsms.h"
198#include "service/sms/gsmems.h"
199#include "service/sms/gsmmulti.h"
200#include "service/backup/gsmback.h"
201
202typedef struct _GSM_StateMachine GSM_StateMachine;
203 typedef struct _GSM_User GSM_User;
204 typedef struct _OnePhoneModel OnePhoneModel;
205
206/* ------------------------- Device layer ---------------------------------- */
207
208/**
209 * Device functions, each device has to provide these.
210 */
211typedef struct {
212 /**
213 * Opens device.
214 */
215 GSM_Error (*OpenDevice) (GSM_StateMachine *s);
216 /**
217 * Closes device.
218 */
219 GSM_Error (*CloseDevice) (GSM_StateMachine *s);
220 /**
221 * Sets parity for device.
222 */
223 GSM_Error (*DeviceSetParity) (GSM_StateMachine *s, bool parity);
224 /**
225 * Sets dtr (data to read) and rts (ready to send) flags.
226 */
227 GSM_Error (*DeviceSetDtrRts) (GSM_StateMachine *s, bool dtr, bool rts);
228 /**
229 * Sets device speed.
230 */
231 GSM_Error (*DeviceSetSpeed) (GSM_StateMachine *s, int speed);
232 /**
233 * Attempts to read nbytes from device.
234 */
235 int (*ReadDevice) (GSM_StateMachine *s, void *buf, size_t nbytes);
236 /**
237 * Attempts to read nbytes from device.
238 */
239 int (*WriteDevice) (GSM_StateMachine *s, void *buf, size_t nbytes);
240} GSM_Device_Functions;
241
242#ifdef GSM_ENABLE_SERIALDEVICE
243 extern GSM_Device_Functions SerialDevice;
244#endif
245#ifdef GSM_ENABLE_IRDADEVICE
246 extern GSM_Device_Functions IrdaDevice;
247#endif
248#ifdef GSM_ENABLE_BLUETOOTHDEVICE
249 extern GSM_Device_Functions BlueToothDevice;
250#endif
251
252/**
253 * Structure containing device specific data and pointer to device functions -
254 * @ref GSM_Device_Functions. The data are in a union, so you can use only
255 * one device at one time.
256 */
257typedef struct {
258 union {
259 char fake;
260#ifdef GSM_ENABLE_SERIALDEVICE
261 GSM_Device_SerialData Serial;
262#endif
263#ifdef GSM_ENABLE_IRDADEVICE
264 GSM_Device_IrdaData Irda;
265#endif
266#ifdef GSM_ENABLE_BLUETOOTHDEVICE
267 GSM_Device_BlueToothDataBlueTooth;
268#endif
269 } Data;
270 GSM_Device_Functions *Functions;
271} GSM_Device;
272
273/* ---------------------- Protocol layer ----------------------------------- */
274
275/**
276 * Protocol functions, each protocol has to implement these.
277 */
278typedef struct {
279 /**
280 * Writes message to device.
281 */
282 GSM_Error (*WriteMessage) (GSM_StateMachine *s, unsigned char *buffer,
283 int length, unsigned char type);
284 /**
285 * This one is called when character is received from device.
286 */
287 GSM_Error (*StateMachine) (GSM_StateMachine *s, unsigned char rx_char);
288 /**
289 * Protocol initialisation.
290 */
291 GSM_Error (*Initialise) (GSM_StateMachine *s);
292 /**
293 * Protocol termination.
294 */
295 GSM_Error (*Terminate) (GSM_StateMachine *s);
296} GSM_Protocol_Functions;
297
298#ifdef GSM_ENABLE_MBUS2
299 extern GSM_Protocol_Functions MBUS2Protocol;
300#endif
301#if defined(GSM_ENABLE_FBUS2) || defined(GSM_ENABLE_FBUS2IRDA) || defined(GSM_ENABLE_FBUS2DLR3) || defined(GSM_ENABLE_FBUS2DKU5) || defined(GSM_ENABLE_FBUS2BLUE) || defined(GSM_ENABLE_BLUEFBUS2) || defined(GSM_ENABLE_FBUS2PL2303)
302 extern GSM_Protocol_Functions FBUS2Protocol;
303#endif
304#if defined(GSM_ENABLE_PHONETBLUE) || defined(GSM_ENABLE_IRDAPHONET) || defined(GSM_ENABLE_BLUEPHONET)
305 extern GSM_Protocol_Functions PHONETProtocol;
306#endif
307#if defined(GSM_ENABLE_AT) || defined(GSM_ENABLE_BLUEAT) || defined(GSM_ENABLE_IRDAAT)
308 extern GSM_Protocol_Functions ATProtocol;
309#endif
310#ifdef GSM_ENABLE_ALCABUS
311 extern GSM_Protocol_Functions ALCABUSProtocol;
312#endif
313#if defined(GSM_ENABLE_IRDAOBEX) || defined(GSM_ENABLE_BLUEOBEX)
314 extern GSM_Protocol_Functions OBEXProtocol;
315#endif
316#if defined(GSM_ENABLE_MROUTERBLUE)
317 extern GSM_Protocol_Functions MROUTERProtocol;
318#endif
319
320/**
321 * Structure containing protocol specific data and pointer to protocol
322 * functions - @ref GSM_Protocol_Functions. The data are in a structure, so
323 * you may use more protocols at once and switch between them.
324 */
325typedef struct {
326 struct {
327 char fake;
328#ifdef GSM_ENABLE_MBUS2
329 GSM_Protocol_MBUS2Data MBUS2;
330#endif
331#if defined(GSM_ENABLE_FBUS2) || defined(GSM_ENABLE_FBUS2IRDA) || defined(GSM_ENABLE_FBUS2DLR3) || defined(GSM_ENABLE_FBUS2DKU5) || defined(GSM_ENABLE_FBUS2PL2303) || defined(GSM_ENABLE_FBUS2BLUE) || defined(GSM_ENABLE_BLUEFBUS2)
332 GSM_Protocol_FBUS2Data FBUS2;
333#endif
334#if defined(GSM_ENABLE_PHONETBLUE) || defined(GSM_ENABLE_IRDAPHONET) || defined(GSM_ENABLE_BLUEPHONET)
335 GSM_Protocol_PHONETData PHONET;
336#endif
337#if defined(GSM_ENABLE_AT) || defined(GSM_ENABLE_BLUEAT) || defined(GSM_ENABLE_IRDAAT)
338 GSM_Protocol_ATData AT;
339#endif
340#ifdef GSM_ENABLE_ALCABUS
341 GSM_Protocol_ALCABUSDataALCABUS;
342#endif
343#if defined(GSM_ENABLE_IRDAOBEX) || defined(GSM_ENABLE_BLUEOBEX)
344 GSM_Protocol_OBEXData OBEX;
345#endif
346#if defined(GSM_ENABLE_MROUTERBLUE)
347 GSM_Protocol_MROUTERDataMROUTER;
348#endif
349 } Data;
350 GSM_Protocol_Functions *Functions;
351} GSM_Protocol;
352
353/* -------------------------- Phone layer ---------------------------------- */
354
355/**
356 * Phone requests identificators, these are used for internally identifying
357 * which operation is being performed.
358 */
359typedef enum {
360 ID_None=1,
361 ID_GetModel,
362 ID_GetFirmware,
363 ID_EnableSecurity,
364 ID_GetIMEI,
365 ID_GetDateTime,
366 ID_GetAlarm,
367 ID_GetMemory,
368 ID_GetMemoryStatus,
369 ID_GetSMSC,
370 ID_GetSMSMessage,
371 ID_EnableEcho,
372 ID_EnableErrorInfo,
373 ID_SetOBEX,
374 ID_GetSignalQuality,
375 ID_GetBatteryCharge,
376 ID_GetSMSFolders,
377 ID_GetSMSFolderStatus,
378 ID_GetSMSStatus,
379 ID_AddSMSFolder,
380 ID_GetNetworkInfo,
381 ID_GetRingtone,
382 ID_DialVoice,
383 ID_GetCalendarNotesInfo,
384 ID_GetCalendarNote,
385 ID_GetSecurityCode,
386 ID_GetWAPBookmark,
387 ID_GetBitmap,
388 ID_SaveSMSMessage,
389 ID_CancelCall,
390 ID_SetDateTime,
391 ID_SetAlarm,
392 ID_DisableConnectFunc,
393 ID_EnableConnectFunc,
394 ID_AnswerCall,
395 ID_SetBitmap,
396 ID_SetRingtone,
397 ID_DeleteSMSMessage,
398 ID_DeleteCalendarNote,
399 ID_SetPath,
400 ID_SetSMSC,
401 ID_SetProfile,
402 ID_SetMemory,
403 ID_DeleteMemory,
404 ID_SetCalendarNote,
405 ID_SetIncomingSMS,
406 ID_SetIncomingCB,
407 ID_GetCalendarNotePos,
408 ID_Initialise,
409 ID_GetConnectSet,
410 ID_SetWAPBookmark,
411 ID_GetLocale,
412 ID_SetLocale,
413 ID_GetCalendarSettings,
414 ID_SetCalendarSettings,
415 ID_GetGPRSPoint,
416 ID_SetGPRSPoint,
417 ID_EnableGPRSPoint,
418 ID_DeleteWAPBookmark,
419 ID_Netmonitor,
420 ID_HoldCall,
421 ID_UnholdCall,
422 ID_ConferenceCall,
423 ID_SplitCall,
424 ID_TransferCall,
425 ID_SwitchCall,
426 ID_GetManufactureMonth,
427 ID_GetProductCode,
428 ID_GetOriginalIMEI,
429 ID_GetHardware,
430 ID_GetPPM,
431 ID_GetSMSMode,
432 ID_GetSMSMemories,
433 ID_GetManufacturer,
434 ID_SetMemoryType,
435 ID_SetMemoryCharset,
436 ID_GetMMSSettings,
437 ID_SetSMSParameters,
438 ID_GetFMStation,
439 ID_SetFMStation,
440 ID_GetLanguage,
441 ID_Reset,
442 ID_GetToDo,
443 ID_PressKey,
444 ID_DeleteAllToDo,
445 ID_SetLight,
446 ID_Divert,
447 ID_SetToDo,
448 ID_PlayTone,
449 ID_GetChatSettings,
450 ID_GetSyncMLSettings,
451 ID_GetSyncMLName,
452 ID_GetSecurityStatus,
453 ID_EnterSecurityCode,
454 ID_GetProfile,
455 ID_GetRingtonesInfo,
456 ID_MakeAuthentication,
457 ID_GetSpeedDial,
458 ID_ResetPhoneSettings,
459 ID_SendDTMF,
460 ID_GetDisplayStatus,
461 ID_SetAutoNetworkLogin,
462 ID_SetConnectSet,
463 ID_SetMMSSettings,
464 ID_GetSIMIMSI,
465 ID_GetFileInfo,
466 ID_FileSystemStatus,
467 ID_GetFile,
468 ID_AddFile,
469 ID_AddFolder,
470 ID_DeleteFile,
471#ifdef GSM_ENABLE_ALCATEL
472 /* AT mode */
473 ID_SetFlowControl,
474 ID_AlcatelConnect,
475 ID_AlcatelProtocol,
476
477 /* Binary mode */
478 ID_AlcatelAttach,
479 ID_AlcatelDetach,
480 ID_AlcatelCommit,
481 ID_AlcatelCommit2,
482 ID_AlcatelEnd,
483 ID_AlcatelClose,
484 ID_AlcatelStart,
485 ID_AlcatelSelect1,
486 ID_AlcatelSelect2,
487 ID_AlcatelSelect3,
488 ID_AlcatelBegin1,
489 ID_AlcatelBegin2,
490 ID_AlcatelGetIds1,
491 ID_AlcatelGetIds2,
492 ID_AlcatelGetCategories1,
493 ID_AlcatelGetCategories2,
494 ID_AlcatelGetCategoryText1,
495 ID_AlcatelGetCategoryText2,
496 ID_AlcatelAddCategoryText1,
497 ID_AlcatelAddCategoryText2,
498 ID_AlcatelGetFields1,
499 ID_AlcatelGetFields2,
500 ID_AlcatelGetFieldValue1,
501 ID_AlcatelGetFieldValue2,
502 ID_AlcatelDeleteItem1,
503 ID_AlcatelDeleteItem2,
504 ID_AlcatelDeleteField,
505 ID_AlcatelCreateField,
506 ID_AlcatelUpdateField,
507#endif
508 ID_IncomingFrame,
509
510 ID_User1,
511 ID_User2,
512 ID_User3,
513 ID_User4,
514 ID_User5,
515 ID_User6,
516 ID_User7,
517 ID_User8,
518 ID_User9,
519 ID_User10,
520
521 ID_EachFrame
522} GSM_Phone_RequestID;
523
524/**
525 * Phone related data are stored here.
526 */
527typedef struct {
528 /**
529 * Phone IMEI (or serial number).
530 */
531 char IMEI[MAX_IMEI_LENGTH];
532 /**
533 * Phone manufacturer as reported by phone.
534 */
535 char Manufacturer[MAX_MANUFACTURER_LENGTH];
536 /**
537 * Phone model as reported by phone.
538 */
539 char Model[MAX_MODEL_LENGTH];
540 /**
541 * Model information, pointer to static @ref allmodels array.
542 */
543 OnePhoneModel *ModelInfo;
544 /**
545 * Phone version as reported by phone. It doesn't have to be numerical
546 * at all.
547 */
548 char Version[MAX_VERSION_LENGTH];
549 /**
550 * Phone version date, might be empty for some models.
551 */
552 char VerDate[MAX_VERSION_DATE_LENGTH];
553 /**
554 * Phone version as number, if applicable.
555 */
556 double VerNum;
557 /**
558 * Cache for hardware version used by some modules.
559 */
560 char HardwareCache[50];
561 /**
562 * Cache for product code version used by some modules.
563 */
564 char ProductCodeCache[50];
565
566 /**
567 * Counter used for disabling startup info on phone, see
568 * @ref GSM_Phone_Functions::ShowStartInfo . After this is 0, the startup info is hidden.
569 */
570 int StartInfoCounter;
571
572 /**
573 * Pointer to structure used internally by phone drivers.
574 */
575 GSM_GPRSAccessPoint*GPRSPoint;
576 /**
577 * Pointer to structure used internally by phone drivers.
578 */
579 GSM_SpeedDial *SpeedDial;
580 /**
581 * Pointer to structure used internally by phone drivers.
582 */
583 GSM_DateTime *DateTime;
584 /**
585 * Pointer to structure used internally by phone drivers.
586 */
587 GSM_Alarm *Alarm;
588 /**
589 * Pointer to structure used internally by phone drivers.
590 */
591 GSM_MemoryEntry *Memory;
592 /**
593 * Pointer to structure used internally by phone drivers.
594 */
595 GSM_MemoryStatus*MemoryStatus;
596 /**
597 * Pointer to structure used internally by phone drivers.
598 */
599 GSM_SMSC *SMSC;
600 /**
601 * Pointer to structure used internally by phone drivers.
602 */
603 GSM_MultiSMSMessage*GetSMSMessage;
604 /**
605 * Pointer to structure used internally by phone drivers.
606 */
607 GSM_SMSMessage *SaveSMSMessage;
608 /**
609 * Pointer to structure used internally by phone drivers.
610 */
611 GSM_SMSMemoryStatus*SMSStatus;
612 /**
613 * Pointer to structure used internally by phone drivers.
614 */
615 GSM_SMSFolders *SMSFolders;
616 /**
617 * Used internally by phone drivers.
618 */
619 int *VoiceRecord;
620 /**
621 * Used internally by phone drivers.
622 */
623 int CallID;
624 /**
625 * Pointer to structure used internally by phone drivers.
626 */
627 GSM_SignalQuality*SignalQuality;
628 /**
629 * Pointer to structure used internally by phone drivers.
630 */
631 GSM_BatteryCharge*BatteryCharge;
632 /**
633 * Pointer to structure used internally by phone drivers.
634 */
635 GSM_NetworkInfo *NetworkInfo;
636 /**
637 * Pointer to structure used internally by phone drivers.
638 */
639 GSM_Ringtone *Ringtone;
640 /**
641 * Pointer to structure used internally by phone drivers.
642 */
643 GSM_CalendarEntry*Cal;
644 /**
645 * Used internally by phone drivers.
646 */
647 unsigned char *SecurityCode;
648 /**
649 * Pointer to structure used internally by phone drivers.
650 */
651 GSM_WAPBookmark *WAPBookmark;
652 /**
653 * Pointer to structure used internally by phone drivers.
654 */
655 GSM_MultiWAPSettings*WAPSettings;
656 /**
657 * Pointer to structure used internally by phone drivers.
658 */
659 GSM_Bitmap *Bitmap;
660 /**
661 * Used internally by phone drivers.
662 */
663 unsigned char *Netmonitor;
664 /**
665 * Pointer to structure used internally by phone drivers.
666 */
667 GSM_MultiCallDivert*Divert;
668 /**
669 * Pointer to structure used internally by phone drivers.
670 */
671 GSM_ToDoEntry *ToDo;
672 /**
673 * Used internally by phone drivers.
674 */
675 bool PressKey;
676 /**
677 * Pointer to structure used internally by phone drivers.
678 */
679 GSM_SecurityCodeType*SecurityStatus;
680 /**
681 * Pointer to structure used internally by phone drivers.
682 */
683 GSM_Profile *Profile;
684 /**
685 * Pointer to structure used internally by phone drivers.
686 */
687 GSM_AllRingtonesInfo*RingtonesInfo;
688 /**
689 * Pointer to structure used internally by phone drivers.
690 */
691 GSM_DisplayFeatures*DisplayFeatures;
692 /**
693 * Pointer to structure used internally by phone drivers.
694 */
695 GSM_FMStation *FMStation;
696 /**
697 * Pointer to structure used internally by phone drivers.
698 */
699 GSM_Locale *Locale;
700 /**
701 * Pointer to structure used internally by phone drivers.
702 */
703 GSM_CalendarSettings*CalendarSettings;
704 /**
705 * Used internally by phone drivers.
706 */
707 unsigned char *PhoneString;
708 /**
709 * Used internally by phone drivers.
710 */
711 int StartPhoneString;
712 /**
713 * Pointer to structure used internally by phone drivers.
714 */
715 GSM_File *FileInfo;
716 /**
717 * Pointer to structure used internally by phone drivers.
718 */
719 GSM_File *File;
720 /**
721 * Pointer to structure used internally by phone drivers.
722 */
723 GSM_FileSystemStatus*FileSystemStatus;
724 GSM_ChatSettings*ChatSettings;
725 GSM_SyncMLSettings*SyncMLSettings;
726
727 /**
728 * Should phone notify about incoming calls?
729 */
730 bool EnableIncomingCall;
731 /**
732 * Should phone notify about incoming SMSes?
733 */
734 bool EnableIncomingSMS;
735 /**
736 * Should phone notify about incoming CBs?
737 */
738 bool EnableIncomingCB;
739 /**
740 * Should phone notify about incoming USSDs?
741 */
742 bool EnableIncomingUSSD;
743
744 /**
745 * Last message received from phone.
746 */
747 GSM_Protocol_Message*RequestMsg;
748 /**
749 * Last message sent by Gammu.
750 */
751 GSM_Protocol_Message*SentMsg;
752 /**
753 * What operation is being performed now, see @ref GSM_Phone_RequestID
754 * for possible values.
755 */
756 GSM_Phone_RequestIDRequestID;
757 /**
758 * Error returned by function in phone module.
759 */
760 GSM_Error DispatchError;
761
762 /**
763 * Structure with private phone modules data.
764 */
765 struct {
766 int fake;
767#ifdef GSM_ENABLE_NOKIA3320
768 GSM_Phone_N3320Data N3320;
769#endif
770#ifdef GSM_ENABLE_NOKIA3650
771 GSM_Phone_N3650Data N3650;
772#endif
773#ifdef GSM_ENABLE_NOKIA6110
774 GSM_Phone_N6110Data N6110;
775#endif
776#ifdef GSM_ENABLE_NOKIA6510
777 GSM_Phone_N6510Data N6510;
778#endif
779#ifdef GSM_ENABLE_NOKIA7110
780 GSM_Phone_N7110Data N7110;
781#endif
782#ifdef GSM_ENABLE_ATGEN
783 GSM_Phone_ATGENData ATGEN;
784#endif
785#ifdef GSM_ENABLE_ALCATEL
786 GSM_Phone_ALCATELData ALCATEL;
787#endif
788#ifdef GSM_ENABLE_OBEXGEN
789 GSM_Phone_OBEXGENData OBEXGEN;
790#endif
791#ifdef GSM_ENABLE_MROUTERGEN
792 GSM_Phone_MROUTERGENData MROUTERGEN;
793#endif
794 } Priv;
795} GSM_Phone_Data;
796
797/**
798 * Structure for defining reply functions.
799 *
800 * Function is called when requestID matches current operation or is
801 * ID_IncomingFrame and msgtype matches start message and (if msgtype is just
802 * one character) subtypechar is zero or subtypechar-th character of message
803 * matches subtype.
804 *
805 * Should be used in array with last element containing ID_None as requestID.
806 */
807typedef struct {
808 /**
809 * Pointer to function that should be executed.
810 */
811 GSM_Error (*Function)(GSM_Protocol_Message msg, GSM_StateMachine *s);
812 /**
813 * Message type, if it is longer than 1 character, it disables subtype
814 * checking.
815 */
816 unsigned char *msgtype;
817 /**
818 * Which character of message should be checked as subtype. Zero to
819 * disable subtype checking.
820 */
821 int subtypechar;
822 /**
823 * Subtype to be checked.
824 */
825 unsigned char subtype;
826 /**
827 * Phone request when this can be called, use ID_IncomingFrame when
828 * you want to use this in any state.
829 */
830 GSM_Phone_RequestIDrequestID;
831} GSM_Reply_Function;
832
833/**
834 * Structure defining phone functions.
835 */
836typedef struct {
837 /**
838 * Names of supported models separated by |. Must contain at least one
839 * name.
840 */
841 char *models;
842 /**
843 * Array of reply functions for the phone, see
844 * @ref GSM_Reply_Function for details about it.
845 */
846 GSM_Reply_Function *ReplyFunctions;
847 /**
848 * Initializes phone.
849 */
850 GSM_Error (*Initialise) (GSM_StateMachine *s);
851 /**
852 * Terminates phone communication.
853 */
854 GSM_Error (*Terminate) (GSM_StateMachine *s);
855 /**
856 * Dispatches messages from phone, at the end it should call
857 * @ref GSM_DispatchMessage.
858 */
859 GSM_Error (*DispatchMessage) (GSM_StateMachine *s);
860 /**
861 * Enables showing information on phone display.
862 */
863 GSM_Error (*ShowStartInfo) (GSM_StateMachine *s, bool enable);
864 /**
865 * Reads manufacturer from phone.
866 */
867 GSM_Error (*GetManufacturer) (GSM_StateMachine *s);
868 /**
869 * Reads model from phone.
870 */
871 GSM_Error (*GetModel) (GSM_StateMachine *s);
872 /**
873 * Reads firmware information from phone.
874 */
875 GSM_Error (*GetFirmware)(GSM_StateMachine *s);
876 /**
877 * Reads IMEI/serial number from phone.
878 */
879 GSM_Error (*GetIMEI) (GSM_StateMachine *s);
880 /**
881 * Gets date and time from phone.
882 */
883 GSM_Error (*GetOriginalIMEI) (GSM_StateMachine *s, char *value);
884 /**
885 * Gets month when device was manufactured.
886 */
887 GSM_Error (*GetManufactureMonth)(GSM_StateMachine *s, char *value);
888 /**
889 * Gets product code of device.
890 */
891 GSM_Error (*GetProductCode) (GSM_StateMachine *s, char *value);
892 /**
893 * Gets hardware information about device.
894 */
895 GSM_Error (*GetHardware)(GSM_StateMachine *s, char *value);
896 /**
897 * Gets PPM (Post Programmable Memory) info from phone
898 * (in other words for Nokia get, which language pack is in phone)
899 */
900 GSM_Error (*GetPPM) (GSM_StateMachine *s, char *value);
901 /**
902 * Gets SIM IMSI from phone.
903 */
904 GSM_Error (*GetSIMIMSI) (GSM_StateMachine *s, char *IMSI);
905 /**
906 * Reads date and time from phone.
907 */
908 GSM_Error (*GetDateTime)(GSM_StateMachine *s, GSM_DateTime *date_time);
909 /**
910 * Sets date and time in phone.
911 */
912 GSM_Error (*SetDateTime)(GSM_StateMachine *s, GSM_DateTime *date_time);
913 /**
914 * Reads alarm set in phone.
915 */
916 GSM_Error (*GetAlarm) (GSM_StateMachine *s, GSM_Alarm*alarm);
917 /**
918 * Sets alarm in phone.
919 */
920 GSM_Error (*SetAlarm) (GSM_StateMachine *s, GSM_Alarm *alarm);
921 /**
922 * Gets locale from phone.
923 */
924 GSM_Error (*GetLocale) (GSM_StateMachine *s, GSM_Locale *locale);
925 /**
926 * Sets locale of phone.
927 */
928 GSM_Error (*SetLocale) (GSM_StateMachine *s, GSM_Locale *locale);
929 /**
930 * Emulates key press or key release.
931 */
932 GSM_Error (*PressKey) (GSM_StateMachine *s, GSM_KeyCode Key, bool Press);
933 /**
934 * Performs phone reset.
935 */
936 GSM_Error (*Reset) (GSM_StateMachine *s, bool hard);
937 /**
938 * Resets phone settings.
939 */
940 GSM_Error (*ResetPhoneSettings) (GSM_StateMachine *s, GSM_ResetSettingsType Type);
941 /**
942 * Enters security code (PIN, PUK,...) .
943 */
944 GSM_Error (*EnterSecurityCode) (GSM_StateMachine *s, GSM_SecurityCode Code);
945 /**
946 * Queries whether some security code needs to be entered./
947 */
948 GSM_Error (*GetSecurityStatus) (GSM_StateMachine *s, GSM_SecurityCodeType *Status);
949 /**
950 * Acquired display status.
951 */
952 GSM_Error (*GetDisplayStatus) (GSM_StateMachine *s, GSM_DisplayFeatures *features);
953 /**
954 * Enables network auto login.
955 */
956 GSM_Error (*SetAutoNetworkLogin)(GSM_StateMachine *s);
957 /**
958 * Gets information about batery charge and phone charging state.
959 */
960 GSM_Error (*GetBatteryCharge) (GSM_StateMachine *s, GSM_BatteryCharge *bat);
961 /**
962 * Reads signal quality (strength and error rate).
963 */
964 GSM_Error (*GetSignalQuality) (GSM_StateMachine *s, GSM_SignalQuality *sig);
965 /**
966 * Gets network information.
967 */
968 GSM_Error (*GetNetworkInfo) (GSM_StateMachine *s, GSM_NetworkInfo *netinfo);
969 /**
970 * Reads category from phone.
971 */
972 GSM_Error (*GetCategory)(GSM_StateMachine *s, GSM_Category *Category);
973 /**
974 * Adds category to phone.
975 */
976 GSM_Error (*AddCategory)(GSM_StateMachine *s, GSM_Category *Category);
977 /**
978 * Reads category status (number of used entries) from phone.
979 */
980 GSM_Error (*GetCategoryStatus) (GSM_StateMachine *s, GSM_CategoryStatus *Status);
981 /**
982 * Gets memory (phonebooks or calls) status (eg. number of used and
983 * free entries).
984 */
985 GSM_Error (*GetMemoryStatus) (GSM_StateMachine *s, GSM_MemoryStatus *status);
986 /**
987 * Reads entry from memory (phonebooks or calls). Which entry should
988 * be read is defined in entry.
989 */
990 GSM_Error (*GetMemory) (GSM_StateMachine *s, GSM_MemoryEntry *entry);
991 /**
992 * Reads entry from memory (phonebooks or calls). Which entry should
993 * be read is defined in entry. This can be easily used for reading all entries.
994 */
995 GSM_Error (*GetNextMemory) (GSM_StateMachine *s, GSM_MemoryEntry *entry, bool start);
996 /**
997 * Sets memory (phonebooks or calls) entry.
998 */
999 GSM_Error (*SetMemory) (GSM_StateMachine *s, GSM_MemoryEntry *entry);
1000 /**
1001 * Deletes memory (phonebooks or calls) entry.
1002 */
1003 GSM_Error (*AddMemory) (GSM_StateMachine *s, GSM_MemoryEntry *entry);
1004 /**
1005 * Deletes memory (phonebooks or calls) entry.
1006 */
1007 GSM_Error (*DeleteMemory) (GSM_StateMachine *s, GSM_MemoryEntry *entry);
1008 /**
1009 * Deletes all memory (phonebooks or calls) entries of specified type.
1010 */
1011 GSM_Error (*DeleteAllMemory) (GSM_StateMachine *s, GSM_MemoryType MemoryType);
1012 /**
1013 * Gets speed dial.
1014 */
1015 GSM_Error (*GetSpeedDial) (GSM_StateMachine *s, GSM_SpeedDial *Speed);
1016 /**
1017 * Sets speed dial.
1018 */
1019 GSM_Error (*SetSpeedDial) (GSM_StateMachine *s, GSM_SpeedDial *Speed);
1020 /**
1021 * Gets SMS Service Center number and SMS settings.
1022 */
1023 GSM_Error (*GetSMSC) (GSM_StateMachine *s, GSM_SMSC *smsc);
1024 /**
1025 * Sets SMS Service Center number and SMS settings.
1026 */
1027 GSM_Error (*SetSMSC) (GSM_StateMachine *s, GSM_SMSC *smsc);
1028 /**
1029 * Gets information about SMS memory (read/unread/size of memory for
1030 * both SIM and phone).
1031 */
1032 GSM_Error (*GetSMSStatus) (GSM_StateMachine *s, GSM_SMSMemoryStatus *status);
1033 /**
1034 * Reads SMS message.
1035 */
1036 GSM_Error (*GetSMS) (GSM_StateMachine *s, GSM_MultiSMSMessage *sms);
1037 /**
1038 * Reads next (or first if start set) SMS message. This might be
1039 * faster for some phones than using @ref GetSMS for each message.
1040 */
1041 GSM_Error (*GetNextSMS) (GSM_StateMachine *s, GSM_MultiSMSMessage *sms, bool start);
1042 /**
1043 * Sets SMS.
1044 */
1045 GSM_Error (*SetSMS) (GSM_StateMachine *s, GSM_SMSMessage *sms);
1046 /**
1047 * Adds SMS to specified folder.
1048 */
1049 GSM_Error (*AddSMS) (GSM_StateMachine *s, GSM_SMSMessage *sms);
1050 /**
1051 * Deletes SMS.
1052 */
1053 GSM_Error (*DeleteSMS) (GSM_StateMachine *s, GSM_SMSMessage *sms);
1054 /**
1055 * Sends SMS.
1056 */
1057 GSM_Error (*SendSMS) (GSM_StateMachine *s, GSM_SMSMessage *sms);
1058 /**
1059 * Sends SMS already saved in phone.
1060 */
1061 GSM_Error (*SendSavedSMS)(GSM_StateMachine *s, int Folder, int Location);
1062 /**
1063 * Enable/disable notification on incoming SMS.
1064 */
1065 GSM_Error (*SetIncomingSMS) (GSM_StateMachine *s, bool enable);
1066 /**
1067 * Gets network information from phone.
1068 */
1069 GSM_Error (*SetIncomingCB) (GSM_StateMachine *s, bool enable);
1070 /**
1071 * Returns SMS folders information.
1072 */
1073 GSM_Error (*GetSMSFolders) (GSM_StateMachine *s, GSM_SMSFolders *folders);
1074 /**
1075 * Creates SMS folder.
1076 */
1077 GSM_Error (*AddSMSFolder) (GSM_StateMachine *s, unsigned char *name);
1078 /**
1079 * Deletes SMS folder.
1080 */
1081 GSM_Error (*DeleteSMSFolder) (GSM_StateMachine *s, int ID);
1082 /**
1083 * Dials number and starts voice call.
1084 */
1085 GSM_Error (*DialVoice) (GSM_StateMachine *s, char *Number, GSM_CallShowNumber ShowNumber);
1086 /**
1087 * Accept current incoming call.
1088 */
1089 GSM_Error (*AnswerCall) (GSM_StateMachine *s, int ID, bool all);
1090 /**
1091 * Deny current incoming call.
1092 */
1093 GSM_Error (*CancelCall) (GSM_StateMachine *s, int ID, bool all);
1094 /**
1095 * Holds call.
1096 */
1097 GSM_Error (*HoldCall) (GSM_StateMachine *s, int ID);
1098 /**
1099 * Unholds call.
1100 */
1101 GSM_Error (*UnholdCall) (GSM_StateMachine *s, int ID);
1102 /**
1103 * Initiates conference call.
1104 */
1105 GSM_Error (*ConferenceCall) (GSM_StateMachine *s, int ID);
1106 /**
1107 * Splits call.
1108 */
1109 GSM_Error (*SplitCall) (GSM_StateMachine *s, int ID);
1110 /**
1111 * Transfers call.
1112 */
1113 GSM_Error (*TransferCall) (GSM_StateMachine *s, int ID, bool next);
1114 /**
1115 * Switches call.
1116 */
1117 GSM_Error (*SwitchCall) (GSM_StateMachine *s, int ID, bool next);
1118 /**
1119 * Gets call diverts.
1120 */
1121 GSM_Error (*GetCallDivert) (GSM_StateMachine *s, GSM_MultiCallDivert *divert);
1122 /**
1123 * Sets call diverts.
1124 */
1125 GSM_Error (*SetCallDivert) (GSM_StateMachine *s, GSM_MultiCallDivert *divert);
1126 /**
1127 * Cancels all diverts.
1128 */
1129 GSM_Error (*CancelAllDiverts) (GSM_StateMachine *s);
1130 /**
1131 * Activates/deactivates noticing about incoming calls.
1132 */
1133 GSM_Error (*SetIncomingCall) (GSM_StateMachine *s, bool enable);
1134 /**
1135 * Activates/deactivates noticing about incoming USSDs (UnStructured Supplementary Services).
1136 */
1137 GSM_Error (*SetIncomingUSSD) (GSM_StateMachine *s, bool enable);
1138 /**
1139 * Sends DTMF (Dual Tone Multi Frequency) tone.
1140 */
1141 GSM_Error (*SendDTMF) (GSM_StateMachine *s, char *sequence);
1142 /**
1143 * Gets ringtone from phone.
1144 */
1145 GSM_Error (*GetRingtone)(GSM_StateMachine *s, GSM_Ringtone *Ringtone, bool PhoneRingtone);
1146 /**
1147 * Sets ringtone in phone.
1148 */
1149 GSM_Error (*SetRingtone)(GSM_StateMachine *s, GSM_Ringtone *Ringtone, int *maxlength);
1150 /**
1151 * Acquires ringtone informaiton.
1152 */
1153 GSM_Error (*GetRingtonesInfo) (GSM_StateMachine *s, GSM_AllRingtonesInfo *Info);
1154 /**
1155 * Deletes user defined ringtones from phone.
1156 */
1157 GSM_Error (*DeleteUserRingtones)(GSM_StateMachine *s);
1158 /**
1159 * Plays tone.
1160 */
1161 GSM_Error (*PlayTone) (GSM_StateMachine *s, int Herz, unsigned char Volume, bool start);
1162 /**
1163 * Reads WAP bookmark.
1164 */
1165 GSM_Error (*GetWAPBookmark) (GSM_StateMachine *s, GSM_WAPBookmark *bookmark);
1166 /**
1167 * Sets WAP bookmark.
1168 */
1169 GSM_Error (*SetWAPBookmark) (GSM_StateMachine *s, GSM_WAPBookmark *bookmark);
1170 /**
1171 * Deletes WAP bookmark.
1172 */
1173 GSM_Error (*DeleteWAPBookmark) (GSM_StateMachine *s, GSM_WAPBookmark *bookmark);
1174 /**
1175 * Acquires WAP settings.
1176 */
1177 GSM_Error (*GetWAPSettings) (GSM_StateMachine *s, GSM_MultiWAPSettings *settings);
1178 /**
1179 * Changes WAP settings.
1180 */
1181 GSM_Error (*SetWAPSettings) (GSM_StateMachine *s, GSM_MultiWAPSettings *settings);
1182 /**
1183 * Acquires MMS settings.
1184 */
1185 GSM_Error (*GetMMSSettings) (GSM_StateMachine *s, GSM_MultiWAPSettings *settings);
1186 /**
1187 * Changes MMS settings.
1188 */
1189 GSM_Error (*SetMMSSettings) (GSM_StateMachine *s, GSM_MultiWAPSettings *settings);
1190 /**
1191 * Acquires SyncML settings.
1192 */
1193 GSM_Error (*GetSyncMLSettings) (GSM_StateMachine *s, GSM_SyncMLSettings *settings);
1194 /**
1195 * Changes SyncML settings.
1196 */
1197 GSM_Error (*SetSyncMLSettings) (GSM_StateMachine *s, GSM_SyncMLSettings *settings);
1198 /**
1199 * Acquires chat/presence settings.
1200 */
1201 GSM_Error (*GetChatSettings) (GSM_StateMachine *s, GSM_ChatSettings *settings);
1202 /**
1203 * Changes chat/presence settings.
1204 */
1205 GSM_Error (*SetChatSettings) (GSM_StateMachine *s, GSM_ChatSettings *settings);
1206 /**
1207 * Gets bitmap.
1208 */
1209 GSM_Error (*GetBitmap) (GSM_StateMachine *s, GSM_Bitmap *Bitmap);
1210 /**
1211 * Sets bitmap.
1212 */
1213 GSM_Error (*SetBitmap) (GSM_StateMachine *s, GSM_Bitmap *Bitmap);
1214 /**
1215 * Gets status of ToDos (count of used entries).
1216 */
1217 GSM_Error (*GetToDoStatus) (GSM_StateMachine *s, GSM_ToDoStatus *status);
1218 /**
1219 * Reads ToDo from phone.
1220 */
1221 GSM_Error (*GetToDo) (GSM_StateMachine *s, GSM_ToDoEntry *ToDo);
1222 /**
1223 * Reads ToDo from phone.
1224 */
1225 GSM_Error (*GetNextToDo)(GSM_StateMachine *s, GSM_ToDoEntry *ToDo, bool start);
1226 /**
1227 * Sets ToDo in phone.
1228 */
1229 GSM_Error (*SetToDo) (GSM_StateMachine *s, GSM_ToDoEntry *ToDo);
1230 /**
1231 * Adds ToDo in phone.
1232 */
1233 GSM_Error (*AddToDo) (GSM_StateMachine *s, GSM_ToDoEntry *ToDo);
1234 /**
1235 * Deletes ToDo entry in phone.
1236 */
1237 GSM_Error (*DeleteToDo) (GSM_StateMachine *s, GSM_ToDoEntry *ToDo);
1238 /**
1239 * Deletes all todo entries in phone.
1240 */
1241 GSM_Error (*DeleteAllToDo) (GSM_StateMachine *s);
1242 /**
1243 * Retrieves calendar status (number of used entries).
1244 */
1245 GSM_Error (*GetCalendarStatus) (GSM_StateMachine *s, GSM_CalendarStatus *Status);
1246 /**
1247 * Retrieves calendar entry.
1248 */
1249 GSM_Error (*GetCalendar)(GSM_StateMachine *s, GSM_CalendarEntry *Note);
1250 /**
1251 * Retrieves calendar entry. This is useful for continuous reading of all
1252 * calendar entries.
1253 */
1254 GSM_Error (*GetNextCalendar) (GSM_StateMachine *s, GSM_CalendarEntry *Note, bool start);
1255 /**
1256 * Sets calendar entry
1257 */
1258 GSM_Error (*SetCalendar)(GSM_StateMachine *s, GSM_CalendarEntry *Note);
1259 /**
1260 * Adds calendar entry.
1261 */
1262 GSM_Error (*AddCalendar)(GSM_StateMachine *s, GSM_CalendarEntry *Note);
1263 /**
1264 * Deletes calendar entry.
1265 */
1266 GSM_Error (*DeleteCalendar) (GSM_StateMachine *s, GSM_CalendarEntry *Note);
1267 /**
1268 * Deletes all calendar entries.
1269 */
1270 GSM_Error (*DeleteAllCalendar) (GSM_StateMachine *s);
1271 /**
1272 * Reads calendar settings.
1273 */
1274 GSM_Error (*GetCalendarSettings)(GSM_StateMachine *s, GSM_CalendarSettings *settings);
1275 /**
1276 * Sets calendar settings.
1277 */
1278 GSM_Error (*SetCalendarSettings)(GSM_StateMachine *s, GSM_CalendarSettings *settings);
1279 /**
1280 * Gets note.
1281 */
1282 GSM_Error (*GetNote) (GSM_StateMachine *s, GSM_NoteEntry *Note, bool refresh);
1283 /**
1284 * Reads profile.
1285 */
1286 GSM_Error (*GetProfile) (GSM_StateMachine *s, GSM_Profile *Profile);
1287 /**
1288 * Updates profile.
1289 */
1290 GSM_Error (*SetProfile) (GSM_StateMachine *s, GSM_Profile *Profile);
1291 /**
1292 * Reads FM station.
1293 */
1294 GSM_Error (*GetFMStation) (GSM_StateMachine *s, GSM_FMStation *FMStation);
1295 /**
1296 * Sets FM station.
1297 */
1298 GSM_Error (*SetFMStation) (GSM_StateMachine *s, GSM_FMStation *FMStation);
1299 /**
1300 * Clears defined FM stations.
1301 */
1302 GSM_Error (*ClearFMStations) (GSM_StateMachine *s);
1303 /**
1304 * Gets next filename from filesystem.
1305 */
1306 GSM_Error (*GetNextFileFolder) (GSM_StateMachine *s, GSM_File *File, bool start);
1307 /**
1308 * Gets file part from filesystem.
1309 */
1310 GSM_Error (*GetFilePart)(GSM_StateMachine *s, GSM_File *File);
1311 /**
1312 * Adds file part to filesystem.
1313 */
1314 GSM_Error (*AddFilePart)(GSM_StateMachine *s, GSM_File *File, int *Pos);
1315 /**
1316 * Acquires filesystem status.
1317 */
1318 GSM_Error (*GetFileSystemStatus)(GSM_StateMachine *s, GSM_FileSystemStatus *Status);
1319 /**
1320 * Deletes file from filessytem.
1321 */
1322 GSM_Error (*DeleteFile) (GSM_StateMachine *s, unsigned char *ID);
1323 /**
1324 * Adds folder to filesystem.
1325 */
1326 GSM_Error (*AddFolder) (GSM_StateMachine *s, GSM_File *File);
1327 /**
1328 * Gets GPRS access point.
1329 */
1330 GSM_Error (*GetGPRSAccessPoint) (GSM_StateMachine *s, GSM_GPRSAccessPoint *point);
1331 /**
1332 * Sets GPRS access point.
1333 */
1334 GSM_Error (*SetGPRSAccessPoint) (GSM_StateMachine *s, GSM_GPRSAccessPoint *point);
1335} GSM_Phone_Functions;
1336
1337 extern GSM_Phone_Functions NAUTOPhone;
1338#ifdef GSM_ENABLE_NOKIA3320
1339 extern GSM_Phone_Functions N3320Phone;
1340#endif
1341#ifdef GSM_ENABLE_NOKIA3650
1342 extern GSM_Phone_Functions N3650Phone;
1343#endif
1344#ifdef GSM_ENABLE_NOKIA6110
1345 extern GSM_Phone_Functions N6110Phone;
1346#endif
1347#ifdef GSM_ENABLE_NOKIA6510
1348 extern GSM_Phone_Functions N6510Phone;
1349#endif
1350#ifdef GSM_ENABLE_NOKIA7110
1351 extern GSM_Phone_Functions N7110Phone;
1352#endif
1353#ifdef GSM_ENABLE_NOKIA9210
1354 extern GSM_Phone_Functions N9210Phone;
1355#endif
1356#ifdef GSM_ENABLE_ATGEN
1357 extern GSM_Phone_Functions ATGENPhone;
1358#endif
1359#ifdef GSM_ENABLE_ALCATEL
1360 extern GSM_Phone_Functions ALCATELPhone;
1361#endif
1362#ifdef GSM_ENABLE_OBEXGEN
1363 extern GSM_Phone_Functions OBEXGENPhone;
1364#endif
1365#ifdef GSM_ENABLE_MROUTERGEN
1366 extern GSM_Phone_Functions MROUTERGENPhone;
1367#endif
1368
1369typedef struct {
1370 GSM_Phone_Data Data;
1371 GSM_Phone_Functions*Functions;
1372} GSM_Phone;
1373
1374/* --------------------------- User layer ---------------------------------- */
1375
1376struct _GSM_User {
1377 GSM_Reply_Function *UserReplyFunctions;
1378
1379 void (*IncomingCall) (char *Device, GSM_Call call);
1380 void (*IncomingSMS)(char *Device, GSM_SMSMessage sms);
1381 void (*IncomingCB) (char *Device, GSM_CBMessage cb);
1382 void (*IncomingUSSD) (char *Device, char *Text);
1383 void (*SendSMSStatus) (char *Device, int status, int MessageReference);
1384};
1385
1386/* --------------------------- Statemachine layer -------------------------- */
1387
1388typedef enum {
1389 GCT_MBUS2=1,
1390 GCT_FBUS2,
1391 GCT_FBUS2DLR3,
1392 GCT_FBUS2DKU5,
1393 GCT_FBUS2PL2303,
1394 GCT_FBUS2BLUE,
1395 GCT_FBUS2IRDA,
1396 GCT_PHONETBLUE,
1397 GCT_AT,
1398 GCT_MROUTERBLUE,
1399
1400 GCT_IRDAOBEX,
1401 GCT_IRDAAT,
1402 GCT_IRDAPHONET,
1403 GCT_BLUEFBUS2,
1404 GCT_BLUEAT,
1405 GCT_BLUEPHONET,
1406 GCT_BLUEOBEX
1407} GSM_ConnectionType;
1408
1409typedef struct {
1410 /* Config file (or Registry or...) variables */
1411 char Model[50]; /* Model from config file */
1412 char DebugLevel[50]; /* Debug level */
1413 char *Device; /* Device name from config file */
1414 char *Connection; /* Connection type as string */
1415 char *SyncTime; /* Synchronize time on startup? */
1416 char *LockDevice; /* Lock device ? (Unix) */
1417 char *DebugFile; /* Name of debug file */
1418 char *Localize; /* Name of localisation file */
1419 char *StartInfo; /* Display something during start ? */
1420 bool UseGlobalDebugFile;/* Should we use global debug file?*/
1421 bool DefaultModel;
1422 bool DefaultDebugLevel;
1423 bool DefaultDevice;
1424 bool DefaultConnection;
1425 bool DefaultSyncTime;
1426 bool DefaultLockDevice;
1427 bool DefaultDebugFile;
1428 bool DefaultLocalize;
1429 bool DefaultStartInfo;
1430} GSM_Config;
1431
1432 #define MAX_CONFIG_NUM 5
1433
1434struct _GSM_StateMachine {
1435 GSM_ConnectionType ConnectionType; /* Type of connection as int */
1436 char *LockFile; /* Lock file name for Unix */
1437 Debug_Info di; /* Debug information */
1438 bool opened; /* Is connection opened ? */
1439 GSM_Config Config[MAX_CONFIG_NUM + 1];
1440 GSM_Config *CurrentConfig; /* Config file (or Registry or...) variables */
1441 int ConfigNum;
1442 INI_Section *msg; /* Localisation strings structure */
1443 int ReplyNum; /* How many times make sth. */
1444 int Speed; /* For some protocols used speed */
1445
1446 GSM_Device Device;
1447 GSM_Protocol Protocol;
1448 GSM_Phone Phone;
1449 GSM_User User;
1450};
1451
1452/* ------------------------ Other general definitions ---------------------- */
1453
1454 GSM_Error GSM_RegisterAllPhoneModules(GSM_StateMachine *s);
1455
1456 GSM_Error GSM_InitConnection (GSM_StateMachine *s, int ReplyNum);
1457 GSM_Error GSM_TerminateConnection(GSM_StateMachine *s);
1458
1459 int GSM_ReadDevice (GSM_StateMachine *s, bool wait);
1460
1461 GSM_Error GSM_WaitForOnce (GSM_StateMachine *s, unsigned char *buffer,
1462 int length, unsigned char type, int time);
1463
1464 GSM_Error GSM_WaitFor (GSM_StateMachine *s, unsigned char *buffer,
1465 int length, unsigned char type, int time,
1466 GSM_Phone_RequestID request);
1467
1468 GSM_Error GSM_DispatchMessage (GSM_StateMachine *s);
1469
1470 INI_Section *GSM_FindGammuRC(void);
1471
1472 bool GSM_ReadConfig (INI_Section *cfg_info, GSM_Config *cfg, int num);
1473
1474 void GSM_DumpMessageLevel2 (GSM_StateMachine *s, unsigned char *message, int messagesize, int type);
1475 void GSM_DumpMessageLevel3 (GSM_StateMachine *s, unsigned char *message, int messagesize, int type);
1476
1477/* ---------------------- Phone features ----------------------------------- */
1478
1479typedef enum {
1480 /* n6110.c */
1481 F_CAL33 = 1, /* Calendar,3310 style - 10 reminders, Unicode, 3 coding types*/
1482 F_CAL52, /* Calendar,5210 style - full Unicode, etc. */
1483 F_CAL82, /* Calendar,8250 style - "normal", but with Unicode */
1484 F_RING_SM, /* Ringtones returned in SM format - 33xx */
1485 F_NORING, /* No ringtones */
1486 F_NOPBKUNICODE, /* No phonebook in Unicode */
1487 F_NOWAP, /* No WAP */
1488 F_NOCALLER, /* No caller groups */
1489 F_NOPICTURE, /* No Picture Images */
1490 F_NOPICTUREUNI, /* No Picture Images text in Unicode */
1491 F_NOSTARTUP, /* No startup logo */
1492 F_NOCALENDAR, /* No calendar */
1493 F_NOSTARTANI, /* Startup logo is not animated */
1494 F_POWER_BATT, /* Network and battery level get from netmonitor */
1495 F_PROFILES33, /* Phone profiles in 3310 style */
1496 F_PROFILES51, /* Phone profiles in 5110 style */
1497 F_MAGICBYTES, /* Phone can make authentication with magic bytes */
1498 F_NODTMF, /* Phone can't send DTMF */
1499 F_DISPSTATUS, /* Phone return display status */
1500 F_NOCALLINFO,
1501
1502 /* n3320.c */
1503 F_DAYMONTH, /* Day and month reversed in pbk, when compare to GSM models*/
1504
1505 /* n6510.c */
1506 F_PBK35, /* Phonebook in 3510 style with ringtones ID */
1507 F_PBKIMG, /* Phonebook in 7250 style with picture ID */
1508 F_PBKTONEGAL,/* Phonebook with selecting ringtones from gallery */
1509 F_PBKSMSLIST, /* Phonebook with SMS list */
1510 F_PBKUSER, /* Phonebook with user ID */
1511 F_RADIO, /* Phone with FM radio */
1512 F_TODO63, /* ToDo in 6310 style - 0x55 msg type */
1513 F_TODO66, /* ToDo in 6610 style - like calendar, with date and other*/
1514 F_NOMIDI, /* No ringtones in MIDI */
1515 F_BLUETOOTH, /* Bluetooth support */
1516 F_NOFILESYSTEM, /* No images, ringtones, java saved in special filesystem*/
1517 F_NOMMS, /* No MMS sets in phone */
1518 F_NOGPRSPOINT, /* GPRS point are not useable */
1519 F_CAL35, /* Calendar,3510 style - Reminder,Call,Birthday */
1520 F_CAL65, /* Calendar,6510 style - CBMM, method 3 */
1521 F_WAPMMSPROXY, /* WAP & MMS settings contains first & second proxy */
1522
1523 /* n6510.c && n7110.c */
1524 F_VOICETAGS, /* Voice tags available */
1525 F_CAL62, /* Calendar,6210 style - Call,Birthday,Memo,Meeting */
1526
1527 /* AT modules */
1528 F_SMSONLYSENT, /* Phone supports only sent/unsent messages */
1529 F_BROKENCPBS, /* CPBS on some memories can hang phone */
1530 F_M20SMS, /* Siemens M20 like SMS handling */
1531 F_SLOWWRITE, /* Use slower writing which some phone need */
1532 F_SMSME900, /* SMS in ME start from location 900 - case of Sagem */
1533 F_ALCATEL /* Phone supports Alcatel protocol */
1534} Feature;
1535
1536/* For models table */
1537struct _OnePhoneModel {
1538 char *model;
1539 char *number;
1540 char *irdamodel;
1541 Feature features[12];
1542};
1543
1544 bool IsPhoneFeatureAvailable(OnePhoneModel *model, Feature feature);
1545 OnePhoneModel *GetModelData (char *model, char *number, char *irdamodel);
1546
1547#ifdef __GNUC__
1548__attribute__((format(printf, 2, 3)))
1549#endif
1550int smprintf(GSM_StateMachine *s, const char *format, ...);
1551
1552void GSM_OSErrorInfo(GSM_StateMachine *s, char *description);
1553
1554#ifdef GSM_ENABLE_BACKUP
1555void GSM_GetPhoneFeaturesForBackup(GSM_StateMachine *s, GSM_Backup_Info *info);
1556#endif
1557
1558#endif
1559
1560/* How should editor hadle tabs in this file? Add editor commands here.
1561 * vim: noexpandtab sw=8 ts=8 sts=8:
1562 */