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