DataFormat#

class DataFormat(
transfer_bits: int,
data_width_bits: int | None = None,
data_lsb: int = 0,
signed: bool = False,
scaling: ScalingFunction | None = None,
units: str = '',
)[source]#

Bases: object

How to extract logical data from an I2C transfer and convert to physical units.

Variables:
  • transfer_bits (int) – Total bits transferred over I2C.

  • data_width_bits (int | None) – Logical data width if narrower than transfer_bits; None uses all.

  • data_lsb (int) – Starting bit position of the logical data.

  • signed (bool) – Whether the logical data is 2’s-complement signed.

  • scaling (ScalingFunction | None) – Optional scaling to convert raw → physical.

  • units (str) – Display string for the physical units.

transfer_bits: int#
data_width_bits: int | None = None#
data_lsb: int = 0#
signed: bool = False#
scaling: ScalingFunction | None = None#
units: str = ''#
property data_width_bytes: int#

Return number of bytes for transfer.

extract_data(transfer_raw: int) → int[source]#

Slice the logical data field out of transfer_raw (sign-extended when signed).

pack_data(data_raw: int) → int[source]#

Pack data_raw into the transfer container at data_lsb; validates range vs signed.

float_from_raw(transfer_raw: int) → float[source]#

Extract logical data and apply scaling; falls back to raw float if no scaling is set.

raw_from_float(physical: float) → int[source]#

Pack physical into a raw transfer value. Raises ValueError if out of range.