Also support editing contacts

This commit is contained in:
Pierre Pronchery 2014-09-26 01:50:37 +03:00
parent c867e9e66d
commit 16b107fca1

View File

@ -279,7 +279,7 @@ static HayesCommandStatus _on_request_call_status(HayesCommand * command,
HayesCommandStatus status, void * priv); HayesCommandStatus status, void * priv);
static HayesCommandStatus _on_request_contact_delete(HayesCommand * command, static HayesCommandStatus _on_request_contact_delete(HayesCommand * command,
HayesCommandStatus status, void * priv); HayesCommandStatus status, void * priv);
static HayesCommandStatus _on_request_contact_new(HayesCommand * command, static HayesCommandStatus _on_request_contact_list(HayesCommand * command,
HayesCommandStatus status, void * priv); HayesCommandStatus status, void * priv);
static HayesCommandStatus _on_request_functional(HayesCommand * command, static HayesCommandStatus _on_request_functional(HayesCommand * command,
HayesCommandStatus status, void * priv); HayesCommandStatus status, void * priv);
@ -508,10 +508,12 @@ static HayesRequestHandler _hayes_request_handlers[] =
_on_request_generic }, _on_request_generic },
{ MODEM_REQUEST_CONTACT_DELETE, NULL, { MODEM_REQUEST_CONTACT_DELETE, NULL,
_on_request_contact_delete }, _on_request_contact_delete },
{ MODEM_REQUEST_CONTACT_EDIT, NULL,
_on_request_contact_list },
{ MODEM_REQUEST_CONTACT_LIST, "AT+CPBR=?", { MODEM_REQUEST_CONTACT_LIST, "AT+CPBR=?",
_on_request_generic }, _on_request_generic },
{ MODEM_REQUEST_CONTACT_NEW, NULL, { MODEM_REQUEST_CONTACT_NEW, NULL,
_on_request_contact_new }, _on_request_contact_list },
{ MODEM_REQUEST_DTMF_SEND, NULL, { MODEM_REQUEST_DTMF_SEND, NULL,
_on_request_generic }, _on_request_generic },
{ MODEM_REQUEST_MESSAGE, NULL, { MODEM_REQUEST_MESSAGE, NULL,
@ -1351,9 +1353,11 @@ static char * _request_attention_connectivity(Hayes * hayes,
HayesChannel * channel, unsigned int enabled); HayesChannel * channel, unsigned int enabled);
static char * _request_attention_contact_delete(HayesChannel * channel, static char * _request_attention_contact_delete(HayesChannel * channel,
unsigned int id); unsigned int id);
static char * _request_attention_contact_list(ModemRequest * request); static char * _request_attention_contact_edit(unsigned int id,
static char * _request_attention_contact_new(HayesChannel * channel,
char const * name, char const * number); char const * name, char const * number);
static char * _request_attention_contact_list(ModemRequest * request);
static char * _request_attention_contact_new(char const * name,
char const * number);
static char * _request_attention_dtmf_send(ModemRequest * request); static char * _request_attention_dtmf_send(ModemRequest * request);
static char * _request_attention_gprs(Hayes * hayes, HayesChannel * channel, static char * _request_attention_gprs(Hayes * hayes, HayesChannel * channel,
char const * username, char const * password); char const * username, char const * password);
@ -1489,8 +1493,13 @@ static char * _request_attention(Hayes * hayes, HayesChannel * channel,
case MODEM_REQUEST_CONTACT_DELETE: case MODEM_REQUEST_CONTACT_DELETE:
return _request_attention_contact_delete(channel, return _request_attention_contact_delete(channel,
request->contact_delete.id); request->contact_delete.id);
case MODEM_REQUEST_CONTACT_EDIT:
return _request_attention_contact_edit(
request->contact_edit.id,
request->contact_edit.name,
request->contact_edit.number);
case MODEM_REQUEST_CONTACT_NEW: case MODEM_REQUEST_CONTACT_NEW:
return _request_attention_contact_new(channel, return _request_attention_contact_new(
request->contact_new.name, request->contact_new.name,
request->contact_new.number); request->contact_new.number);
case MODEM_REQUEST_DTMF_SEND: case MODEM_REQUEST_DTMF_SEND:
@ -1643,6 +1652,25 @@ static char * _request_attention_contact_delete(HayesChannel * channel,
return strdup(buf); return strdup(buf);
} }
static char * _request_attention_contact_edit(unsigned int id,
char const * name, char const * number)
{
char const cmd[] = "AT+CPBW=";
char buf[128];
if(number == NULL || strlen(number) == 0
|| name == NULL || strlen(name) == 0)
/* XXX report error */
return NULL;
if(snprintf(buf, sizeof(buf), "%s%u%s\"%s\"%s%u%s\"%s\"", cmd, id, ",",
(number[0] == '+') ? &number[1] : number, ",",
(number[0] == '+') ? 145 : 129, ",", name)
>= (int)sizeof(buf))
/* XXX report error */
return NULL;
return strdup(buf);
}
static char * _request_attention_contact_list(ModemRequest * request) static char * _request_attention_contact_list(ModemRequest * request)
{ {
HayesRequestContactList * list = request->plugin.data; HayesRequestContactList * list = request->plugin.data;
@ -1655,8 +1683,8 @@ static char * _request_attention_contact_list(ModemRequest * request)
return strdup(buf); return strdup(buf);
} }
static char * _request_attention_contact_new(HayesChannel * channel, static char * _request_attention_contact_new(char const * name,
char const * name, char const * number) char const * number)
{ {
char const cmd[] = "AT+CPBW="; char const cmd[] = "AT+CPBW=";
char buf[128]; char buf[128];
@ -1668,7 +1696,7 @@ static char * _request_attention_contact_new(HayesChannel * channel,
if(snprintf(buf, sizeof(buf), "%s%s\"%s\"%s%u%s\"%s\"", cmd, ",", if(snprintf(buf, sizeof(buf), "%s%s\"%s\"%s%u%s\"%s\"", cmd, ",",
(number[0] == '+') ? &number[1] : number, ",", (number[0] == '+') ? &number[1] : number, ",",
(number[0] == '+') ? 145 : 129, ",", name) (number[0] == '+') ? 145 : 129, ",", name)
> (int)sizeof(buf)) >= (int)sizeof(buf))
/* XXX report error */ /* XXX report error */
return NULL; return NULL;
return strdup(buf); return strdup(buf);
@ -2643,8 +2671,8 @@ static HayesCommandStatus _on_request_contact_delete(HayesCommand * command,
} }
/* on_request_contact_new */ /* on_request_contact_list */
static HayesCommandStatus _on_request_contact_new(HayesCommand * command, static HayesCommandStatus _on_request_contact_list(HayesCommand * command,
HayesCommandStatus status, void * priv) HayesCommandStatus status, void * priv)
{ {
HayesChannel * channel = priv; HayesChannel * channel = priv;