@@ -17,7 +17,7 @@ hardware_init: |
1717
1818# Register values for mock tests
1919mock_registers :
20- # IODIR (0x00): all inputs by default (0xFF)
20+ # IODIR (0x00): all inputs by default
2121 0x00 : 0xFF
2222 # IPOL (0x01): no inversion
2323 0x01 : 0x00
@@ -35,12 +35,14 @@ mock_registers:
3535 0x07 : 0x00
3636 # INTCAP (0x08): default
3737 0x08 : 0x00
38- # GPIO (0x09): D-PAD buttons (bits 4-7 as inputs with pull-ups )
38+ # GPIO (0x09): D-PAD buttons (bits 4-7 high )
3939 0x09 : 0xF0
4040 # OLAT (0x0A): default
4141 0x0A : 0x00
4242
4343tests :
44+ # --- Default state / constructor tests ---
45+
4446 - name : " Read IODIR default value"
4547 action : call
4648 method : get_iodir
@@ -50,9 +52,25 @@ tests:
5052 - name : " Read GPIO register"
5153 action : call
5254 method : get_gpio
53- expect_not_none : true
55+ expect : 0xF0
5456 mode : [mock, hardware]
5557
58+ - name : " Constructor leaves reset pin high"
59+ action : script
60+ script : |
61+ result = dev.reset_pin.value() == 1
62+ expect_true : true
63+ mode : [mock]
64+
65+ - name : " Read individual GPIO level"
66+ action : call
67+ method : get_level
68+ args : [0]
69+ expect_not_none : true
70+ mode : [mock]
71+
72+ # --- Power / reset tests ---
73+
5674 - name : " Power off holds reset pin low"
5775 action : script
5876 script : |
@@ -70,13 +88,191 @@ tests:
7088 expect_true : true
7189 mode : [mock]
7290
73- - name : " Read individual GPIO level"
74- action : call
75- method : get_level
76- args : [0]
77- expect_not_none : true
91+ - name : " Power cycle toggles reset pin"
92+ action : script
93+ script : |
94+ dev.power_off()
95+ off_state = dev.reset_pin.value()
96+ dev.power_on()
97+ on_state = dev.reset_pin.value()
98+ result = off_state == 0 and on_state == 1
99+ expect_true : true
100+ mode : [mock]
101+
102+ - name : " Soft reset restores default registers"
103+ action : script
104+ script : |
105+ dev.set_iodir(0x00)
106+ dev.set_gppu(0xFF)
107+ dev.set_iocon(0x27)
108+ dev.set_gpinten(0xFF)
109+ dev._soft_reset()
110+ result = (
111+ dev.get_iodir() == 0xFF and
112+ dev.get_gppu() == 0x00 and
113+ dev.get_iocon().get_register_value() == 0x00 and
114+ dev.get_gpinten() == 0x00
115+ )
116+ expect_true : true
117+ mode : [mock]
118+
119+ # --- Register access tests ---
120+
121+ - name : " Set IODIR register"
122+ action : script
123+ script : |
124+ dev.set_iodir(0xF0)
125+ result = dev.get_iodir() == 0xF0
126+ expect_true : true
127+ mode : [mock]
128+
129+ - name : " Get GPPU register after write"
130+ action : script
131+ script : |
132+ dev.set_gppu(0xA5)
133+ result = dev.get_gppu() == 0xA5
134+ expect_true : true
135+ mode : [mock]
136+
137+ - name : " Set and get OLAT register"
138+ action : script
139+ script : |
140+ dev.set_olat(0x3C)
141+ result = dev.get_olat() == 0x3C
142+ expect_true : true
143+ mode : [mock]
144+
145+ - name : " Set and read full GPIO port"
146+ action : script
147+ script : |
148+ dev.set_iodir(0x00)
149+ dev.set_gpio(0x5A)
150+ result = dev.get_gpio() == 0x5A
151+ expect_true : true
152+ mode : [mock]
153+
154+ # --- Setup / pin configuration tests ---
155+
156+ - name : " Setup configures pin as input with pull-up"
157+ action : script
158+ script : |
159+ dev.set_iodir(0x00)
160+ dev.set_gppu(0x00)
161+ dev.set_ipol(0x00)
162+ dev.setup(2, 1, pullup=1, polarity=0)
163+ result = (
164+ dev.get_iodir() == 0x04 and
165+ dev.get_gppu() == 0x04 and
166+ dev.get_ipol() == 0x00
167+ )
168+ expect_true : true
169+ mode : [mock]
170+
171+ - name : " Setup configures pin as output without pull-up"
172+ action : script
173+ script : |
174+ dev.set_iodir(0xFF)
175+ dev.set_gppu(0xFF)
176+ dev.set_ipol(0x00)
177+ dev.setup(3, 0, pullup=0, polarity=0)
178+ result = (
179+ dev.get_iodir() == 0xF7 and
180+ dev.get_gppu() == 0xF7 and
181+ dev.get_ipol() == 0x00
182+ )
183+ expect_true : true
78184 mode : [mock]
79185
186+ - name : " Setup configures polarity inversion"
187+ action : script
188+ script : |
189+ dev.set_iodir(0x00)
190+ dev.set_gppu(0x00)
191+ dev.set_ipol(0x00)
192+ dev.setup(1, 1, pullup=1, polarity=1)
193+ result = (
194+ dev.get_iodir() == 0x02 and
195+ dev.get_gppu() == 0x02 and
196+ dev.get_ipol() == 0x02
197+ )
198+ expect_true : true
199+ mode : [mock]
200+
201+ # --- GPIO level tests ---
202+
203+ - name : " Set and get individual output level high"
204+ action : script
205+ script : |
206+ dev.set_iodir(0xFE)
207+ dev.set_gpio(0x00)
208+ dev.set_level(0, 1)
209+ result = dev.get_level(0) == 1 and dev.get_gpio() == 0x01
210+ expect_true : true
211+ mode : [mock]
212+
213+ - name : " Set and get individual output level low"
214+ action : script
215+ script : |
216+ dev.set_iodir(0xFE)
217+ dev.set_gpio(0x01)
218+ dev.set_level(0, 0)
219+ result = dev.get_level(0) == 0 and dev.get_gpio() == 0x00
220+ expect_true : true
221+ mode : [mock]
222+
223+ - name : " Set level ignored on input pin; GP4 remains high from GPIO (0xF0)"
224+ action : script
225+ script : |
226+ dev.set_iodir(0xFF)
227+ dev.set_gpio(0xF0)
228+ dev.set_level(4, 0)
229+ result = dev.get_gpio() == 0xF0 and dev.get_level(4) == 1
230+ expect_true : true
231+ mode : [mock]
232+
233+ - name : " Set level ignores invalid pin index"
234+ action : script
235+ script : |
236+ dev.set_iodir(0x00)
237+ dev.set_gpio(0xAA)
238+ dev.set_level(8, 1)
239+ result = dev.get_gpio() == 0xAA
240+ expect_true : true
241+ mode : [mock]
242+
243+ - name : " Get level returns low for invalid pin index"
244+ action : script
245+ script : |
246+ result = dev.get_level(8) == 0
247+ expect_true : true
248+ mode : [mock]
249+
250+ # --- Interrupt configuration tests ---
251+
252+ - name : " Interrupt on change configures GPINTEN and INTCON"
253+ action : script
254+ script : |
255+ dev.set_gpinten(0x00)
256+ dev.set_intcon(0x00)
257+ dev.interrupt_on_change(2, lambda level: None)
258+ result = (
259+ dev.get_gpinten() == 0x04 and
260+ dev.get_intcon() == 0x00
261+ )
262+ expect_true : true
263+ mode : [mock]
264+
265+ - name : " Disable interrupt clears GPINTEN bit"
266+ action : script
267+ script : |
268+ dev.interrupt_on_change(2, lambda level: None)
269+ dev.disable_interrupt(2)
270+ result = (dev.get_gpinten() & 0x04) == 0
271+ expect_true : true
272+ mode : [mock]
273+
274+ # --- Manual hardware check ---
275+
80276 - name : " D-PAD buttons state"
81277 action : manual
82278 display :
0 commit comments