Found in "gnokii-working" directory, some November-patches version
[gnokii.git] / include / gsm-api.h
index fa655b4..fefca54 100644 (file)
 /*
 
+  $Id$
+
   G N O K I I
 
   A Linux/Unix toolset and driver for Nokia mobile phones.
 
+  Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml.
+
   Released under the terms of the GNU GPL, see file COPYING for more details.
        
   Header file for the various functions, definitions etc. used to implement
   the handset interface.  See gsm-api.c for more details.
 
-*/
-
-#ifndef __gsm_api_h
-#define __gsm_api_h
-#include "misc.h"
-#include "gsm-common.h"
-#include "data/rlp-common.h"
-#include "devices/device.h"
-#include "gsm-phonebook.h"
-#include "gsm-networks.h"
-#include "gsm-bitmaps.h"
-#include "gsm-datetime.h"
-#include "gsm-calendar.h"
-#include "gsm-sms.h"
-#include "gsm-ringtones.h"
-#include "gsm-wap.h"
-
-/* Undefined functions in fbus/mbus files */
-extern GSM_Error Unimplemented(void);
-#define UNIMPLEMENTED (void *) Unimplemented
-extern GSM_Error NotSupported(void);
-#define NOTSUPPORTED (void *) NotSupported
-
-/* Define the structure used to hold pointers to the various API functions.
-   This is in effect the master list of functions provided by the gnokii API.
-   Modules containing the model specific code each contain one of these
-   structures which is "filled in" with the corresponding function within the
-   model specific code.  If a function is not supported or not implemented, a
-   generic not implemented function is used to return a GE_NOTIMPLEMENTED
-   error code. */
-
-typedef struct {
-
-  /* FIXME: comment this. */
-
-  GSM_Error (*Initialise)( char *port_device, char *initlength,
-                           GSM_ConnectionType connection,
-                           void (*rlp_callback)(RLP_F96Frame *frame));
-
-  void      (*DispatchMessage) (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); 
-
-  void      (*Terminate)(void);        
-
-  void      (*KeepAlive)(void);
-  
-  GSM_Error (*GetMemoryLocation)( GSM_PhonebookEntry *entry );
-
-  GSM_Error (*WritePhonebookLocation)( GSM_PhonebookEntry *entry );
-
-  GSM_Error (*GetSpeedDial)( GSM_SpeedDial *entry);
-
-  GSM_Error (*SetSpeedDial)( GSM_SpeedDial *entry);
-
-  GSM_Error (*GetMemoryStatus)( GSM_MemoryStatus *Status);
-
-  GSM_Error (*GetSMSStatus)( GSM_SMSStatus *Status);
-
-  GSM_Error (*GetSMSCenter)( GSM_MessageCenter *MessageCenter );
-
-  GSM_Error (*SetSMSCenter)( GSM_MessageCenter *MessageCenter );
-
-  GSM_Error (*GetSMSMessage)( GSM_SMSMessage *Message );
-
-  GSM_Error (*DeleteSMSMessage)( GSM_SMSMessage *Message );
-
-  GSM_Error (*SendSMSMessage)( GSM_SMSMessage *Message);
-
-  GSM_Error (*SaveSMSMessage)( GSM_SMSMessage *Message);
-
-    /* If units is set to a valid GSM_RFUnits value, the code
-       will return level in these units if it is able.  Otherwise
-       value will be returned as GRF_Arbitary.  If phone doesn't
-       support GetRFLevel, function returns GE_NOTSUPPORTED */
-  GSM_Error (*GetRFLevel)( GSM_RFUnits *units, float *level );
-
-    /* Works the same as GetRFLevel, except returns battery
-       level if known. */
-  GSM_Error (*GetBatteryLevel)( GSM_BatteryUnits *units, float *level );
-
-  GSM_Error (*GetPowerSource)( GSM_PowerSource *source);
-
-  GSM_Error (*GetDisplayStatus)( int *Status);
-
-  GSM_Error (*EnterSecurityCode)( GSM_SecurityCode Code);
-
-  GSM_Error (*GetSecurityCodeStatus)( int *Status );
-
-  GSM_Error (*GetSecurityCode)( GSM_SecurityCode *Code);
-  
-  GSM_Error (*GetIMEI)( char *imei );
-
-  GSM_Error (*GetRevision)( char *revision );
-
-  GSM_Error (*GetModel)( char *model );
-
-  GSM_Error (*GetDateTime)( GSM_DateTime *date_time);
-
-  GSM_Error (*SetDateTime)( GSM_DateTime *date_time);
-
-  GSM_Error (*GetAlarm)( int alarm_number, GSM_DateTime *date_time );
-
-  GSM_Error (*SetAlarm)( int alarm_number, GSM_DateTime *date_time );
-
-  GSM_Error (*DialVoice)( char *Number);
-
-  GSM_Error (*DialData)( char *Number, char type, void (* callpassup)(char c));
-
-  GSM_Error (*GetIncomingCallNr)( char *Number );
-
-  GSM_Error (*GetNetworkInfo) ( GSM_NetworkInfo *NetworkInfo );
-
-  GSM_Error (*GetCalendarNote) ( GSM_CalendarNote *CalendarNote);
-
-  GSM_Error (*WriteCalendarNote) ( GSM_CalendarNote *CalendarNote);
-
-  GSM_Error (*DeleteCalendarNote) ( GSM_CalendarNote *CalendarNote);
-
-  GSM_Error (*NetMonitor) ( unsigned char mode, char *Screen );
-
-  GSM_Error (*SendDTMF) ( char *String );
-
-  GSM_Error (*GetBitmap) ( GSM_Bitmap *Bitmap );
-  
-  GSM_Error (*SetBitmap) ( GSM_Bitmap *Bitmap );
-
-  GSM_Error (*SetRingtone) ( GSM_Ringtone *ringtone , int *maxlength);
-
-  GSM_Error (*SetBinRingtone) ( GSM_BinRingtone *ringtone);
-  
-  GSM_Error (*GetBinRingtone) ( GSM_BinRingtone *ringtone);
-  
-  GSM_Error (*Reset) ( unsigned char type );
-
-  GSM_Error (*GetProfile) ( GSM_Profile *Profile );
-
-  GSM_Error (*SetProfile) ( GSM_Profile *Profile );
-  
-  bool      (*SendRLPFrame) ( RLP_F96Frame *frame, bool out_dtx );
-
-  GSM_Error (*CancelCall) ();
-     
-  GSM_Error (*PressKey) (int key, int event);
-  
-  GSM_Error (*EnableDisplayOutput) ();
-  
-  GSM_Error (*DisableDisplayOutput) ();
-  GSM_Error (*EnableCellBroadcast) ();
-
-  GSM_Error (*DisableCellBroadcast) ();
-
-  GSM_Error (*ReadCellBroadcast) ( GSM_CBMessage *Message );
-
-  GSM_Error (*PlayTone) (int Herz, u8 Volume);
-
-  GSM_Error (*GetProductProfileSetting) ( GSM_PPS *PPS);
-
-  GSM_Error (*SetProductProfileSetting) ( GSM_PPS *PPS);
-
-  GSM_Error (*GetOperatorName) ( GSM_Network *operator);  
-
-  GSM_Error (*SetOperatorName) ( GSM_Network *operator);    
-
-  GSM_Error (*GetVoiceMailbox) ( GSM_PhonebookEntry *entry);  
-
-  GSM_Error (*PhoneTests) ();    
-
-  GSM_Error (*SimlockInfo) ( GSM_AllSimlocks *siml);    
-
-  GSM_Error (*GetCalendarNotesInfo) (GSM_NotesInfo *NotesInfo);
-
-  GSM_Error (*GetSMSFolders) ( GSM_SMSFolders *folders);      
-
-  GSM_Error (*ResetPhoneSettings) ();      
-
-  GSM_Error (*GetWAPBookmark) ( GSM_WAPBookmark *bookmark);      
-
-  GSM_Error (*SetWAPBookmark) ( GSM_WAPBookmark *bookmark);      
-
-  GSM_Error (*GetWAPSettings) ( GSM_WAPSettings *settings);      
-
-  GSM_Error (*CallDivert) ( GSM_CallDivert *cd );      
-
-  GSM_Error (*AnswerCall) (char s);
-
-  GSM_Error (*GetManufacturer)( char *manufacturer );
-
-} GSM_Functions;
-
-typedef struct {
-
-  /* FIXME: comment this. */
-
-  GSM_Error (*Initialise)( char *port_device, char *initlength,
-                           GSM_ConnectionType connection,
-                           void (*rlp_callback)(RLP_F96Frame *frame));
-
-  int (*SendMessage) (u16 message_length, u8 message_type, u8 *buffer);
-
-  int (*SendFrame)   (u16 message_length, u8 message_type, u8 *buffer); 
-
-  int (*WritePhone)  (u16 length, u8 *buffer); 
-
-  void (*Terminate)(void);     
+  $Log$
+  Revision 1.1.1.6  2002/04/03 00:08:17  short
+  Found in "gnokii-working" directory, some November-patches version
 
-  void (*StateMachine)(unsigned char rx_byte);
+  Revision 1.14  2001/06/28 00:28:45  pkot
+  Small docs updates (Pawel Kot)
 
-} GSM_Protocol;
 
