Changeset 5237 for i2c-tools/trunk/tools/i2cset.c
- Timestamp:
- 05/05/08 14:38:22 (4 years ago)
- Files:
-
- 1 modified
-
i2c-tools/trunk/tools/i2cset.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
i2c-tools/trunk/tools/i2cset.c
r5236 r5237 36 36 { 37 37 fprintf(stderr, 38 "Usage: i2cset [-f] [-y] I2CBUS CHIP-ADDRESS DATA-ADDRESS VALUE [MODE [MASK]]\n"38 "Usage: i2cset [-f] [-y] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE [MODE [MASK]]]\n" 39 39 " I2CBUS is an integer or an I2C bus name\n" 40 40 " ADDRESS is an integer (0x03 - 0x77)\n" … … 58 58 59 59 switch (size) { 60 case I2C_SMBUS_BYTE: 61 if (!(funcs & I2C_FUNC_SMBUS_WRITE_BYTE)) { 62 fprintf(stderr, "Error: Adapter for i2c bus %d does " 63 "not have byte send capability\n", i2cbus); 64 return -1; 65 } 66 break; 67 60 68 case I2C_SMBUS_BYTE_DATA: 61 69 if (!(funcs & I2C_FUNC_SMBUS_WRITE_BYTE_DATA)) { … … 101 109 102 110 fprintf(stderr, "I will write to device file %s, chip address " 103 "0x%02x, data address\n0x%02x, data 0x%02x%s, mode " 104 "%s.\n", filename, address, daddress, value, 105 vmask ? " (masked)" : "", 106 size == I2C_SMBUS_BYTE_DATA ? "byte" : "word"); 111 "0x%02x, data address\n0x%02x, ", filename, address, daddress); 112 if (size == I2C_SMBUS_BYTE) 113 fprintf(stderr, "no data.\n"); 114 else 115 fprintf(stderr, "data 0x%02x%s, mode %s.\n", value, 116 vmask ? " (masked)" : "", 117 size == I2C_SMBUS_BYTE_DATA ? "byte" : "word"); 107 118 if (pec) 108 119 fprintf(stderr, "PEC checking enabled.\n"); … … 148 159 } 149 160 150 if (argc < flags + 5)161 if (argc < flags + 4) 151 162 help(); 152 163 … … 165 176 } 166 177 167 value = strtol(argv[flags+4], &end, 0); 168 if (*end) { 169 fprintf(stderr, "Error: Data value invalid!\n"); 170 help(); 178 if (argc > flags + 4) { 179 size = I2C_SMBUS_BYTE_DATA; 180 value = strtol(argv[flags+4], &end, 0); 181 if (*end || value < 0) { 182 fprintf(stderr, "Error: Data value invalid!\n"); 183 help(); 184 } 185 } else { 186 size = I2C_SMBUS_BYTE; 187 value = -1; 171 188 } 172 189 … … 180 197 } 181 198 pec = argv[flags+5][1] == 'p'; 182 } else {183 size = I2C_SMBUS_BYTE_DATA;184 199 } 185 200 … … 192 207 } 193 208 194 if (value < 0 195 || (size == I2C_SMBUS_BYTE_DATA && value > 0xff) 209 if ((size == I2C_SMBUS_BYTE_DATA && value > 0xff) 196 210 || (size == I2C_SMBUS_WORD_DATA && value > 0xffff)) { 197 211 fprintf(stderr, "Error: Data value out of range!\n"); … … 250 264 } 251 265 252 if (size == I2C_SMBUS_WORD_DATA) { 266 switch (size) { 267 case I2C_SMBUS_BYTE: 268 res = i2c_smbus_write_byte(file, daddress); 269 break; 270 case I2C_SMBUS_WORD_DATA: 253 271 res = i2c_smbus_write_word_data(file, daddress, value); 254 } else { 272 break; 273 default: /* I2C_SMBUS_BYTE_DATA */ 255 274 res = i2c_smbus_write_byte_data(file, daddress, value); 256 275 } … … 270 289 } 271 290 272 if (size == I2C_SMBUS_WORD_DATA) { 291 switch (size) { 292 case I2C_SMBUS_BYTE: 293 /* No readback */ 294 break; 295 case I2C_SMBUS_WORD_DATA: 273 296 res = i2c_smbus_read_word_data(file, daddress); 274 } else { 297 break; 298 default: /* I2C_SMBUS_BYTE_DATA */ 275 299 res = i2c_smbus_read_byte_data(file, daddress); 276 300 } 277 301 close(file); 302 303 if (size == I2C_SMBUS_BYTE) /* We're done */ 304 exit(0); 278 305 279 306 if (res < 0) {
