docs: def value(self) -> float:
          """
          Get a centre-compensated, scaled, value for the axis, taking any dead-zone into account. The value will
          scale from 0.0 at the edge of the dead-zone to 1.0 (positive) or -1.0 (negative) at the extreme position of
          the controller or the edge of the hot zone, if defined as other than 1.0. The axis will auto-calibrate for
          maximum value, initially it will behave as if the highest possible value from the hardware is 0.9 in each
          direction, and will expand this as higher values are observed. This is scaled by this function and should
          always return 1.0 or -1.0 at the extreme ends of the axis.
  
          :return: a float value, negative to the left or down and ranging from -1.0 to 1.0
          """
          mapped_value = map_dual_axis(self.min, self.max, self.centre, self.dead_zone, self.hot_zone, self.__value)
          if self.invert:
              return -mapped_value
          else:
              return mapped_value