1 /**
2  * \file gammu-statemachine.h
3  * \author Michal Čihař
4  *
5  * State machine data.
6  */
7 #ifndef __gammu_statemachine_h
8 #define __gammu_statemachine_h
9 
10 #ifdef	__cplusplus
11 extern "C" {
12 #endif
13 
14 /**
15  * \defgroup StateMachine State machine
16  * Generic state machine layer.
17  */
18 
19 #include <gammu-types.h>
20 #include <gammu-error.h>
21 #include <gammu-inifile.h>
22 
23 /**
24  * Callback function for logging.
25  *
26  * \param text Text to be printed, \n will be also sent (as a separate
27  * message).
28  * \param data Arbitrary logger data, as passed to \ref GSM_InitConnection_Log.
29  *
30  */
31 typedef void (*GSM_Log_Function) (const char *text, void *data);
32 
33 /**
34  * Private structure holding information about phone connection. Should
35  * be allocated by \ref GSM_AllocStateMachine and freed by
36  * \ref GSM_FreeStateMachine.
37  *
38  * \ingroup StateMachine
39  */
40 typedef struct _GSM_StateMachine GSM_StateMachine;
41 
42 #include <gammu-info.h>
43 
44 /**
45  * Configuration of state machine.
46  *
47  * \ingroup StateMachine
48  */
49 typedef struct {
50 	/**
51 	 * Model from config file
52 	 */
53 	char Model[50];
54 	/**
55 	 * Debug level
56 	 */
57 	char DebugLevel[50];
58 	/**
59 	 * Device name from config file
60 	 */
61 	char *Device;
62 	/**
63 	 * Connection type as string
64 	 */
65 	char *Connection;
66 	/**
67 	 * Synchronize time on startup?
68 	 */
69 	gboolean SyncTime;
70 	/**
71 	 * Lock device ? (Unix)
72 	 */
73 	gboolean LockDevice;
74 	/**
75 	 * Name of debug file
76 	 */
77 	char *DebugFile;
78 	/**
79 	 * Display something during start ?
80 	 */
81 	gboolean StartInfo;
82 	/**
83 	 * Should we use global debug file?
84 	 */
85 	gboolean UseGlobalDebugFile;
86 	/**
87 	 * Text for reminder calendar entry category in local language
88 	 */
89 	char TextReminder[32];
90 	/**
91 	 * Text for meeting calendar entry category in local language
92 	 */
93 	char TextMeeting[32];
94 	/**
95 	 * Text for call calendar entry category in local language
96 	 */
97 	char TextCall[32];
98 	/**
99 	 * Text for birthday calendar entry category in local language
100 	 */
101 	char TextBirthday[32];
102 	/**
103 	 * Text for memo calendar entry category in local language
104 	 */
105 	char TextMemo[32];
106 	/**
107 	 * Phone features override.
108 	 */
109 	GSM_Feature PhoneFeatures[GSM_MAX_PHONE_FEATURES + 1];
110 	/**
111 	 * Used to override default CNMI arguments for generic
112 	 * AT protocol.
113 	 */
114 	 int CNMIParams[5];
115 } GSM_Config;
116 
117 /**
118  * Connection types definitions.
119  */
120 typedef enum {
121 	GCT_MBUS2 = 1,
122 	GCT_FBUS2,
123 	GCT_FBUS2DLR3,
124 	GCT_DKU2AT,
125 	GCT_DKU2PHONET,
126 	GCT_DKU5FBUS2,
127 	GCT_ARK3116FBUS2,
128 	GCT_FBUS2PL2303,
129 	GCT_FBUS2BLUE,
130 	GCT_FBUS2IRDA,
131 	GCT_PHONETBLUE,
132 	GCT_AT,
133 	GCT_BLUEGNAPBUS,
134 	GCT_IRDAOBEX,
135 	GCT_IRDAGNAPBUS,
136 	GCT_IRDAAT,
137 	GCT_IRDAPHONET,
138 	GCT_BLUEFBUS2,
139 	GCT_BLUEAT,
140 	GCT_BLUEPHONET,
141 	GCT_BLUEOBEX,
142 	GCT_FBUS2USB,
143 	GCT_BLUES60,
144 	GCT_PROXYGNAPBUS,
145 	GCT_PROXYFBUS2,
146 	GCT_PROXYAT,
147 	GCT_PROXYPHONET,
148 	GCT_PROXYOBEX,
149 	GCT_PROXYS60,
150 	GCT_NONE
151 } GSM_ConnectionType;
152 
153 /**
154  * Initiates connection with custom logging callback.
155  *
156  * \ingroup StateMachine
157  *
158  * \param s State machine data
159  * \param ReplyNum Number of replies to await (usually 3).
160  * \param log_function Logging function, see GSM_SetDebugFunction.
161  * \param user_data User data for logging function, see GSM_SetDebugFunction.
162  * \return Error code
163  * \see GSM_SetDebugFunction
164  */
165 GSM_Error GSM_InitConnection_Log(GSM_StateMachine * s, int ReplyNum,
166 				 GSM_Log_Function log_function,
167 				 void *user_data);
168 
169 /**
170  * Initiates connection.
171  *
172  * \ingroup StateMachine
173  *
174  * \param s State machine data
175  * \param ReplyNum Number of replies to await (usually 3).
176  * \return Error code
177  */
178 GSM_Error GSM_InitConnection(GSM_StateMachine * s, int ReplyNum);
179 
180 /**
181  * Terminates connection.
182  *
183  * \ingroup StateMachine
184  *
185  * \param s State machine data
186  * \return Error code
187  */
188 GSM_Error GSM_TerminateConnection(GSM_StateMachine * s);
189 
190 /**
191  * Aborts current operation.
192  *
193  * This is thread safe call to abort any existing operations with the
194  * phone.
195  *
196  * \ingroup StateMachine
197  *
198  * \param s State machine data
199  * \return Error code
200  */
201 GSM_Error GSM_AbortOperation(GSM_StateMachine * s);
202 
203 /**
204  * Attempts to read data from phone. This can be used for getting
205  * status of incoming events, which would not be found out without
206  * polling device.
207  *
208  * \ingroup StateMachine
209  *
210  * \param s State machine data
211  * \param waitforreply Whether to wait for some event
212  * \return Number of read bytes
213  */
214 int GSM_ReadDevice(GSM_StateMachine * s, gboolean waitforreply);
215 
216 /**
217  * Detects whether state machine is connected.
218  *
219  * \ingroup StateMachine
220  *
221  * \param s State machine data
222  * \return Whether phone is connected.
223  */
224 gboolean GSM_IsConnected(GSM_StateMachine * s);
225 
226 /**
227  * Finds and reads gammu configuration file. The search order depends on
228  * platform. On POSIX systems it looks for ~/.gammurc and then for
229  * /etc/gammurc, on Windows for gammurc in Application data folder, then
230  * in home and last fallback is in current driectory.
231  *
232  * \param result Ini file representation
233  * \param force_config Forcing of custom path instead of autodetected
234  * one (if NULL, autodetection is performed).
235  *
236  * \return Error code
237  *
238  * \ingroup StateMachine
239  */
240 GSM_Error GSM_FindGammuRC(INI_Section ** result, const char *force_config);
241 
242 /**
243  * Processes gammu configuration.
244  *
245  * \param cfg_info Ini file representation.
246  * \param cfg Where to store configuration.
247  * \param num Number of section to read.
248  * \return Whether we got valid configuration. Especially check for
249  * ERR_USING_DEFAULTS.
250  *
251  * \ingroup StateMachine
252  *
253  * \see GSM_FallbackConfig
254  */
255 GSM_Error GSM_ReadConfig(INI_Section * cfg_info, GSM_Config * cfg, int num);
256 
257 /**
258  * Gets gammu configuration from state machine. This actually returns
259  * pointer to internal configuration storage, so you can use it also for
260  * updating existing settings.
261  *
262  * \param s State machine data
263  * \param num Number of section to read, -1 for currently used.
264  * \return Pointer to configuration.
265  *
266  * \ingroup StateMachine
267  */
268 GSM_Config *GSM_GetConfig(GSM_StateMachine * s, int num);
269 
270 /**
271  * Gets number of active gammu configurations.
272  *
273  * \param s State machine data
274  * \return Number of sections.
275  *
276  * \ingroup StateMachine
277  */
278 int GSM_GetConfigNum(const GSM_StateMachine * s);
279 
280 /**
281  * Gets number of active gammu configurations.
282  *
283  * \param s State machine data
284  * \param sections Number of sections.
285  *
286  * \ingroup StateMachine
287  */
288 void GSM_SetConfigNum(GSM_StateMachine * s, int sections);
289 
290 /**
291  * Allocates new clean state machine structure. You should free it then
292  * by \ref GSM_FreeStateMachine.
293  *
294  * \return Pointer to state machine structure.
295  *
296  * \ingroup StateMachine
297  */
298 GSM_StateMachine *GSM_AllocStateMachine(void);
299 
300 /**
301  * Frees state machine structure allocated by
302  * \ref GSM_AllocStateMachine.
303  *
304  * \param s Pointer to state machine structure.
305  *
306  * \ingroup StateMachine
307  */
308 void GSM_FreeStateMachine(GSM_StateMachine * s);
309 
310 /**
311  * Gets number of active gammu configurations.
312  *
313  * \param s State machine data
314  * \return Connection type.
315  *
316  * \ingroup StateMachine
317  */
318 GSM_ConnectionType GSM_GetUsedConnection(GSM_StateMachine * s);
319 
320 /**
321  * Installs applet required for configured connection to the phone.
322  *
323  * \param s State machine data.
324  * \param ExtraPath Extra path where to search for installation data.
325  * \param Minimal Whether to do minimal installation (eg. without support
326  * libraries), useful for applet updates
327  * \return Result of operation.
328  *
329  * \ingroup StateMachine
330  */
331 GSM_Error GSM_Install(GSM_StateMachine *s, const char *ExtraPath, gboolean Minimal);
332 
333 #ifdef	__cplusplus
334 }
335 #endif
336 #endif
337 
338 /* Editor configuration
339  * vim: noexpandtab sw=8 ts=8 sts=8 tw=72:
340  */
341