diff --git a/CHANGES b/CHANGES index 00436d46..e9f10575 100644 --- a/CHANGES +++ b/CHANGES @@ -38,6 +38,8 @@ SVN-HEAD Skip ISA detection by default if a Super I/O was found (#2322) Do not scan I2C adapters on multimedia cards by default Skip SMBus probing by default if a Super I/O was found (#2322) + Display I2C address statictics with --stat + sensors-detect-stat.pl: Deleted, functionality merged into sensors-detect 3.0.3 (2008-09-28) libsensors: Avoid namespace pollution diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect index 315861a7..e516fd78 100755 --- a/prog/detect/sensors-detect +++ b/prog/detect/sensors-detect @@ -4838,6 +4838,39 @@ sub c7temp_detect return; } +################# +# SPECIAL MODES # +################# + +sub show_i2c_stats +{ + my ($chip, $addr, %histo, $chips); + + # Gather the data + foreach $chip (@chip_ids) { + next unless defined $chip->{i2c_addrs}; + $chips++; + foreach my $addr (@{$chip->{i2c_addrs}}) { + $histo{$addr}++; + } + } + + # Display the data + printf "\%d I2C chips known, \%d I2C addresses probed\n\n", + $chips, scalar keys %histo; + print " 0 1 2 3 4 5 6 7 8 9 a b c d e f\n". + "00: "; + for (my $addr = 0x03; $addr <= 0x77; $addr ++) { + printf("\n\%02x:", $addr) if ($addr % 16) == 0; + if (defined $histo{$addr}) { + printf ' %02d', $histo{$addr}; + } else { + print ' --'; + } + } + print "\n"; +} + ################ # MAIN PROGRAM # ################ @@ -4982,6 +5015,12 @@ sub main { my ($input, $superio_features); + # Handle special command line cases first + if (defined $ARGV[0] && $ARGV[0] eq "--stat") { + show_i2c_stats(); + exit 0; + } + # We won't go very far if not root unless ($> == 0) { print "You need to be root to run this script.\n"; diff --git a/prog/detect/sensors-detect-stat.pl b/prog/detect/sensors-detect-stat.pl deleted file mode 100755 index 85d6d968..00000000 --- a/prog/detect/sensors-detect-stat.pl +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/perl -wT - -# sensors-detect-stat.pl -# Statistical analysis of sensors-detect i2c addresses scanner -# Part of the lm_sensors project -# Copyright (C) 2003-2008 Jean Delvare -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -# MA 02110-1301 USA. - -use strict; -use vars qw(%histo $chips $file $skip); - -# Where is sensors-detect? -# Use first argument, else try default locations. -if (defined($ARGV[0])) -{ - $file = $ARGV[0]; -} -elsif (-r '/usr/local/sbin/sensors-detect') -{ - $file = '/usr/local/sbin/sensors-detect'; -} -elsif (-r '/usr/sbin/sensors-detect') -{ - $file = '/usr/sbin/sensors-detect'; -} -else -{ - print "Usage: $0 /path/to/sensors-detect\n"; - exit 1; -} - -# Can we read that file? -if (! -r $file) -{ - print "Couldn't open $file for reading.\n"; - exit 2; -} - -# Get the data. -open (SD, $file) || die; -$skip = 0; -while () -{ - # Some chips are handled differently depending on the kernel - # version, avoid counting them twice. - if (m/^\@chip_kern24_ids\s*=/ - || m/^\@chip_oldfsc_ids\s*=/ - || m/^\@non_hwmon_chip_ids\s*=/) { - $skip = 1; - next; - } - if ($skip && m/^\);$/) { - $skip = 0; - next; - } - next if $skip; - - # The regular expression may seem a little bit complex, but we wouldn't - # want to exec malicious code. - next unless m/^\s*i2c_addrs\s*=>\s*(\[( *0x[\dA-Fa-f]{2}( *\.\. *0x[\dA-Fa-f]{2})? *,?)+\])\s*,/; - my $addresses = eval $1 || die "Failed to eval \"$1\""; - $chips++; - foreach my $a (@{$addresses}) - { - $histo{$a}++; - } -} -close SD; - -# Print the data. -printf "\%s knows \%d chips and scans \%d addresses.\n\n", - $file, $chips, scalar keys %histo; -print " 0 1 2 3 4 5 6 7 8 9 a b c d e f\n"; -for (my $i=0; $i<128; $i+=16) -{ - printf '%02x:', $i; - for (my $j=0; $j<16; $j++) - { - my $valid = ($i+$j >= 0x04 && $i+$j <= 0x77); - if (defined $histo{$i+$j}) - { - printf '%s%02d', ($valid?' ':'!'), $histo{$i+$j}; - } - else - { - printf ' %s', ($valid?'--':' '); - } - } - print "\n"; -}