Prex Home / Browse Source - Prex Version: 0.9.0

root/usr/sample/cpumon/cpumon.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 /*
   2  * Copyright (c) 2005, Kohsuke Ohtani
   3  * All rights reserved.
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  * 1. Redistributions of source code must retain the above copyright
   9  *    notice, this list of conditions and the following disclaimer.
  10  * 2. Redistributions in binary form must reproduce the above copyright
  11  *    notice, this list of conditions and the following disclaimer in the
  12  *    documentation and/or other materials provided with the distribution.
  13  * 3. Neither the name of the author nor the names of any co-contributors
  14  *    may be used to endorse or promote products derived from this software
  15  *    without specific prior written permission.
  16  *
  17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  27  * SUCH DAMAGE.
  28  */
  29 
  30 /*
  31  * cpumon.c - CPU voltage monitoring program
  32  */
  33 
  34 #include <sys/prex.h>
  35 #include <sys/ioctl.h>
  36 #include <stdio.h>
  37 
  38 static struct cpufreqinfo cf_info;
  39 
  40 int
  41 main(int argc, char *argv[])
  42 {
  43         device_t dev;
  44         int last_mhz = 0;
  45         int i, j;
  46         static char bar[21];
  47 
  48         /* Boost current prioriy */
  49         thread_setpri(thread_self(), 50);
  50 
  51         if (device_open("cpufreq", 0, &dev))
  52                 panic("open error: cpufreq");
  53 
  54         /* Clear screen */
  55         printf("\33[2J");
  56 
  57         printf("CPU voltage monitor\n");
  58         device_ioctl(dev, CFIOC_GET_INFO, &cf_info);
  59         if (cf_info.freq == 0 || cf_info.volts == 0)
  60                 panic("Invalid cpu power/speed");
  61 
  62         /*
  63          * Setup periodic timer for 10msec period
  64          */
  65         timer_periodic(thread_self(), 100, 10);
  66         for (;;) {
  67                 /*
  68                  * Wait next period
  69                  */
  70                 timer_waitperiod();
  71                 device_ioctl(dev, CFIOC_GET_INFO, &cf_info);
  72                 if (cf_info.freq != last_mhz) {
  73                         printf("\33[s"); /* save cursor */
  74 
  75                         /*
  76                          * Display speed
  77                          */
  78                         printf("\nSpeed: %4dMHz  0|", cf_info.freq);
  79                         j = cf_info.freq * 100 / cf_info.maxfreq;
  80                         for (i = 0; i < 20; i++)
  81                                 bar[i] = (i <= j / 5) ? '*' : '-';
  82                         bar[i] = '\0';
  83                         printf("%s|100", bar);
  84 
  85                         /*
  86                          * Display power
  87                          */
  88                         printf("\nPower: %4dmV   0|", cf_info.volts);
  89                         j = cf_info.volts * 100 / cf_info.maxvolts;
  90                         for (i = 0; i < 20; i++)
  91                                 bar[i] = (i <= j / 5) ? '*' : '-';
  92                         bar[i] = '\0';
  93                         printf("%s|100", bar);
  94 
  95                         printf("\33[u"); /* restore cursor */
  96                         last_mhz = cf_info.freq;
  97                 }
  98         }
  99         return 0;
 100 }

/* [<][>][^][v][top][bottom][index][help] */