Changeset 4335

Show
Ignore:
Timestamp:
03/03/07 15:57:56 (7 years ago)
Author:
khali
Message:

i2cdump: Cleaner output in SMBus block read mode (s).

Location:
lm-sensors/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/CHANGES

    r4334 r4335  
    1919                   Get rid of a useless semaphore (2.6 backport) 
    2020  Programs i2cdetect, i2cdump, isadump: Flush output in real time 
     21  Program i2cdump: Cleaner output in SMBus block read mode 
    2122  Program sensors: Add smsc47m2 support (fans) 
    2223                   Fix -A option (hide adapter name) on error 
  • lm-sensors/trunk/prog/dump/i2cdump.c

    r4316 r4335  
    5858        char filename[20]; 
    5959        unsigned long funcs; 
    60         int block[256]; 
     60        int block[256], s_length = 0; 
    6161        int pec = 0, even = 0; 
    6262        int flags = 0; 
     
    311311                                res = i2c_smbus_read_block_data(file, bank, 
    312312                                      cblock); 
     313                                /* Remember returned block length for a nicer 
     314                                   display later */ 
     315                                s_length = res; 
    313316                        } else { 
    314317                                for (res = 0; res < 256; res += i) { 
     
    328331                        for (i = 0; i < res; i++) 
    329332                                block[i] = cblock[i]; 
    330                         for (i = res; i < 256; i++) 
    331                                 block[i] = -1; 
     333                        if (size != I2C_SMBUS_BLOCK_DATA) 
     334                                for (i = res; i < 256; i++) 
     335                                        block[i] = -1; 
    332336                } 
    333337 
     
    344348                       "    0123456789abcdef\n"); 
    345349                for (i = 0; i < 256; i+=16) { 
     350                        if (size == I2C_SMBUS_BLOCK_DATA && i >= s_length) 
     351                                break; 
    346352                        printf("%02x: ", i); 
    347353                        for (j = 0; j < 16; j++) { 
     
    366372                                        res = block[i+j]; 
    367373 
    368                                 if (res < 0) { 
     374                                if (size == I2C_SMBUS_BLOCK_DATA 
     375                                 && i+j >= s_length) { 
     376                                        printf("   "); 
     377                                } else if (res < 0) { 
    369378                                        printf("XX "); 
    370379                                        if (size == I2C_SMBUS_WORD_DATA) 
     
    379388                        } 
    380389                        printf("   "); 
     390 
    381391                        for (j = 0; j < 16; j++) { 
     392                                if (size == I2C_SMBUS_BLOCK_DATA 
     393                                 && i+j >= s_length) 
     394                                        break; 
     395 
    382396                                res = block[i+j]; 
    383397                                if (res < 0) 
     
    395409                        } 
    396410                        printf("\n"); 
    397                         if (size == I2C_SMBUS_BLOCK_DATA && i == 16) 
    398                                 break; 
    399411                } 
    400412        } else {