diff -u -r --exclude=CVS gnokii-cvs/ChangeLog gnokii-devel/ChangeLog --- gnokii-cvs/ChangeLog 2003-12-03 00:29:22.000000000 +0100 +++ gnokii-devel/ChangeLog 2003-12-05 23:31:30.000000000 +0100 @@ -11,6 +11,8 @@ o keyboard emulation isn't working, only up and down messages are known (BORBELY Zoltan) o call management functions implemented (BORBELY Zoltan) + * AT series updates + o GetSMSStatus implemented (BORBELY Zoltan) * portability fixes o libgnokii.dsp (Visual Studio) updated (BORBELY Zoltan) o VC debug and release flags differs (Ender) diff -u -r --exclude=CVS gnokii-cvs/common/phones/atgen.c gnokii-devel/common/phones/atgen.c --- gnokii-cvs/common/phones/atgen.c 2003-10-28 01:12:46.000000000 +0100 +++ gnokii-devel/common/phones/atgen.c 2003-12-05 23:27:30.000000000 +0100 @@ -55,6 +55,7 @@ static gn_error ReplyMemoryStatus(int messagetype, unsigned char *buffer, int length, gn_data *data, struct gn_statemachine *state); static gn_error ReplyCallDivert(int messagetype, unsigned char *buffer, int length, gn_data *data, struct gn_statemachine *state); static gn_error ReplyGetPrompt(int messagetype, unsigned char *buffer, int length, gn_data *data, struct gn_statemachine *state); +static gn_error ReplyGetSMSStatus(int messagetype, unsigned char *buffer, int length, gn_data *data, struct gn_statemachine *state); static gn_error ReplySendSMS(int messagetype, unsigned char *buffer, int length, gn_data *data, struct gn_statemachine *state); static gn_error ReplyGetSMS(int messagetype, unsigned char *buffer, int length, gn_data *data, struct gn_statemachine *state); /* static gn_error ReplyDeleteSMS(int messagetype, unsigned char *buffer, int length, gn_data *data, struct gn_statemachine *state); */ @@ -74,6 +75,7 @@ static gn_error AT_WritePhonebook(gn_data *data, struct gn_statemachine *state); static gn_error AT_CallDivert(gn_data *data, struct gn_statemachine *state); static gn_error AT_SetPDUMode(gn_data *data, struct gn_statemachine *state); +static gn_error AT_GetSMSStatus(gn_data *data, struct gn_statemachine *state); static gn_error AT_SendSMS(gn_data *data, struct gn_statemachine *state); static gn_error AT_SaveSMS(gn_data *data, struct gn_statemachine *state); static gn_error AT_WriteSMS(gn_data *data, struct gn_statemachine *state, unsigned char *cmd); @@ -109,6 +111,7 @@ { GN_OP_CallDivert, AT_CallDivert, ReplyCallDivert }, { GN_OP_AT_SetPDUMode, AT_SetPDUMode, Reply }, { GN_OP_AT_Prompt, NULL, ReplyGetPrompt }, + { GN_OP_GetSMSStatus, AT_GetSMSStatus, ReplyGetSMSStatus }, { GN_OP_SendSMS, AT_SendSMS, ReplySendSMS }, { GN_OP_SaveSMS, AT_SaveSMS, ReplySendSMS }, { GN_OP_GetSMS, AT_GetSMS, ReplyGetSMS }, @@ -582,6 +585,18 @@ return sm_block_no_retry(GN_OP_AT_SetPDUMode, data, state); } +static gn_error AT_GetSMSStatus(gn_data *data, struct gn_statemachine *state) +{ + gn_error ret; + + if (!data->sms_status) return GN_ERR_INTERNALERROR; + + ret = sm_message_send(13, GN_OP_GetSMSStatus, "AT+CPMS=\"SM\"\r", state); + if (ret != GN_ERR_NONE) + return GN_ERR_NOTREADY; + return sm_block_no_retry(GN_OP_GetSMSStatus, data, state); +} + static gn_error AT_SendSMS(gn_data *data, struct gn_statemachine *state) { return AT_WriteSMS(data, state, "CMGS"); @@ -969,6 +984,26 @@ return (buffer[0] == GN_AT_PROMPT) ? GN_ERR_NONE : GN_ERR_INTERNALERROR; } +static gn_error ReplyGetSMSStatus(int messagetype, unsigned char *buffer, int length, gn_data *data, struct gn_statemachine *state) +{ + at_line_buffer buf; + + if (buffer[0] != GN_AT_OK) return GN_ERR_FAILED; + + buf.line1 = buffer + 1; + buf.length = length; + splitlines(&buf); + + if (sscanf(buf.line2, "+CPMS: %d", &data->sms_status->number) != 1) + return GN_ERR_FAILED; + + data->sms_status->unread = 0; + data->sms_status->changed = 0; + data->sms_status->folders_count = 0; + + return GN_ERR_NONE; +} + static gn_error ReplySendSMS(int messagetype, unsigned char *buffer, int length, gn_data *data, struct gn_statemachine *state) { at_line_buffer buf;