-/* This structure is provided to allow common information about the particular
-   model to be looked up in a model independant way. Some of the values here
-   define minimum and maximum levels for values retrieved by the various Get
-   functions for example battery level. They are not defined as constants to
-   allow model specific code to set them during initialisation */
-
-typedef struct {
-               
-  char *FBUSModels;     /* Models covered by this type, pipe '|' delimited. */  
-  char *MBUSModels;     /* Models covered by this type, pipe '|' delimited. */
-  char *InfraredModels; /* Models covered by this type, pipe '|' delimited. */  
-  char *DLR3Models;     /* Models covered by this type, pipe '|' delimited. */
-  char *ATModels;       /* Models covered by this type, pipe '|' delimited. */
-  char *IrdaModels;     /* Models covered by this type, pipe '|' delimited. */
-  char *TekramModels;   /* Models covered by this type, pipe '|' delimited. */  
-  char *FBUS3110Models; /* Models covered by this type, pipe '|' delimited. */  
-  
-/* Minimum and maximum levels for RF signal strength. Units are as per the
-   setting of RFLevelUnits.  The setting of RFLevelUnits indicates the 
-   default or "native" units used.  In the case of the 3110 and 6110 series
-   these are arbitrary, ranging from 0 to 4. */
-
-  float MaxRFLevel;
-  float MinRFLevel;
-  GSM_RFUnits RFLevelUnits;
-
-/* Minimum and maximum levels for battery level. Again, units are as per the
-   setting of GSM_BatteryLevelUnits.  The value that BatteryLevelUnits is set
-   to indicates the "native" or default value that the phone supports.  In the
-   case of the 3110 and 6110 series these are arbitrary, ranging from 0 to 4. */
-
-  float MaxBatteryLevel;
-  float MinBatteryLevel;
-  GSM_BatteryUnits BatteryLevelUnits;
-
-/* Information about date, time and alarm support. In case of alarm
-   information we provide value for the number of alarms supported. */
+*/
 
-  GSM_DateTimeSupport DateTimeSupport;
-  GSM_DateTimeSupport AlarmSupport;
-  int MaximumAlarms;
-} GSM_Information;
+#ifndef __gsm_api_h
+#define __gsm_api_h
 
