From 3ec111676ff9e34058b3bf2e482a236f341c10eb Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 15 Mar 2013 11:07:12 +0100 Subject: Add run-time changing of gsmd log level via libgsm/libgsmd-tool --- src/gsmd/usock.c | 10 ++++++++++ src/libgsmd/libgsmd_phone.c | 19 ++++++++++++++++++- src/util/libgsmd-tool.c | 2 ++ src/util/shell.c | 5 +++++ 4 files changed, 35 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gsmd/usock.c b/src/gsmd/usock.c index 13c3bb1..f258fd6 100644 --- a/src/gsmd/usock.c +++ b/src/gsmd/usock.c @@ -43,6 +43,8 @@ #include #include +extern int loglevel; + static void *__ucmd_ctx, *__gu_ctx; struct gsmd_ucmd *ucmd_alloc(int extra_size) @@ -765,6 +767,14 @@ static int usock_rcv_phone(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, cmd = atcmd_fill("AT+CVIB=0", 9+1, &phone_vibrator_disable_cb, gu, 0, NULL); gu->gsmd->dev_state.vibrator = 0; break; + case GSMD_PHONE_GSMD_LOGLEVEL: + if (gph->len < 1) + return -EINVAL; + gsmd_log(GSMD_NOTICE, "Setting loglevel to %u on client " + "request\n", gph->data[0]); + loglevel = gph->data[0]; + return 0; + break; default: return -EINVAL; } diff --git a/src/libgsmd/libgsmd_phone.c b/src/libgsmd/libgsmd_phone.c index a67642a..9f6569c 100644 --- a/src/libgsmd/libgsmd_phone.c +++ b/src/libgsmd/libgsmd_phone.c @@ -1,6 +1,7 @@ /* libgsmd phone related functions * * (C) 2006-2007 by OpenMoko, Inc. + * (C) 2013 by Harald Welte * Written by Harald Welte * All Rights Reserved * @@ -90,4 +91,20 @@ int lgsm_phone_vibrator(struct lgsm_handle *lh, int enable) return lgsm_send_simple(lh, GSMD_MSG_PHONE, type); } - + +int lgsm_set_gsmd_loglevel(struct lgsm_handle *lh, u_int8_t loglevel) +{ + struct gsmd_msg_hdr *gmh; + int rc; + + gmh = lgsm_gmh_fill(GSMD_MSG_PHONE, GSMD_PHONE_GSMD_LOGLEVEL, 1); + if (!gmh) + return -ENOMEM; + + gmh->data[0] = loglevel; + + rc = lgsm_send(lh, gmh); + + lgsm_gmh_free(gmh); + return rc; +} diff --git a/src/util/libgsmd-tool.c b/src/util/libgsmd-tool.c index 653139b..5fb1eca 100644 --- a/src/util/libgsmd-tool.c +++ b/src/util/libgsmd-tool.c @@ -1,6 +1,7 @@ /* libgsmd tool * * (C) 2006-2007 by OpenMoko, Inc. + * (C) 2013 by Harald Welte * Written by Harald Welte * All Rights Reserved * @@ -102,6 +103,7 @@ int main(int argc, char **argv) int mode = MODE_NONE, shellwait = 0; printf("libgsm-tool - (C) 2006-2007 by Harald Welte and OpenMoko, Inc.\n" + " (C) 2012-2013 by Harald Welte\n" "This program is Free Software and has ABSOLUTELY NO WARRANTY\n\n"); while (1) { diff --git a/src/util/shell.c b/src/util/shell.c index 6b461be..f1333dc 100644 --- a/src/util/shell.c +++ b/src/util/shell.c @@ -604,6 +604,7 @@ static void shell_help(void) "\tCFQ\tQuery the status of call forwarding (CFQ=reason)\n" "\tCFR\tRegister call forwarding (CFR=reason,number)\n" "\tCFe\tErase a record of call forwarding (CFe=reason)\n" + "\tlog=N\tSet gsmd Log Level (1=debug, 8=fatal)\n" "\tq\tQuit\n" ); } @@ -1024,6 +1025,10 @@ int shell_main(struct lgsm_handle *lgsmh, int sync) printf("Battery Connection status and Battery Charge Level\n"); lgsm_get_battery(lgsmh); pending_responses++; + } else if (!strncmp(buf, "log=", 4)) { + int gsmd_loglevel = atoi(buf+4); + lgsm_set_gsmd_loglevel(lgsmh, gsmd_loglevel); + pending_responses++; }else { printf("Unknown command `%s'\n", buf); } -- cgit v1.2.3