|
1 | 1 | """Test functions related to core RF24 functionality.""" |
2 | 2 |
|
3 | | -from typing import Optional |
| 3 | +from typing import Optional, Union |
4 | 4 | import pytest |
5 | | -from circuitpython_nrf24l01.rf24 import RF24 |
| 5 | +from circuitpython_nrf24l01.rf24 import RF24, FIFO_EMPTY, FIFO_FULL, FIFO_OCCUPIED |
6 | 6 | from circuitpython_nrf24l01.fake_ble import FakeBLE |
7 | 7 |
|
8 | 8 |
|
@@ -299,3 +299,49 @@ def test_carrier_functions(rf24_obj: RF24, monkeypatch: pytest.MonkeyPatch): |
299 | 299 | assert not rf24_obj.power |
300 | 300 | assert not rf24_obj.ce_pin |
301 | 301 | assert not rf24_obj._spi._spi.state.registers[6][0] & 0x90 |
| 302 | + |
| 303 | + |
| 304 | +@pytest.mark.parametrize( |
| 305 | + "reg_val,expected,about_tx,check_empty", |
| 306 | + [ |
| 307 | + # raw RX state |
| 308 | + (0x1, FIFO_EMPTY, False, None), |
| 309 | + (0x2, FIFO_FULL, False, None), |
| 310 | + (0, FIFO_OCCUPIED, False, None), |
| 311 | + # raw TX state |
| 312 | + (0x10, FIFO_EMPTY, True, None), |
| 313 | + (0x20, FIFO_FULL, True, None), |
| 314 | + (0, FIFO_OCCUPIED, True, None), |
| 315 | + # simplified RX state |
| 316 | + (0x1, bool(FIFO_EMPTY), False, True), # is empty |
| 317 | + (0x2, bool(FIFO_FULL), False, False), # is full |
| 318 | + # simplified TX state |
| 319 | + (0x10, bool(FIFO_EMPTY), True, True), # is empty |
| 320 | + (0x20, bool(FIFO_FULL), True, False), # is full |
| 321 | + # simulated binary corrupted MISO |
| 322 | + pytest.param(3, 3, False, None, marks=pytest.mark.xfail), |
| 323 | + ], |
| 324 | + ids=[ |
| 325 | + "RX_EMPTY", |
| 326 | + "RX_FULL", |
| 327 | + "RX_OCCUPIED", |
| 328 | + "TX_EMPTY", |
| 329 | + "TX_FULL", |
| 330 | + "TX_OCCUPIED", |
| 331 | + "bool(RX_EMPTY)", |
| 332 | + "bool(RX_FULL)", |
| 333 | + "bool(TX_EMPTY)", |
| 334 | + "bool(TX_FULL)", |
| 335 | + "bin-corruption", |
| 336 | + ], |
| 337 | +) |
| 338 | +def test_fifo_state( |
| 339 | + rf24_obj, |
| 340 | + reg_val: int, |
| 341 | + expected: Union[int, bool], |
| 342 | + about_tx: bool, |
| 343 | + check_empty: Optional[bool], |
| 344 | +): |
| 345 | + """check the fifo state is accurately described""" |
| 346 | + rf24_obj._spi._spi.state.registers[0x17][0] = reg_val |
| 347 | + assert expected == rf24_obj.fifo(about_tx=about_tx, check_empty=check_empty) |
0 commit comments