Skip to content

Commit

Permalink
Add '--bus' option for i2ctools
Browse files Browse the repository at this point in the history
  • Loading branch information
dimerr committed Jan 12, 2024
1 parent 0eecc1d commit b807572
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 6 deletions.
7 changes: 5 additions & 2 deletions src/hal/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,11 @@ int universal_spi_write_register(int fd, unsigned char i2c_addr,
return 0;
}

static int fallback_open_sensor_fd() {
return universal_open_sensor_fd("/dev/i2c-0");
static int fallback_open_sensor_fd(int i2c_adapter_nr) {
char adapter_name[FILENAME_MAX];

snprintf(adapter_name, sizeof(adapter_name), "/dev/i2c-%d", i2c_adapter_nr);
return universal_open_sensor_fd(adapter_name);
}

static void universal_hal_cleanup() {}
Expand Down
12 changes: 10 additions & 2 deletions src/i2cspi.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@

#define SELECT_WIDE(reg_addr) reg_addr > 0xff ? 2 : 1

int i2c_adapter_nr = 0;

static int prepare_i2c_sensor(unsigned char i2c_addr) {
if (!getchipname()) {
puts("Unknown chip");
exit(EXIT_FAILURE);
}

int fd = open_i2c_sensor_fd();
int fd = open_i2c_sensor_fd(i2c_adapter_nr);
if (fd == -1) {
puts("Device not found");
exit(EXIT_FAILURE);
Expand Down Expand Up @@ -254,21 +256,27 @@ static int spidump(int argc, char **argv, bool script_mode) {
extern void print_usage();

int i2cspi_cmd(int argc, char **argv) {
const char *short_options = "s";
const char *short_options = "sb:";
const struct option long_options[] = {
{"script", no_argument, NULL, 's'},
{"bus", 1, NULL, 'b'},
{NULL, 0, NULL, 0},
};
bool script_mode = false;
int res;
int option_index;
int flags;

while ((res = getopt_long_only(argc, argv, short_options, long_options,
&option_index)) != -1) {
switch (res) {
case 's':
script_mode = true;
break;
case 'b':
flags = strtoul(optarg, NULL, 0);
i2c_adapter_nr = flags;
break;
case '?':
print_usage();
return EXIT_FAILURE;
Expand Down
6 changes: 4 additions & 2 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
#define RESET_CL "\x1b[0m"
#define FG_RED "\x1b[31m"

extern int i2c_adapter_nr;

void print_usage() {
#ifndef SKIP_VERSION
printf("ipctool, version: ");
Expand Down Expand Up @@ -91,10 +93,10 @@ void print_usage() {
" i2cset <device address> <register> <new value>\n"
" spiset <register> <new value>\n"
" write a value to I2C/SPI device\n"
" i2cdump [--script] <device address> <from register> <to register>\n"
" i2cdump [--script] [-b, --bus] <device address> <from register> <to register>\n"
" spidump [--script] <from register> <to register>\n"
" dump data from I2C/SPI device\n"
" i2cdetect attempt to detect devices on I2C bus\n"
" i2cdetect [-b, --bus] attempt to detect devices on I2C bus\n"
" reginfo [--script] dump current status of pinmux registers\n"
" gpio (scan|mux) GPIO utilities\n"
" trace [--skip=usleep] <full/path/to/executable> [program "
Expand Down

0 comments on commit b807572

Please sign in to comment.