diff options
author | Tim Baverstock <weasel@google.com> | 2010-12-15 17:31:13 +0000 |
---|---|---|
committer | Tim Baverstock <weasel@google.com> | 2010-12-15 17:38:20 +0000 |
commit | 4c6b10a4f385c04dbd7226e10a86a1f5cbd34f2a (patch) | |
tree | e73efe5f81db32825b318da31cb211926ee95a7c /android/console.c | |
parent | 09425494d2b9cce6a6c5725bbc320ca1a1440ad3 (diff) | |
download | external_qemu-4c6b10a4f385c04dbd7226e10a86a1f5cbd34f2a.zip external_qemu-4c6b10a4f385c04dbd7226e10a86a1f5cbd34f2a.tar.gz external_qemu-4c6b10a4f385c04dbd7226e10a86a1f5cbd34f2a.tar.bz2 |
Add 'gsm signal' command, to set rssi and ber
Change-Id: I24d4738f6e5135437af25d22e2fa68617f5632fa
Diffstat (limited to 'android/console.c')
-rw-r--r-- | android/console.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/android/console.c b/android/console.c index 5e37060..68b9480 100644 --- a/android/console.c +++ b/android/console.c @@ -1385,6 +1385,65 @@ do_gsm_accept( ControlClient client, char* args ) return 0; } +static int +do_gsm_signal( ControlClient client, char* args ) +{ + enum { SIGNAL_RSSI = 0, SIGNAL_BER, NUM_SIGNAL_PARAMS }; + char* p = args; + int top_param = -1; + int params[ NUM_SIGNAL_PARAMS ]; + + static int last_ber = 99; + + if (!p) + p = ""; + + /* tokenize */ + while (*p) { + char* end; + int val = strtol( p, &end, 10 ); + + if (end == p) { + control_write( client, "KO: argument '%s' is not a number\n", p ); + return -1; + } + + params[++top_param] = val; + if (top_param + 1 == NUM_SIGNAL_PARAMS) + break; + + p = end; + while (*p && (p[0] == ' ' || p[0] == '\t')) + p += 1; + } + + /* sanity check */ + if (top_param < SIGNAL_RSSI) { + control_write( client, "KO: not enough arguments: see 'help gsm signal' for details\r\n" ); + return -1; + } + + int rssi = params[SIGNAL_RSSI]; + if ((rssi < 0 || rssi > 31) && rssi != 99) { + control_write( client, "KO: invalid RSSI - must be 0..31 or 99\r\n"); + return -1; + } + + /* check ber is 0..7 or 99 */ + if (top_param >= SIGNAL_BER) { + int ber = params[SIGNAL_BER]; + if ((ber < 0 || ber > 7) && ber != 99) { + control_write( client, "KO: invalid BER - must be 0..7 or 99\r\n"); + return -1; + } + last_ber = ber; + } + + amodem_set_signal_strength( android_modem, rssi, last_ber ); + + return 0; + } + #if 0 static const CommandDefRec gsm_in_commands[] = @@ -1458,6 +1517,12 @@ static const CommandDefRec gsm_commands[] = "'gsm status' displays the current state of the GSM emulation\r\n", NULL, do_gsm_status, NULL }, + { "signal", "set sets the rssi and ber", + "'gsm signal <rssi> [<ber>]' changes the reported strength and error rate on next (15s) update.\r\n" + "rssi range is 0..31 and 99 for unknown\r\n" + "ber range is 0..7 percent and 99 for unknown\r\n", + NULL, do_gsm_signal, NULL }, + { NULL, NULL, NULL, NULL, NULL, NULL } }; |