/* Test for parsing memory replies on AT driver */ #include #include #include #include #include "../libgammu/protocol/protocol.h" /* Needed for GSM_Protocol_Message */ #include "../libgammu/gsmstate.h" /* Needed for state machine internals */ #include "../libgammu/gsmphones.h" /* Phone data */ #include "../helper/memory-display.h" #include "common.h" #define BUFFER_SIZE 16384 extern GSM_Error ATGEN_ReplyGetMemory(GSM_Protocol_Message *msg, GSM_StateMachine * s); 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_MemoryEntry memory; /* Check parameters */ if (argc != 2 && argc != 3) { printf("Not enough parameters!\nUsage: at-getmemory-reply comm.dump [CHARSET]\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); Priv = &s->Phone.Data.Priv.ATGEN; Priv->ReplyState = AT_Reply_OK; Priv->Manufacturer = AT_Motorola; Priv->SMSMode = SMS_AT_PDU; if (argc == 3 && strcmp(argv[2], "PCCP437") == 0) { Priv->Charset = AT_CHARSET_PCCP437; } else if (argc == 3 && strcmp(argv[2], "UTF8") == 0) { Priv->Charset = AT_CHARSET_UTF8; } else if (argc == 3 && strcmp(argv[2], "HEX") == 0) { Priv->Charset = AT_CHARSET_HEX; } else { 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); s->Phone.Data.Memory = &memory; /* Parse it */ error = ATGEN_ReplyGetMemory(&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"); error = PrintMemoryEntry(&memory, NULL); gammu_test_result(error, "PrintMemoryEntry"); return 0; } /* Editor configuration * vim: noexpandtab sw=8 ts=8 sts=8 tw=72: */