+ self.id = pin_id
+ self._mode = None
+ self.previous_value = None
+ self.current_value = None
+ # TODO: Can we simplify the pin behavior dict and the pin map dict?
+ # mapping of pin definition names to expected behavior
+ self.expected_pin_behavior = {
+ "Dx_INPUT_TRUE": self.return_true,
+ "Dx_INPUT_FALSE": self.return_false,
+ "Dx_INPUT_TRUE_THEN_FALSE": self.return_toggle,
+ "Dx_INPUT_TRUE_PULL_UP": self.return_true,
+ "Dx_INPUT_TRUE_PULL_DOWN": self.return_true,
+ "Dx_OUTPUT_TRUE": self.return_true,
+ "Dx_OUTPUT_FALSE": self.return_false,
+ "Ax_INPUT_RAND_INT": self.return_random_int,
+ }
+ # mapping of pin numbers to pin definition names
+ self.pin_number_to_pin_definition_name = {
+ 0: "Dx_INPUT_TRUE",
+ 1: "Dx_INPUT_FALSE",
+ 2: "Dx_INPUT_TRUE_PULL_UP",
+ 3: "Dx_INPUT_TRUE_PULL_DOWN",
+ 4: "Dx_OUTPUT_TRUE",
+ 5: "Dx_OUTPUT_FALSE",
+ 6: "NEOPIXEL",
+ 7: "Ax_INPUT_RAND_INT",
+ 8: "Ax_INPUT_FIXED_INT_PI",
+ 9: "Ax_OUTPUT_WAVE_SINE",
+ 10: "Ax_OUTPUT_WAVE_SAWTOOTH",
+ }