/** * @name gammu_create_if_necessary: */ gammu_state_t *gammu_create_if_necessary(gammu_state_t **sp) { if (*sp != NULL) { return *sp; } gammu_state_t *rv = gammu_create(app.gammu_configuration_path); if (!rv) { return NULL; } if (app.verbose) { /* Enable global debugging to stderr */ GSM_Debug_Info *debug_info = GSM_GetGlobalDebug(); GSM_SetDebugFileDescriptor(stderr, TRUE, debug_info); GSM_SetDebugLevel("textall", debug_info); /* Enable state machine debugging to stderr */ debug_info = GSM_GetDebug(rv->sm); GSM_SetDebugGlobal(FALSE, debug_info); GSM_SetDebugFileDescriptor(stderr, TRUE, debug_info); GSM_SetDebugLevel("textall", debug_info); } *sp = rv; return rv; }
int main(int argc, char **argv) { int rc = 0; GSM_Debug_Info *debug_info; debug_info = GSM_GetGlobalDebug(); GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info); GSM_SetDebugLevel("textall", debug_info); rc |= single_test("CAL33, CAL52,SQWE", ERR_NONE); rc |= single_test("CAL33, FOO,SQWE", ERR_BADFEATURE); rc |= single_test("CAL33, NO_ATOBEX ,SQWE", ERR_NONE); rc |= single_test ("CAL33, NO_ATOBEX ,SQWE, CAL33, NO_ATOBEX ,SQWE, CAL52,CAL33, NO_ATOBEX ,SQWE, CAL33, NO_ATOBEX ,SQWE, CAL52,CAL33, NO_ATOBEX ,SQWE, CAL33, NO_ATOBEX ,SQWE, CAL52", ERR_MOREMEMORY); return rc; }
int main(int argc, char **argv) { GSM_Debug_Info *debug_info; GSM_Phone_ATGENData *Priv; GSM_Phone_Data *Data; unsigned char buffer[BUFFER_SIZE]; FILE *f; size_t len; GSM_StateMachine *s; GSM_Protocol_Message msg; GSM_Error error; GSM_NetworkInfo NetworkInfo; /* Check parameters */ if (argc != 2) { printf("Not enough parameters!\nUsage: at-creg-reply comm.dump\n"); return 1; } /* Open file */ f = fopen(argv[1], "r"); if (f == NULL) { printf("Could not open %s\n", argv[1]); return 1; } /* Read data */ len = fread(buffer, 1, sizeof(buffer) - 1, f); if (!feof(f)) { printf("Could not read whole file %s\n", argv[1]); fclose(f); return 1; } /* Zero terminate data */ buffer[len] = 0; /* Close file */ fclose(f); /* Configure state machine */ debug_info = GSM_GetGlobalDebug(); GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info); GSM_SetDebugLevel("textall", debug_info); /* Allocates state machine */ s = GSM_AllocStateMachine(); test_result(s != NULL); debug_info = GSM_GetDebug(s); GSM_SetDebugGlobal(TRUE, debug_info); /* Initialize AT engine */ Data = &s->Phone.Data; Data->ModelInfo = GetModelData(NULL, NULL, "unknown", NULL); Data->NetworkInfo = &NetworkInfo; Data->RequestID = ID_GetNetworkInfo; Priv = &s->Phone.Data.Priv.ATGEN; Priv->ReplyState = AT_Reply_OK; Priv->SMSMode = SMS_AT_PDU; Priv->Charset = AT_CHARSET_UCS2; /* Init message */ msg.Type = 0; msg.Length = len; msg.Buffer = buffer; SplitLines(msg.Buffer, msg.Length, &Priv->Lines, "\x0D\x0A", 2, "\"", 1, TRUE); /* Parse it */ error = ATGEN_ReplyGetNetworkLAC_CID(msg, s); /* This is normally done by ATGEN_Terminate */ FreeLines(&Priv->Lines); GetLineString(NULL, NULL, 0); /* Free state machine */ GSM_FreeStateMachine(s); gammu_test_result(error, "ATGEN_ReplyGetCNMIMode"); printf("Network: %d\nLAC: %s\nCID: %s\n", NetworkInfo.State, NetworkInfo.LAC, NetworkInfo.CID); return 0; }
int main(int argc, char **argv) { size_t pos = 0; GSM_MemoryEntry pbk; GSM_Error error; FILE *f; size_t len; gboolean generate = FALSE; GSM_Backup backup; int i; GSM_Debug_Info *debug_info; /* Configure debugging */ debug_info = GSM_GetGlobalDebug(); GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info); GSM_SetDebugLevel("textall", debug_info); /* Check parameters */ if (argc != 3 && argc != 4) { printf("Not enough parameters!\nUsage: vcard-read file.vcf file.backup\n"); return 1; } /* Check for generating option */ if (argc == 4 && strcmp(argv[3], "generate") == 0) { generate = TRUE; } /* Open file */ f = fopen(argv[1], "r"); test_result(f != NULL); /* Read data */ len = fread(buffer, 1, sizeof(buffer) - 1, f); test_result(feof(f)); /* Zero terminate string */ buffer[len] = 0; /* We don't need file any more */ fclose(f); /* Parse vCard */ error = GSM_DecodeVCARD(NULL, buffer, &pos, &pbk, SonyEricsson_VCard21); gammu_test_result(error, "GSM_DecodeVCARD"); /* Encode vCard back */ pos = 0; error = GSM_EncodeVCARD(NULL, vcard_buffer, sizeof(vcard_buffer), &pos, &pbk, TRUE, SonyEricsson_VCard21); gammu_test_result(error, "GSM_EncodeVCARD"); /* * Best would be to compare here, but we never can get * absolutely same as original. */ printf("ORIGINAL:\n%s\n----\nENCODED:\n%s\n", buffer, vcard_buffer); /* Generate file if we should */ if (generate) { GSM_ClearBackup(&backup); strcpy(backup.Creator, "vCard tester"); pbk.Location = 0; backup.PhonePhonebook[0] = &pbk; backup.PhonePhonebook[1] = NULL; error = GSM_SaveBackupFile(argv[2], &backup, TRUE); gammu_test_result(error, "GSM_SaveBackupFile"); } /* Read file content */ GSM_ClearBackup(&backup); error = GSM_ReadBackupFile(argv[2], &backup, GSM_Backup_GammuUCS2); gammu_test_result(error, "GSM_ReadBackupFile"); /* Compare size */ test_result(pbk.EntriesNum == backup.PhonePhonebook[0]->EntriesNum); /* Compare content */ for (i = 0; i < pbk.EntriesNum; i++) { test_result(pbk.Entries[i].EntryType == backup.PhonePhonebook[0]->Entries[i].EntryType); printf("Entry type: %d\n", pbk.Entries[i].EntryType); switch (pbk.Entries[i].EntryType) { case PBK_Number_General: case PBK_Number_Mobile: case PBK_Number_Fax: case PBK_Number_Pager: case PBK_Number_Other: case PBK_Number_Messaging: case PBK_Number_Video: case PBK_Text_Note: case PBK_Text_Postal: case PBK_Text_Email: case PBK_Text_Email2: case PBK_Text_URL: case PBK_Text_LUID: case PBK_Text_Name: case PBK_Text_LastName: case PBK_Text_FirstName: case PBK_Text_SecondName: case PBK_Text_FormalName: case PBK_Text_NamePrefix: case PBK_Text_NameSuffix: case PBK_Text_NickName: case PBK_Text_Company: case PBK_Text_JobTitle: case PBK_Text_StreetAddress: case PBK_Text_City: case PBK_Text_State: case PBK_Text_Zip: case PBK_Text_Country: case PBK_Text_Custom1: case PBK_Text_Custom2: case PBK_Text_Custom3: case PBK_Text_Custom4: case PBK_Text_UserID: case PBK_Text_PictureName: case PBK_PushToTalkID: case PBK_Text_VOIP: case PBK_Text_SWIS: case PBK_Text_WVID: case PBK_Text_SIP: case PBK_Text_DTMF: test_result(mywstrncmp(pbk.Entries[i].Text, backup.PhonePhonebook[0]->Entries[i].Text, 0) == TRUE); break; case PBK_Photo: test_result((pbk.Entries[i].Picture.Length == backup.PhonePhonebook[0]->Entries[i].Picture.Length) && memcmp(pbk.Entries[i].Picture.Buffer, backup.PhonePhonebook[0]->Entries[i].Picture.Buffer, pbk.Entries[i].Picture.Length) == 0); free(pbk.Entries[i].Picture.Buffer); break; case PBK_Date: case PBK_LastModified: break; case PBK_Category: case PBK_Private: case PBK_RingtoneID: case PBK_PictureID: case PBK_CallLength: case PBK_Caller_Group: test_result(pbk.Entries[i].Number == backup.PhonePhonebook[0]->Entries[i].Number); break; } } error = PrintMemoryEntry(&pbk, NULL); gammu_test_result(error, "PrintMemoryEntry"); /* Free data */ GSM_FreeBackup(&backup); /* We're done */ return 0; }
int main(int argc, char **argv) { GSM_Debug_Info *debug_info; GSM_Phone_ATGENData *Priv; GSM_Phone_Data *Data; unsigned char buffer[BUFFER_SIZE]; FILE *f; size_t len; GSM_StateMachine *s; GSM_Protocol_Message msg; GSM_Error error; GSM_MultiSMSMessage sms; GSM_SMSDConfig *smsd; #if 0 GSM_SMS_Backup bkp; #endif /* Check parameters */ if (argc != 2 && argc != 3) { printf("Not enough parameters!\nUsage: sms-at-parse comm.dump [PDU|TXT|TXTDETAIL]\n"); return 1; } /* Open file */ f = fopen(argv[1], "r"); if (f == NULL) { printf("Could not open %s\n", argv[1]); return 1; } /* Read data */ len = fread(buffer, 1, sizeof(buffer) - 1, f); if (!feof(f)) { printf("Could not read whole file %s\n", argv[1]); fclose(f); return 1; } smsd = SMSD_NewConfig("test"); /* Zero terminate data */ buffer[len] = 0; /* Close file */ fclose(f); /* Configure state machine */ debug_info = GSM_GetGlobalDebug(); GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info); GSM_SetDebugLevel("textall", debug_info); /* Allocates state machine */ s = GSM_AllocStateMachine(); test_result(s != NULL); debug_info = GSM_GetDebug(s); GSM_SetDebugGlobal(TRUE, debug_info); /* Initialize AT engine */ Data = &s->Phone.Data; Data->ModelInfo = GetModelData(NULL, NULL, "unknown", NULL); Priv = &s->Phone.Data.Priv.ATGEN; Priv->ReplyState = AT_Reply_OK; Priv->Charset = AT_CHARSET_GSM; if (argc == 3 && strcmp(argv[2], "TXT") == 0) { Priv->SMSMode = SMS_AT_TXT; Priv->SMSTextDetails = FALSE; } else if (argc == 3 && strcmp(argv[2], "TXTDETAIL") == 0) { Priv->SMSMode = SMS_AT_TXT; Priv->SMSTextDetails = TRUE; } else { Priv->SMSMode = SMS_AT_PDU; } /* Init message */ msg.Type = 0; msg.Length = len; msg.Buffer = buffer; SplitLines(msg.Buffer, msg.Length, &Priv->Lines, "\x0D\x0A", 2, "\"", 1, TRUE); /* Pointer to store message */ s->Phone.Data.GetSMSMessage = &sms; /* Parse it */ error = ATGEN_ReplyGetSMSMessage(&msg, s); sms.SMS[0].Memory = MEM_SM; #if 0 bkp.SMS[0] = &sms.SMS[0]; bkp.SMS[1] = NULL; GSM_AddSMSBackupFile("/tmp/back", &bkp); #endif /* Display message */ if (error == ERR_NONE) { DisplayMultiSMSInfo(&sms, FALSE, TRUE, NULL, NULL); DisplayMultiSMSInfo(&sms, TRUE, TRUE, NULL, NULL); printf("Parts: %d, count: %d, ID16: %d, ID8: %d\n", sms.SMS[0].UDH.AllParts, sms.Number, sms.SMS[0].UDH.ID16bit, sms.SMS[0].UDH.ID8bit); SMSD_RunOnReceiveEnvironment(&sms, smsd, "1"); } /* This is normally done by ATGEN_Terminate */ FreeLines(&Priv->Lines); GetLineString(NULL, NULL, 0); /* Free state machine */ GSM_FreeStateMachine(s); gammu_test_result(error, "ATGEN_ReplyGetSMSMessage"); return 0; }
int main(int argc, char **argv) { GSM_Debug_Info *debug_info; GSM_Phone_ATGENData *Priv; GSM_Phone_Data *Data; unsigned char buffer[BUFFER_SIZE]; FILE *f; size_t len; GSM_StateMachine *s; GSM_Protocol_Message msg; GSM_Error error; GSM_SMSC SMSC; /* Check parameters */ if (argc != 2) { printf("Not enough parameters!\nUsage: get-smsc-at comm.dump\n"); return 1; } /* Open file */ f = fopen(argv[1], "r"); test_result(f != NULL); /* Read data */ len = fread(buffer, 1, sizeof(buffer) - 1, f); test_result(feof(f)); /* Zero terminate data */ buffer[len] = 0; /* Close file */ fclose(f); /* Configure state machine */ debug_info = GSM_GetGlobalDebug(); GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info); GSM_SetDebugLevel("textall", debug_info); /* Allocates state machine */ s = GSM_AllocStateMachine(); test_result(s != NULL); debug_info = GSM_GetDebug(s); GSM_SetDebugGlobal(TRUE, debug_info); GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info); GSM_SetDebugLevel("textall", debug_info); /* Initialize AT engine */ Data = &s->Phone.Data; Data->ModelInfo = GetModelData(NULL, NULL, "unknown", NULL); Priv = &s->Phone.Data.Priv.ATGEN; Priv->ReplyState = AT_Reply_OK; Priv->SMSMode = SMS_AT_PDU; Priv->Charset = AT_CHARSET_UCS2; /* Init message */ msg.Type = 0; msg.Length = len; msg.Buffer = buffer; SplitLines(msg.Buffer, msg.Length, &Priv->Lines, "\x0D\x0A", 2, "\"", 1, TRUE); /* Pointer to store message */ s->Phone.Data.SMSC = &SMSC; /* Parse it */ error = ATGEN_ReplyGetSMSC(msg, s); /* This is normally done by ATGEN_Terminate */ FreeLines(&Priv->Lines); GetLineString(NULL, NULL, 0); /* Free state machine */ GSM_FreeStateMachine(s); printf("%s\n", GSM_ErrorString(error)); return (error == ERR_NONE) ? 0 : 1; }
GSM_Error GSM_InitConnection_Log(GSM_StateMachine *s, int ReplyNum, GSM_Log_Function log_function, void *user_data) { GSM_Error error; GSM_DateTime current_time; int i; for (i=0;i<s->ConfigNum;i++) { s->CurrentConfig = &s->Config[i]; /* Skip non configured sections */ if (s->CurrentConfig->Connection == NULL) { smprintf_level(s, D_ERROR, "[Empty section - %d]\n", i); continue; } s->Speed = 0; s->ReplyNum = ReplyNum; s->Phone.Data.ModelInfo = GetModelData(s, "unknown", NULL, NULL); s->Phone.Data.Manufacturer[0] = 0; s->Phone.Data.Model[0] = 0; s->Phone.Data.Version[0] = 0; s->Phone.Data.VerDate[0] = 0; s->Phone.Data.VerNum = 0; s->Phone.Data.StartInfoCounter = 0; s->Phone.Data.SentMsg = NULL; s->Phone.Data.HardwareCache[0] = 0; s->Phone.Data.ProductCodeCache[0] = 0; s->Phone.Data.EnableIncomingCall = FALSE; s->Phone.Data.EnableIncomingSMS = FALSE; s->Phone.Data.EnableIncomingCB = FALSE; s->Phone.Data.EnableIncomingUSSD = FALSE; s->User.UserReplyFunctions = NULL; s->User.IncomingCall = NULL; s->User.IncomingSMS = NULL; s->User.IncomingCB = NULL; s->User.IncomingUSSD = NULL; s->User.SendSMSStatus = NULL; s->LockFile = NULL; s->opened = FALSE; s->Phone.Functions = NULL; s->di = GSM_none_debug; s->di.use_global = s->CurrentConfig->UseGlobalDebugFile; if (!s->di.use_global) { GSM_SetDebugFunction(log_function, user_data, &s->di); GSM_SetDebugLevel(s->CurrentConfig->DebugLevel, &s->di); error = GSM_SetDebugFile(s->CurrentConfig->DebugFile, &s->di); if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_SetDebugFile" , error); return error; } } smprintf_level(s, D_ERROR, "[Gammu - %s built %s %s using %s]\n", GAMMU_VERSION, __TIME__, __DATE__, GetCompiler() ); StripSpaces(s->CurrentConfig->Connection); StripSpaces(s->CurrentConfig->Model); StripSpaces(s->CurrentConfig->Device); smprintf_level(s, D_ERROR, "[Connection - \"%s\"]\n", s->CurrentConfig->Connection); smprintf_level(s, D_ERROR, "[Connection index - %d]\n", i); smprintf_level(s, D_ERROR, "[Model type - \"%s\"]\n", s->CurrentConfig->Model); smprintf_level(s, D_ERROR, "[Device - \"%s\"]\n", s->CurrentConfig->Device); if (strlen(GetOS()) != 0) { smprintf_level(s, D_ERROR, "[Running on - %s]\n", GetOS()); } if (GSM_GetDI(s)->dl == DL_BINARY) { smprintf(s,"%c",((unsigned char)strlen(GAMMU_VERSION))); smprintf(s,"%s",GAMMU_VERSION); } error = GSM_RegisterAllConnections(s, s->CurrentConfig->Connection); if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_RegisterAllConnections" , error); return error; } autodetect: /* Model auto */ /* Try to guess correct driver based on model */ if (s->CurrentConfig->Model[0] == 0 && s->ConnectionType != GCT_NONE && s->ConnectionType != GCT_IRDAOBEX && s->ConnectionType != GCT_BLUEOBEX && s->ConnectionType != GCT_BLUEGNAPBUS && s->ConnectionType != GCT_IRDAGNAPBUS && s->ConnectionType != GCT_BLUES60) { error = GSM_TryGetModel(s); /* Fall back to other configuraitons if the device is not existing (or similar error) */ if ((i != s->ConfigNum - 1) && ( (error == ERR_DEVICEOPENERROR) || (error == ERR_DEVICELOCKED) || (error == ERR_DEVICENOTEXIST) || (error == ERR_DEVICEBUSY) || (error == ERR_DEVICENOPERMISSION) || (error == ERR_DEVICENODRIVER) || (error == ERR_DEVICENOTWORK))) { GSM_CloseConnection(s); continue; } if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_TryGetModel" , error); return error; } } /* Switching to "correct" module */ error = GSM_RegisterAllPhoneModules(s); /* If user selected soemthing which is not supported, try autodetection */ if (s->CurrentConfig->Model[0] != 0 && error == ERR_UNKNOWNMODELSTRING) { smprintf(s, "Configured model %s is not known, retrying with autodetection!\n", s->CurrentConfig->Model); s->CurrentConfig->Model[0] = 0; goto autodetect; } if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_RegisterAllPhoneModules" , error); return error; } /* We didn't open device earlier ? Make it now */ if (!s->opened) { error = GSM_OpenConnection(s); if ((i != s->ConfigNum - 1) && ( (error == ERR_DEVICEOPENERROR) || (error == ERR_DEVICELOCKED) || (error == ERR_DEVICENOTEXIST) || (error == ERR_DEVICEBUSY) || (error == ERR_DEVICENOPERMISSION) || (error == ERR_DEVICENODRIVER) || (error == ERR_DEVICENOTWORK))) { GSM_CloseConnection(s); continue; } if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_OpenConnection" , error); return error; } } /* Initialize phone layer */ error=s->Phone.Functions->Initialise(s); if (error == ERR_TIMEOUT && i != s->ConfigNum - 1) { GSM_CloseConnection(s); continue; } if (error != ERR_NONE) { GSM_LogError(s, "Init:Phone->Initialise" , error); return error; } if (s->CurrentConfig->StartInfo) { s->Phone.Functions->ShowStartInfo(s,TRUE); s->Phone.Data.StartInfoCounter = 30; } if (s->CurrentConfig->SyncTime) { GSM_GetCurrentDateTime (¤t_time); s->Phone.Functions->SetDateTime(s,¤t_time); } /* For debug it's good to have firmware and real model version and manufacturer */ error=s->Phone.Functions->GetManufacturer(s); if (error == ERR_TIMEOUT && i != s->ConfigNum - 1) { GSM_CloseConnection(s); continue; } if (error != ERR_NONE && error != ERR_NOTSUPPORTED) { GSM_LogError(s, "Init:Phone->GetManufacturer" , error); return error; } error=s->Phone.Functions->GetModel(s); if (error != ERR_NONE && error != ERR_NOTSUPPORTED) { GSM_LogError(s, "Init:Phone->GetModel" , error); return error; } error=s->Phone.Functions->GetFirmware(s); if (error != ERR_NONE && error != ERR_NOTSUPPORTED) { GSM_LogError(s, "Init:Phone->GetFirmware" , error); return error; } smprintf(s,"[Connected]\n"); return ERR_NONE; } return ERR_UNCONFIGURED; }