Hey, I wrote a driver for the XENSIV PAS CO2 sensor from Infineon using the I2C interface. My idea was to separate the register definitions and translating between the bitpattern and a Rust struct representation from the functions a driver user would need. So in the lib.rs there are some get/set functions as well as some convenience functions like "start measurement" etc. In the regs module there are the registers where each register implements a `Reg` trait that forces it to provide an `address()` function for the register. The simple value registers (1 or 2 byte) are newtype structs holding u8 or i16/u16 (actually, I don't get why they use signed integer for things like pressure or CO2 PPM, these can't be negative?!). The more elaborate registers for config are implemented as structs or enums and provide implementations for from/into u8 etc. If anyone is interested in this and has some time to take a look at that driver, I would appreciate any feedback (here or as an issue/PR/...). I'm very unsure whether I took a sensible approach by making the registers standalone and accessible from outside the crate – or whether that is just overly compilicated and is super impractical. Here is the code: https://github.com/Systemscape/pas-co2-rs/ Thanks!