Add basic support for emulating AT+CGATT inside AT server

This commit is contained in:
Marcel Holtmann 2010-04-12 16:28:59 -07:00
parent 4add05f4f0
commit a21499ca01
1 changed files with 55 additions and 0 deletions

View File

@ -53,6 +53,7 @@ static int modem_mode = 0;
static int modem_creg = 0;
static int modem_cgreg = 0;
static int network_status = 4;
static int network_attach = 0;
struct sock_server{
int server_sock;
@ -396,6 +397,59 @@ error:
g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
}
static void cgatt_cb(GAtServerRequestType type, GAtResult *cmd, gpointer user)
{
GAtServer *server = user;
char buf[12];
if (modem_mode == 0) {
g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
return;
}
switch (type) {
case G_AT_SERVER_REQUEST_TYPE_SUPPORT:
g_at_server_send_info(server, "+CGATT: (0-1)", TRUE);
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
break;
case G_AT_SERVER_REQUEST_TYPE_QUERY:
snprintf(buf, sizeof(buf), "+CGATT: %d", network_attach);
g_at_server_send_info(server, buf, TRUE);
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
break;
case G_AT_SERVER_REQUEST_TYPE_SET:
{
GAtResultIter iter;
int mode;
g_at_result_iter_init(&iter, cmd);
g_at_result_iter_next(&iter, "+CGATT=");
if (g_at_result_iter_next_number(&iter, &mode) == FALSE)
goto error;
if (mode != 0 && mode != 1)
goto error;
if (network_attach == mode) {
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
break;
}
network_attach = mode;
g_timeout_add_seconds(1, send_ok, server);
break;
}
default:
goto error;
};
return;
error:
g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
}
static void cimi_cb(GAtServerRequestType type, GAtResult *cmd, gpointer user)
{
GAtServer *server = user;
@ -579,6 +633,7 @@ static void add_handler(GAtServer *server)
g_at_server_register(server, "+COPS", cops_cb, server, NULL);
g_at_server_register(server, "+CREG", creg_cb, server, NULL);
g_at_server_register(server, "+CGREG", cgreg_cb, server, NULL);
g_at_server_register(server, "+CGATT", cgatt_cb, server, NULL);
g_at_server_register(server, "+CIMI", cimi_cb, server, NULL);
g_at_server_register(server, "+CSMS", csms_cb, server, NULL);
g_at_server_register(server, "+CMGF", cmgf_cb, server, NULL);