libsensors API changes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

In the past few days, I have been thinking about the libsensors4 API,
in particular the way the chip features are accessed. Right now we have
a single function, sensors_get_all_features(), returning all features
in sequence, mixing main features and subfeatures. Actually, main
features and subfeatures are only differentiated by the mapping field
value, but otherwise they are represented by the same structure.

Looking at the code of several user-space applications using
libsensors, this interface is not very convenient. Except for "sensors
-u", which makes some sense as I think it is the reason why this
interface exists in the first place. Here is a list of things I found
the applications would take benefit of if libsensors would propose a
suitable interface:

* Separate lists for main features and subfeatures of each main feature.

* Subfeature existence information (does feature F of chip C have
subfeature X?)

* Direct subfeature value lookup (what's the value of subfeature X of
feature F of chip C?)

So I am in the process of extending the libsensors4 API to implement
these interfaces. The first point can be either done easily (simply
splitting sensors_get_all_features() to two separate functions) or
taken further: I think it would make sense to have a separate structure
for main features or "channels" (e.g. in0, temp1...) and for
subfeatures (e.g. in0_input, temp1_min...) This would make things much
more structured. For example, labels essentially apply to main
features, not subfeatures. Same goes for compute statements. OTOH, set
statements apply to subfeatures, not main features.

Going that route would speed up the library code at some places. It
would also let us clear the fooN / fooN_input confusion which forces us
to have some ugly hard-coded exceptions in the library. The drawback is
that we may lose some flexibility by going that route, so I'm not sure
how far we want to go.

The last two points would avoid some duplication in applications, and
would make their code look much nicer. There is a concern with
algorithmic complexity though: direct value lookups are likely to be in
O(N) while for example "sensors" manages to do it in O(1) at the
moment. However, the number of subfeatures being relatively small for
each main feature, it might not be an issue at all.

I am working on some patches implementing these API changes, I hope to
be able to post them for comments and review at the end of the week.
Until then, I would also welcome comments on the general ideas I just
exposed.

Thanks,
-- 
Jean Delvare




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux