Report incoming messages (enabled unsollicited mode)

This commit is contained in:
Pierre Pronchery 2010-06-03 14:41:07 +00:00
parent 90c6e5c1d3
commit 0d138dcc3b
5 changed files with 46 additions and 1 deletions

View File

@ -480,6 +480,15 @@ int gsm_set_line_presentation(GSM * gsm, int set)
}
/* gsm_set_message_indications */
int gsm_set_message_indications(GSM * gsm, GSMMessageMode mode,
int unsollicited)
{
return gsm_modem_set_message_indications(gsm->modem, mode,
(unsollicited != 0) ? TRUE : FALSE);
}
/* gsm_set_mute */
int gsm_set_mute(GSM * gsm, int mute)
{

View File

@ -114,6 +114,14 @@ typedef enum _GSMMessageList
GSM_MESSAGE_LIST_ALL = 4
} GSMMessageList;
typedef enum _GSMMessageMode
{
GSM_MESSAGE_MODE_BUFFER_REPLACE = 0,
GSM_MESSAGE_MODE_DISCARD_REJECT = 1,
GSM_MESSAGE_MODE_BUFFER_FLUSH = 2,
GSM_MESSAGE_MODE_FORWARD = 3
} GSMMessageMode;
typedef enum _GSMMode
{
GSM_MODE_INIT = 0, GSM_MODE_COMMAND, GSM_MODE_PDU
@ -336,6 +344,8 @@ int gsm_set_call_waiting_control(GSM * gsm, int unsollicited);
int gsm_set_extended_ring_reports(GSM * gsm, int extended);
int gsm_set_functional(GSM * gsm, int functional);
int gsm_set_line_presentation(GSM * gsm, int set);
int gsm_set_message_indications(GSM * gsm, GSMMessageMode mode,
int unsollicited);
int gsm_set_mute(GSM * gsm, int mute);
int gsm_set_operator_format(GSM * gsm, GSMOperatorFormat format);
int gsm_set_operator_mode(GSM * gsm, GSMOperatorMode mode);

View File

@ -500,7 +500,7 @@ int gsm_modem_send_message(GSMModem * gsmm, char const * number,
& GSM_MODEM_QUIRK_WANT_SMSC_IN_PDU ? "00" : "",
cmd2, strlen(number),
addr, pid, dcs, vp, length, data);
len2 = strlen(buf2);
len2 = strlen(buf2); /* XXX obtain it from snprintf() */
if(gsmm->quirks & GSM_MODEM_QUIRK_WANT_SMSC_IN_PDU)
len2 -= 2;
snprintf(buf1, len1, "%s%lu", cmd1, (len2 - 1) / 2);
@ -720,6 +720,28 @@ int gsm_modem_set_message_format(GSMModem * gsmm, GSMMessageFormat format)
}
/* gsm_modem_set_message_indications */
int gsm_modem_set_message_indications(GSMModem * gsmm, GSMMessageMode mode,
gboolean unsollicited)
{
char cmd[] = "AT+CNMI=X,X";
switch(mode)
{
case GSM_MESSAGE_MODE_BUFFER_REPLACE:
case GSM_MESSAGE_MODE_DISCARD_REJECT:
case GSM_MESSAGE_MODE_BUFFER_FLUSH:
case GSM_MESSAGE_MODE_FORWARD:
break;
default:
return 1;
}
cmd[8] = mode + '0';
cmd[10] = unsollicited ? '1' : '0';
return (gsm_queue(gsmm->gsm, cmd) != NULL) ? 0 : 1;
}
/* gsm_modem_set_mute */
static void _modem_set_mute_callback(GSM * gsm);

View File

@ -91,6 +91,8 @@ int gsm_modem_set_extended_ring_reports(GSMModem * gsmm, gboolean extended);
int gsm_modem_set_line_presentation(GSMModem * gsmm, gboolean set);
int gsm_modem_set_functional(GSMModem * gsmm, gboolean functional);
int gsm_modem_set_message_format(GSMModem * gsmm, GSMMessageFormat format);
int gsm_modem_set_message_indications(GSMModem * gsmm, GSMMessageMode mode,
gboolean unsollicited);
int gsm_modem_set_mute(GSMModem * gsmm, gboolean mute);
int gsm_modem_set_operator_format(GSMModem * gsmm, GSMOperatorFormat format);
int gsm_modem_set_operator_mode(GSMModem * gsmm, GSMOperatorMode mode);

View File

@ -2348,6 +2348,8 @@ static int _phone_gsm_event(GSMEvent * event, gpointer data)
}
gsm_set_call_presentation(phone->gsm, TRUE);
gsm_set_extended_ring_reports(phone->gsm, TRUE);
gsm_set_message_indications(phone->gsm,
GSM_MESSAGE_MODE_BUFFER_FLUSH, TRUE);
gsm_set_operator_mode(phone->gsm,
GSM_OPERATOR_MODE_AUTOMATIC);
gsm_set_registration_report(phone->gsm, report);