Printout power data as well

This commit is contained in:
adamdunkels 2009-11-03 10:04:23 +00:00
parent 78fd88d0ec
commit 2662c87d60

View file

@ -28,12 +28,12 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* $Id: shell-sendtest.c,v 1.5 2008/11/17 22:52:10 oliverschmidt Exp $ * $Id: shell-sendtest.c,v 1.6 2009/11/03 10:04:23 adamdunkels Exp $
*/ */
/** /**
* \file * \file
* A brief description of what this file is. * A small pogram to measure the communication performance between two nodes
* \author * \author
* Adam Dunkels <adam@sics.se> * Adam Dunkels <adam@sics.se>
*/ */
@ -106,20 +106,29 @@ const static struct rucb_callbacks rucb_callbacks = {write_chunk,
NULL}; NULL};
static struct rucb_conn rucb; static struct rucb_conn rucb;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
static void
print_usage(void)
{
shell_output_str(&sendtest_command,
"sendtest <receiver> <size> [packetsize]: recevier must be specified", "");
}
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(shell_sendtest_process, ev, data) PROCESS_THREAD(shell_sendtest_process, ev, data)
{ {
static rimeaddr_t receiver; static rimeaddr_t receiver;
const char *nextptr; const char *nextptr;
const char *args; const char *args;
char buf[40]; char buf[40];
static unsigned long cpu, lpm, rx, tx;
unsigned long cpu2, lpm2, rx2, tx2;
PROCESS_BEGIN(); PROCESS_BEGIN();
args = data; args = data;
receiver.u8[0] = shell_strtolong(args, &nextptr); receiver.u8[0] = shell_strtolong(args, &nextptr);
if(nextptr == data || *nextptr != '.') { if(nextptr == data || *nextptr != '.') {
shell_output_str(&sendtest_command, print_usage();
"sendtest <receiver> <size> [packetsize]: recevier must be specified", "");
PROCESS_EXIT(); PROCESS_EXIT();
} }
args = nextptr + 1; args = nextptr + 1;
@ -132,8 +141,7 @@ PROCESS_THREAD(shell_sendtest_process, ev, data)
} }
filesize = shell_strtolong(args, &nextptr); filesize = shell_strtolong(args, &nextptr);
if(nextptr == data || filesize == 0) { if(nextptr == data || filesize == 0) {
shell_output_str(&sendtest_command, print_usage();
"sendtest <receiver> <size> [packetsize]: size must be specified and > 0", "");
PROCESS_EXIT(); PROCESS_EXIT();
} }
@ -144,8 +152,7 @@ PROCESS_THREAD(shell_sendtest_process, ev, data)
packetsize = 64; packetsize = 64;
packetsize = shell_strtolong(args, &nextptr); packetsize = shell_strtolong(args, &nextptr);
if(packetsize == 0) { if(packetsize == 0) {
shell_output_str(&sendtest_command, print_usage();
"sendtest <receiver> <size> [packetsize]: packetsize must be > 0", "");
PROCESS_EXIT(); PROCESS_EXIT();
} }
@ -158,12 +165,43 @@ PROCESS_THREAD(shell_sendtest_process, ev, data)
start_time_rucb = clock_time(); start_time_rucb = clock_time();
rucb_send(&rucb, &receiver); rucb_send(&rucb, &receiver);
energest_flush();
lpm = energest_type_time(ENERGEST_TYPE_LPM);
cpu = energest_type_time(ENERGEST_TYPE_CPU);
rx = energest_type_time(ENERGEST_TYPE_LISTEN);
tx = energest_type_time(ENERGEST_TYPE_TRANSMIT);
PROCESS_WAIT_UNTIL(download_complete); PROCESS_WAIT_UNTIL(download_complete);
energest_flush();
lpm2 = energest_type_time(ENERGEST_TYPE_LPM);
cpu2 = energest_type_time(ENERGEST_TYPE_CPU);
rx2 = energest_type_time(ENERGEST_TYPE_LISTEN);
tx2 = energest_type_time(ENERGEST_TYPE_TRANSMIT);
sprintf(buf, "%d seconds, %lu bytes/second", sprintf(buf, "%d seconds, %lu bytes/second",
(int)((end_time_rucb - start_time_rucb) / CLOCK_SECOND), (int)((end_time_rucb - start_time_rucb) / CLOCK_SECOND),
CLOCK_SECOND * filesize / (end_time_rucb - start_time_rucb)); CLOCK_SECOND * filesize / (end_time_rucb - start_time_rucb));
shell_output_str(&sendtest_command, "Completed in ", buf); shell_output_str(&sendtest_command, "Completed in ", buf);
sprintf(buf, "%lu/%d rx %lu/%d tx (seconds)",
(rx2 - rx), RTIMER_ARCH_SECOND,
(tx2 - tx), RTIMER_ARCH_SECOND);
shell_output_str(&sendtest_command, "Radio total on time ", buf);
sprintf(buf, "%lu/%lu = %lu%%",
(rx2 - rx),
(cpu2 + lpm2 - cpu - lpm),
100 * (rx2 - rx)/(cpu2 + lpm2 - cpu - lpm));
shell_output_str(&sendtest_command, "Radio rx duty cycle ", buf);
sprintf(buf, "%lu/%lu = %lu%%",
(tx2 - tx),
(cpu2 + lpm2 - cpu - lpm),
100 * (tx2 - tx)/(cpu2 + lpm2 - cpu - lpm));
shell_output_str(&sendtest_command, "Radio tx duty cycle ", buf);
PROCESS_END(); PROCESS_END();
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/