-void NULL_Terminate(void);
-void NULL_KeepAlive();
-bool NULL_WritePhone (u16 length, u8 *buffer);
-void NULL_TX_DisplayMessage(u16 MessageLength, u8 *MessageBuffer);
+/* If gsm-common.h isn't included at this point, little in this file will make
+   sense so we include it here if required. */
 
-GSM_Error NULL_WaitUntil (int time, GSM_Error *value);
-GSM_Error NULL_SendMessageSequence (int time, GSM_Error *value,
-               u16 message_length, u8 message_type, u8 *buffer);
+#ifndef __gsm_common_h
+  #include "gsm-common.h"
+#endif
 
-GSM_ConnectionType GetConnectionTypeFromString(char *Connection);
+/* Ditto rlp_common.h... */
+#ifndef __data_rlp_common_h
+  #include "data/rlp-common.h"
+#endif
 
-bool GetMemoryTypeString(char *memorytext, GSM_MemoryType *type);
-bool GetMemoryTypeID(char *memorytext, GSM_MemoryType *type);
+#include "gsm-statemachine.h"
 
 /* Define these as externs so that app code can pick them up. */
 
 extern bool *GSM_LinkOK;
 extern GSM_Information *GSM_Info;
 extern GSM_Functions *GSM;
-extern GSM_Protocol *Protocol;
-
-GSM_PhonebookEntry *CurrentPhonebookEntry;
-GSM_Error          CurrentPhonebookError;
-
-GSM_SpeedDial      *CurrentSpeedDialEntry;
-GSM_Error          CurrentSpeedDialError;
-
-unsigned char      Current_IMEI[GSM_MAX_IMEI_LENGTH];
-unsigned char      Current_Revision[GSM_MAX_REVISION_LENGTH];
-unsigned char      Current_Model[GSM_MAX_MODEL_LENGTH];
-
-GSM_SMSMessage     *CurrentSMSMessage;
-GSM_Error          CurrentSMSMessageError;
-int                CurrentSMSPointer;
-
-GSM_SMSFolders      *CurrentSMSFolders;
-GSM_Error          CurrentSMSFoldersError;
-int                CurrentSMSFoldersCount;
-
-GSM_OneSMSFolder   CurrentSMSFolder;
-GSM_Error          CurrentSMSFolderError;
-int                CurrentSMSFolderID;
-
-GSM_MemoryStatus   *CurrentMemoryStatus;
-GSM_Error          CurrentMemoryStatusError;
-
-GSM_NetworkInfo    *CurrentNetworkInfo;
-GSM_Error          CurrentNetworkInfoError;
-
-GSM_SMSStatus      *CurrentSMSStatus;
-GSM_Error          CurrentSMSStatusError;
-
-GSM_MessageCenter  *CurrentMessageCenter;
-GSM_Error          CurrentMessageCenterError;
-
-int                *CurrentSecurityCodeStatus;
-GSM_Error          CurrentSecurityCodeError;
-GSM_SecurityCode   *CurrentSecurityCode;
-
-GSM_DateTime       *CurrentDateTime;
-GSM_Error          CurrentDateTimeError;
-
-GSM_Error          CurrentResetPhoneSettingsError;
-
-GSM_DateTime       *CurrentAlarm;
-GSM_Error          CurrentAlarmError;
-
-GSM_CalendarNote   *CurrentCalendarNote;
-GSM_Error          CurrentCalendarNoteError;
-
-GSM_NotesInfo      CurrentCalendarNotesInfo,*CurrentCalendarNotesInfo2;
-GSM_Error          CurrentCalendarNotesInfoError;
-
-int                *CurrentFirstCalendarFreePos;
-GSM_Error          CurrentFirstCalendarFreePosError;
-
-GSM_Error          CurrentSetDateTimeError;
-GSM_Error          CurrentSetAlarmError;
-
-GSM_Error          CurrentEnableExtendedCommandsError;
-
-int                CurrentRFLevel,
-                   CurrentBatteryLevel,
-                   CurrentPowerSource;
-
-int                CurrentDisplayStatus;
-GSM_Error          CurrentDisplayStatusError;
-
-char               *CurrentNetmonitor;
-GSM_Error          CurrentNetmonitorError;
-
-GSM_Bitmap         *CurrentGetBitmap;
-GSM_Error          CurrentGetBitmapError;
-
-GSM_Error          CurrentSetBitmapError;
-
-GSM_Error          CurrentSendDTMFError;
-
-GSM_Profile        *CurrentProfile;
-GSM_Error          CurrentProfileError;
-
-GSM_Error          CurrentDisplayOutputError;
-
-GSM_CBMessage      *CurrentCBMessage;
-GSM_Error          CurrentCBError;
-
-int                CurrentPressKeyEvent;
-GSM_Error          CurrentPressKeyError;
-
-GSM_Error          CurrentPlayToneError;
-
-GSM_Error          CurrentDialVoiceError;
-
-GSM_Error          CurrentGetOperatorNameError;
-GSM_Network        *CurrentGetOperatorNameNetwork;
-GSM_Error          CurrentSetOperatorNameError;
 
