@@ -105,6 +105,41 @@ mcu_pin_obj_t *validate_obj_is_free_pin(mp_obj_t obj) {
105105 return pin ;
106106}
107107
108+ // Validate every element in the list is a unique pin
109+ void validate_no_duplicate_pins (mp_obj_t seq , qstr arg_name ) {
110+ mp_int_t num_pins = MP_OBJ_SMALL_INT_VALUE (mp_obj_len (seq ));
111+
112+ for (size_t pin_cnt = 0 ; pin_cnt < num_pins ; pin_cnt ++ ) {
113+ mp_obj_t pin1_obj = mp_obj_subscr (seq , MP_OBJ_NEW_SMALL_INT (pin_cnt ), MP_OBJ_SENTINEL );
114+ mcu_pin_obj_t * pin1 = validate_obj_is_pin (pin1_obj );
115+
116+ for (size_t pin_cnt_2 = pin_cnt + 1 ; pin_cnt_2 < num_pins ; pin_cnt_2 ++ ) {
117+ mp_obj_t pin2_obj = mp_obj_subscr (seq , MP_OBJ_NEW_SMALL_INT (pin_cnt_2 ), MP_OBJ_SENTINEL );
118+ mcu_pin_obj_t * pin2 = validate_obj_is_pin (pin2_obj );
119+ if (pin1 == pin2 ) {
120+ mp_raise_TypeError_varg (translate ("%q contains duplicate pins" ), arg_name );
121+ }
122+ }
123+ }
124+ }
125+
126+ void validate_no_duplicate_pins_2 (mp_obj_t seq1 , mp_obj_t seq2 , qstr arg_name1 , qstr arg_name2 ) {
127+ const size_t num_pins_1 = MP_OBJ_SMALL_INT_VALUE (mp_obj_len (seq1 ));
128+ const size_t num_pins_2 = MP_OBJ_SMALL_INT_VALUE (mp_obj_len (seq2 ));
129+
130+ for (size_t pin_cnt_1 = 0 ; pin_cnt_1 < num_pins_1 ; pin_cnt_1 ++ ) {
131+ mp_obj_t pin1_obj = mp_obj_subscr (seq1 , MP_OBJ_NEW_SMALL_INT (pin_cnt_1 ), MP_OBJ_SENTINEL );
132+ mcu_pin_obj_t * pin1 = validate_obj_is_pin (pin1_obj );
133+
134+ for (size_t pin_cnt_2 = 0 ; pin_cnt_2 < num_pins_2 ; pin_cnt_2 ++ ) {
135+ mp_obj_t pin2_obj = mp_obj_subscr (seq2 , MP_OBJ_NEW_SMALL_INT (pin_cnt_2 ), MP_OBJ_SENTINEL );
136+ if (pin1_obj == pin2_obj ) {
137+ mp_raise_TypeError_varg (translate ("%q and %q contain duplicate objects" ), arg_name1 , arg_name2 );
138+ }
139+ }
140+ }
141+ }
142+
108143// Validate every element in the list to be a free pin.
109144void validate_list_is_free_pins (qstr what , mcu_pin_obj_t * * pins_out , mp_int_t max_pins , mp_obj_t seq , uint8_t * count_out ) {
110145 mp_int_t len = MP_OBJ_SMALL_INT_VALUE (mp_obj_len (seq ));
0 commit comments