Jean Delvare wrote: > Support more bus types (part 2 of 2). Originally libsensors was very > i2c-centric. Make it more neutral so that we can cleanly support > additional bus types such as SPI or One-Wire. > > This second part updates sensors_bus to use sensors_bus_id. Thanks > to Mark M. Hoffman for showing me how the configuration file > parser could be modified to support that change. > Looks good to me, can you commit these to svn before the end of the weekend, monday I'll be back at work and there I have several machines to test with, so if you can get all your changes into svn before monday then I can give svn a good testing with various setups @ work. Regards, Hans > --- > lib/access.c | 3 ++- > lib/conf-parse.y | 14 +++++++------- > lib/data.c | 15 ++++++++------- > lib/data.h | 8 ++++---- > lib/sysfs.c | 5 +++-- > 5 files changed, 24 insertions(+), 21 deletions(-) > > --- lm-sensors-3.orig/lib/conf-parse.y 2007-08-17 09:23:30.000000000 +0200 > +++ lm-sensors-3/lib/conf-parse.y 2007-08-17 10:54:59.000000000 +0200 > @@ -94,7 +94,7 @@ static sensors_chip *current_chip = NULL > void *nothing; > sensors_chip_name_list chips; > sensors_expr *expr; > - int bus; > + sensors_bus_id bus; > sensors_chip_name chip; > int line; > } > @@ -118,7 +118,7 @@ static sensors_chip *current_chip = NULL > > %type <chips> chip_name_list > %type <expr> expression > -%type <bus> i2cbus_name > +%type <bus> bus_id > %type <name> adapter_name > %type <name> function_name > %type <name> string > @@ -141,10 +141,10 @@ line: bus_statement EOL > | error EOL > ; > > -bus_statement: BUS i2cbus_name adapter_name > +bus_statement: BUS bus_id adapter_name > { sensors_bus new_el; > new_el.lineno = $1; > - new_el.number = $2; > + new_el.bus = $2; > new_el.adapter = $3; > bus_add_el(&new_el); > } > @@ -287,11 +287,11 @@ expression: FLOAT > } > ; > > -i2cbus_name: NAME > - { int res = sensors_parse_i2cbus_name($1,&$$); > +bus_id: NAME > + { int res = sensors_parse_bus_id($1,&$$); > free($1); > if (res) { > - sensors_yyerror("Parse error in i2c bus name"); > + sensors_yyerror("Parse error in bus id"); > YYERROR; > } > } > --- lm-sensors-3.orig/lib/data.c 2007-08-17 10:40:49.000000000 +0200 > +++ lm-sensors-3/lib/data.c 2007-08-17 10:57:54.000000000 +0200 > @@ -167,7 +167,7 @@ int sensors_snprintf_chip_name(char *str > return -SENSORS_ERR_CHIP_NAME; > } > > -int sensors_parse_i2cbus_name(const char *name, int *res) > +int sensors_parse_bus_id(const char *name, sensors_bus_id *bus) > { > char *endptr; > > @@ -175,8 +175,9 @@ int sensors_parse_i2cbus_name(const char > return -SENSORS_ERR_BUS_NAME; > } > name += 4; > - *res = strtoul(name, &endptr, 10); > - if (*name == '\0' || *endptr != '\0' || *res < 0) > + bus->type = SENSORS_BUS_TYPE_I2C; > + bus->nr = strtoul(name, &endptr, 10); > + if (*name == '\0' || *endptr != '\0' || bus->nr < 0) > return -SENSORS_ERR_BUS_NAME; > return 0; > } > @@ -185,12 +186,12 @@ int sensors_substitute_chip(sensors_chip > { > int i, j; > for (i = 0; i < sensors_config_busses_count; i++) > - if (name->bus.type == SENSORS_BUS_TYPE_I2C && > - sensors_config_busses[i].number == name->bus.nr) > + if (sensors_config_busses[i].bus.type == name->bus.type && > + sensors_config_busses[i].bus.nr == name->bus.nr) > break; > > if (i == sensors_config_busses_count) { > - sensors_parse_error("Undeclared i2c bus referenced", lineno); > + sensors_parse_error("Undeclared bus id referenced", lineno); > name->bus.nr = sensors_proc_bus_count; > return -SENSORS_ERR_BUS_NAME; > } > @@ -199,7 +200,7 @@ int sensors_substitute_chip(sensors_chip > for (j = 0; j < sensors_proc_bus_count; j++) { > if (!strcmp(sensors_config_busses[i].adapter, > sensors_proc_bus[j].adapter)) { > - name->bus.nr = sensors_proc_bus[j].number; > + name->bus.nr = sensors_proc_bus[j].bus.nr; > return 0; > } > } > --- lm-sensors-3.orig/lib/data.h 2007-08-17 09:23:30.000000000 +0200 > +++ lm-sensors-3/lib/data.h 2007-08-17 10:53:33.000000000 +0200 > @@ -110,10 +110,10 @@ typedef struct sensors_chip { > int lineno; > } sensors_chip; > > -/* Config file bus declaration: the i2c bus number, combined with adapter > +/* Config file bus declaration: the bus type and number, combined with adapter > name */ > typedef struct sensors_bus { > - int number; > + sensors_bus_id bus; > char *adapter; > int lineno; > } sensors_bus; > @@ -175,8 +175,8 @@ extern int sensors_proc_bus_max; > int sensors_substitute_busses(void); > > > -/* Parse an i2c bus name into its components. Returns 0 on succes, a value from > +/* Parse a bus id into its components. Returns 0 on succes, a value from > error.h on failure. */ > -int sensors_parse_i2cbus_name(const char *name, int *res); > +int sensors_parse_bus_id(const char *name, sensors_bus_id *bus); > > #endif /* def LIB_SENSORS_DATA_H */ > --- lm-sensors-3.orig/lib/access.c 2007-08-17 09:24:35.000000000 +0200 > +++ lm-sensors-3/lib/access.c 2007-08-17 10:53:33.000000000 +0200 > @@ -326,7 +326,8 @@ const char *sensors_get_adapter_name(con > > /* bus types with several instances */ > for (i = 0; i < sensors_proc_bus_count; i++) > - if (sensors_proc_bus[i].number == bus->nr) > + if (sensors_proc_bus[i].bus.type == bus->type && > + sensors_proc_bus[i].bus.nr == bus->nr) > return sensors_proc_bus[i].adapter; > return NULL; > } > --- lm-sensors-3.orig/lib/sysfs.c 2007-08-17 09:24:35.000000000 +0200 > +++ lm-sensors-3/lib/sysfs.c 2007-08-17 10:53:33.000000000 +0200 > @@ -380,9 +380,10 @@ int sensors_read_sysfs_bus(void) > (attr = sysfs_get_device_attr(dev, "name")))) > continue; > > - if (sscanf(clsdev->name, "i2c-%d", &entry.number) != 1 || > - entry.number == 9191) /* legacy ISA */ > + if (sscanf(clsdev->name, "i2c-%hd", &entry.bus.nr) != 1 || > + entry.bus.nr == 9191) /* legacy ISA */ > continue; > + entry.bus.type = SENSORS_BUS_TYPE_I2C; > > /* NB: attr->value[attr->len-1] == '\n'; chop that off */ > entry.adapter = strndup(attr->value, attr->len - 1); > >