-GSM_Error          CurrentGetIMEIError;
-
-GSM_Error          CurrentGetHWError;
-
-unsigned char      CurrentPPS[4];
-GSM_Error          CurrentProductProfileSettingsError;
-
-char               CurrentIncomingCall[20];
-
-GSM_Error          CurrentBinRingtoneError;
-GSM_BinRingtone    *CurrentGetBinRingtone;
-
-GSM_Error          CurrentRingtoneError; 
-
-GSM_Error          CurrentMagicError;
-
-GSM_Error          CurrentSimlockInfoError;
-GSM_AllSimlocks    *CurrentSimLock;
-
-GSM_Error          CurrentGetWAPBookmarkError;
-GSM_Error          CurrentSetWAPBookmarkError;
-GSM_WAPBookmark    *WAPBookmark;
-
-GSM_Error          CurrentGetWAPSettingsError;
-GSM_WAPSettings    *WAPSettings;
-
-GSM_Error          CurrentCallDivertError;
-GSM_CallDivert    *CurrentCallDivert;
-
-char              *CurrentManufacturer;
-
-/* This is the connection type used in gnokii. */
-GSM_ConnectionType CurrentConnectionType;
-
-/* Pointer to a callback function used to return changes to a calls status */
-/* This saves unreliable polling */
-void (*CurrentCallPassup)(char c);
-
-/* Pointer to callback function in user code to be called when RLP frames
-   are received. */
-void (*CurrentRLP_RXCallback)(RLP_F96Frame *frame);
-
-/* Used to disconnect the call */
-u8 CurrentCallSequenceNumber;
-
-bool CurrentLinkOK;
-
-bool CurrentRequestTerminate;
-
-bool CurrentDisableKeepAlive;
+/* Ugly compatibility cludge: */
+extern GSM_Error compat_Phone_Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state);
 
 /* Prototype for the functions actually provided by gsm-api.c. */
 
-GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame), char* SynchronizeTime);
-
-bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType connection);
-
-char *GetMygnokiiVersion();
-
-typedef enum {
-  F_CAL61=1,/*Calendar in 6110 style - 4 types,...*/
-  F_CAL33,  /*Calendar in 3310 style - 10 reminders, Unicode, 3 coding types*/
-  F_CAL71,  /*Calendar in 7110 style - 4 types, recurrance, etc.*/
-
-  F_PBK33SIM,/*Phonebook in Unicode(3310 style).Name and number.No internal*/
-  F_PBK33INT,/*Phonebook in Unicode(3310 style).Name and number.Internal available*/
-  F_PBK71INT,/*Extended phonebook-multiple numbers,Unicode(7110 style).Internal available*/
-  F_PBK61INT,/*Name and number,no Unicode(6110 style).Internal available*/
-
-  F_DATA61, /*We can make data calls using gnokiid. Like in 6110*/
-  F_DATA71, /*Datacalls using AT commands*/
-
-  F_SMS,    /*SMS with Inbox, Outbox*/ /*10*/
-  F_SMS71,  /*SMS with SMS folders like in 7110*/ 
-
-  F_AUTH,   /*We can make authentication and have "Accessory connected" like in 6110*/
-  F_NETMON, /*Netmonitor available*/ 
-  F_CALER61,/*Caller groups in 6110 style - 5 groups with members*/
-  F_KEYB,   /*We can press keys*/
-  F_SMSCDEF,/*SMSC can have default recipient*/
-  F_SPEED,  /*We can handle speed dials*/
-  F_SCRSAV, /*We have screen savers*/
-  F_DTMF,   /*We can handle DTMF sequences*/
-  F_NOPOWER,/*We must get power/battery info from netmonitor*/ /*20*/
-
-  F_STANIM, /*Startup logo animated or static*/ 
-  F_STA   , /*Startup logo static*/
-  F_STA62 , /*Startup logo static size 6210*/ 
-  F_STA71 , /*Startup logo static size 7110*/
-
-  F_PROF61, /*Profiles numbered like in N6110*/
-  F_PROF51, /*Profiles numbered like in N5110*/
-  F_PROF33, /*Profiles numbered like in N3310.Unicode names*/
-
-  F_RING_SM,/*Binary ringtone in Smart Messaging*/
-  F_RINGBIN,/*Binary ringtone in binary format*/
-
-  F_WAP     /*WAP functions available*/ /*30*/
-} feat_index;
-
-typedef enum {
-  FN_CALENDAR=0,
-  FN_NETMONITOR,
-  FN_CALLERGROUPS,
-  FN_PHONEBOOK,
-  FN_AUTHENTICATION,
-  FN_DATACALLS,
-  FN_KEYPRESS,
-  FN_SMSCDEFAULT,
-  FN_SPEEDDIAL,
-  FN_SCREENSAVER,
-  FN_DTMF, /*10*/
-  FN_SMS,
-  FN_NOPOWERFRAME,
-  FN_STARTUP,
-  FN_PROFILES,
-  FN_RINGTONES,
-  FN_WAP,
-  FN_RINGNUMBER
-} featnum_index;
-
-/* For models table */
-typedef struct {
-  char *model;
-  char *number;
-  feat_index features[18];  
-} OnePhoneModel;
-
-extern char *GetModelName ();
-int GetModelFeature (featnum_index num);
-
-extern bool AppendLog(u8 *buffer, int length,bool format);
-extern bool AppendLogText(u8 *buffer,bool format);
-
-typedef struct {
-  int                SIMPhonebookUsed;
-  int                SIMPhonebookSize;
-  GSM_PhonebookEntry SIMPhonebook[250];
-
-  int                PhonePhonebookUsed;
-  int                PhonePhonebookSize;
-  GSM_PhonebookEntry PhonePhonebook[500];
-
-  bool               CallerAvailable;
-  GSM_Bitmap         CallerGroups[5];
-
-  bool               SpeedAvailable;
-  GSM_SpeedDial      SpeedDials[8];
-
-  bool               OperatorLogoAvailable;
-  GSM_Bitmap         OperatorLogo;
-
-  bool               StartupLogoAvailable;
-  GSM_Bitmap         StartupLogo;
+extern GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_handler)(RLP_F96Frame *frame), GSM_Statemachine *sm);
 
-  GSM_Bitmap         StartupText;
-} GSM_Backup;
+/* All the rest of the API functions are contained in the GSM_Function
+   structure which ultimately points into the model specific code. */
 
 #endif /* __gsm_api_h */