mirror of git://git.sysmocom.de/ofono
Add implementation for ATE and other basic command
This commit is contained in:
parent
d7eb09cc05
commit
1390a63933
|
@ -260,10 +260,10 @@ static gboolean get_result_value(GAtServer *server, GAtResult *result,
|
||||||
int val;
|
int val;
|
||||||
char prefix[10];
|
char prefix[10];
|
||||||
|
|
||||||
if (command[0] != 'S')
|
if (command[0] == 'S')
|
||||||
return FALSE;
|
sprintf(prefix, "%s=", command);
|
||||||
|
else
|
||||||
sprintf(prefix, "%s=", command);
|
strcpy(prefix, command);
|
||||||
|
|
||||||
g_at_result_iter_init(&iter, result);
|
g_at_result_iter_init(&iter, result);
|
||||||
|
|
||||||
|
@ -376,6 +376,154 @@ static void at_s5_cb(GAtServerRequestType type, GAtResult *result,
|
||||||
s_template_cb(type, result, user_data, "S5", 0, 127);
|
s_template_cb(type, result, user_data, "S5", 0, 127);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void set_v250_value(GAtServer *server, const char *prefix, int val)
|
||||||
|
{
|
||||||
|
if (prefix[0] == '&') {
|
||||||
|
switch (prefix[1]) {
|
||||||
|
case 'C':
|
||||||
|
server->v250.c109 = val;
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
server->v250.c108 = val;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (prefix[0]) {
|
||||||
|
case 'E':
|
||||||
|
server->v250.echo = val;
|
||||||
|
break;
|
||||||
|
case 'Q':
|
||||||
|
server->v250.quiet = val;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
server->v250.is_v1 = val;
|
||||||
|
break;
|
||||||
|
case 'X':
|
||||||
|
server->v250.res_format = val;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_v250_value(GAtServer *server, const char *prefix)
|
||||||
|
{
|
||||||
|
int val = 0;
|
||||||
|
|
||||||
|
if (prefix[0] == '&') {
|
||||||
|
switch (prefix[1]) {
|
||||||
|
case 'C':
|
||||||
|
val = server->v250.c109;
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
val = server->v250.c108;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (prefix[0]) {
|
||||||
|
case 'E':
|
||||||
|
val = server->v250.echo;
|
||||||
|
break;
|
||||||
|
case 'Q':
|
||||||
|
val = server->v250.quiet;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
val = server->v250.is_v1;
|
||||||
|
break;
|
||||||
|
case 'X':
|
||||||
|
val = server->v250.res_format;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void at_template_cb(GAtServerRequestType type, GAtResult *result,
|
||||||
|
gpointer user_data, const char *prefix,
|
||||||
|
int min, int max, int deftval)
|
||||||
|
{
|
||||||
|
GAtServer *server = user_data;
|
||||||
|
char buf[20];
|
||||||
|
int val;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case G_AT_SERVER_REQUEST_TYPE_SET:
|
||||||
|
if (!get_result_value(server, result, prefix, min, max, &val)) {
|
||||||
|
g_at_server_send_final(server,
|
||||||
|
G_AT_SERVER_RESULT_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_v250_value(server, prefix, val);
|
||||||
|
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case G_AT_SERVER_REQUEST_TYPE_QUERY:
|
||||||
|
val = get_v250_value(server, prefix);
|
||||||
|
sprintf(buf, "%s: %d", prefix, val);
|
||||||
|
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_SUPPORT:
|
||||||
|
sprintf(buf, "%s: (%d-%d)", prefix, min, max);
|
||||||
|
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_COMMAND_ONLY:
|
||||||
|
set_v250_value(server, prefix, deftval);
|
||||||
|
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void at_e_cb(GAtServerRequestType type, GAtResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
at_template_cb(type, result, user_data, "E", 0, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void at_q_cb(GAtServerRequestType type, GAtResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
at_template_cb(type, result, user_data, "Q", 0, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void at_v_cb(GAtServerRequestType type, GAtResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
at_template_cb(type, result, user_data, "V", 0, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void at_x_cb(GAtServerRequestType type, GAtResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
at_template_cb(type, result, user_data, "X", 0, 4, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void at_c109_cb(GAtServerRequestType type, GAtResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
at_template_cb(type, result, user_data, "&C", 0, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void at_c108_cb(GAtServerRequestType type, GAtResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
at_template_cb(type, result, user_data, "&D", 0, 2, 2);
|
||||||
|
}
|
||||||
|
|
||||||
static inline gboolean is_extended_command_prefix(const char c)
|
static inline gboolean is_extended_command_prefix(const char c)
|
||||||
{
|
{
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
@ -1076,6 +1224,12 @@ static void basic_command_register(GAtServer *server)
|
||||||
g_at_server_register(server, "S3", at_s3_cb, server, NULL);
|
g_at_server_register(server, "S3", at_s3_cb, server, NULL);
|
||||||
g_at_server_register(server, "S4", at_s4_cb, server, NULL);
|
g_at_server_register(server, "S4", at_s4_cb, server, NULL);
|
||||||
g_at_server_register(server, "S5", at_s5_cb, server, NULL);
|
g_at_server_register(server, "S5", at_s5_cb, server, NULL);
|
||||||
|
g_at_server_register(server, "E", at_e_cb, server, NULL);
|
||||||
|
g_at_server_register(server, "Q", at_q_cb, server, NULL);
|
||||||
|
g_at_server_register(server, "V", at_v_cb, server, NULL);
|
||||||
|
g_at_server_register(server, "X", at_x_cb, server, NULL);
|
||||||
|
g_at_server_register(server, "&C", at_c109_cb, server, NULL);
|
||||||
|
g_at_server_register(server, "&D", at_c108_cb, server, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
GAtServer *g_at_server_new(GIOChannel *io)
|
GAtServer *g_at_server_new(GIOChannel *io)
|
||||||
|
|
Loading…
Reference in New Issue