Fetching messages in text mode for the moment
This commit is contained in:
parent
0bb228fe93
commit
9ba6e09f06
38
src/gsm.c
38
src/gsm.c
@ -539,6 +539,8 @@ int gsm_event(GSM * gsm, GSMEventType type, ...)
|
||||
case GSM_EVENT_TYPE_MESSAGE:
|
||||
/* FIXME implement correctly */
|
||||
event->message.index = va_arg(ap, unsigned int);
|
||||
event->message.date = va_arg(ap, time_t);
|
||||
event->message.length = va_arg(ap, unsigned int);
|
||||
event->message.content = va_arg(ap, char const *);
|
||||
break;
|
||||
case GSM_EVENT_TYPE_MESSAGE_LIST:
|
||||
@ -602,6 +604,7 @@ int gsm_fetch_message_list(GSM * gsm, GSMMessageList list)
|
||||
/* gsm_fetch_message */
|
||||
int gsm_fetch_message(GSM * gsm, unsigned int index)
|
||||
{
|
||||
gsm->event.message.index = index; /* FIXME may be over-written */
|
||||
return gsm_modem_get_message(gsm->modem, index);
|
||||
}
|
||||
|
||||
@ -1210,22 +1213,37 @@ static int _gsm_trigger_cmgl(GSM * gsm, char const * result)
|
||||
/* gsm_trigger_cmgr */
|
||||
static int _gsm_trigger_cmgr(GSM * gsm, char const * result)
|
||||
{
|
||||
unsigned int stat;
|
||||
char buf[32];
|
||||
char date[32];
|
||||
unsigned int mbox;
|
||||
unsigned int alpha = 0;
|
||||
unsigned int length;
|
||||
unsigned int * length = &gsm->event.message.length;
|
||||
struct tm t;
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, result);
|
||||
#endif
|
||||
/* FIXME implement:
|
||||
* - store the index (and length?) somewhere
|
||||
* - then we (blindly) parse the PDU and report the message */
|
||||
if(sscanf(result, "%u,%u,%u", &stat, &alpha, &length) == 3
|
||||
|| sscanf(result, "%u,,%u", &stat, &length) == 2)
|
||||
/* FIXME report which mailbox contains the message? */
|
||||
/* text mode support */
|
||||
if(sscanf(result, "\"%31[^\"]\",\"%31[^\"]\",,\"%31[^\"]\"", buf,
|
||||
buf, date) == 3) /* FIXME really implement */
|
||||
{
|
||||
date[sizeof(date) - 1] = '\0';
|
||||
if(strptime(date, "%y/%m/%d,%T", &t) == NULL) /* XXX timezone */
|
||||
localtime_r(NULL, &t);
|
||||
gsm->event.message.date = mktime(&t);
|
||||
*length = 0;
|
||||
return 0; /* we need to wait for the next line */
|
||||
}
|
||||
/* PDU mode support */
|
||||
if(sscanf(result, "%u,%u,%u", &mbox, &alpha, length) == 3
|
||||
|| sscanf(result, "%u,,%u", &mbox, length) == 2)
|
||||
return 0;
|
||||
/* FIXME actually parse the PDU */
|
||||
gsm->event.message.index = 0; /* FIXME implement */
|
||||
gsm->event.message.content = result;
|
||||
/* message content */
|
||||
if(*length == 0) /* XXX assumes this is text mode */
|
||||
gsm->event.message.content = result;
|
||||
else /* FIXME actually parse the PDU */
|
||||
gsm->event.message.content = result;
|
||||
return _gsm_event_send(gsm, GSM_EVENT_TYPE_MESSAGE);
|
||||
}
|
||||
|
||||
|
@ -222,6 +222,8 @@ typedef union _GSMEvent
|
||||
{
|
||||
GSMEventType type;
|
||||
unsigned int index;
|
||||
time_t date;
|
||||
unsigned int length; /* XXX may be removed */
|
||||
char const * content;
|
||||
} message;
|
||||
|
||||
|
@ -286,7 +286,8 @@ int gsm_modem_get_message(GSMModem * gsmm, unsigned int index)
|
||||
{
|
||||
char cmd[32];
|
||||
|
||||
if(gsm_modem_set_message_format(gsmm, GSM_MESSAGE_FORMAT_PDU) != 0)
|
||||
/* FIXME should default to PDU mode */
|
||||
if(gsm_modem_set_message_format(gsmm, GSM_MESSAGE_FORMAT_TEXT) != 0)
|
||||
return 1;
|
||||
snprintf(cmd, sizeof(cmd), "%s%u", "AT+CMGR=", index);
|
||||
/* XXX race condition here if the user forces out of PDU mode */
|
||||
|
Loading…
Reference in New Issue
Block a user