HAL Parity#

Generated by python3 tests/stdlib/report_hal_parity.py.

The scan parses lib/src/pymcu/hal and the compatibility repositories with ast; it does not import HAL modules.

Backend Matrix#

Peripheral

avr

pic12

pic14

pic18

riscv

rp2040

rp2350

adc

provided

missing

partial

partial

missing

partial

partial

console

missing

missing

missing

missing

missing

provided

provided

counter

provided

missing

missing

missing

missing

missing

missing

dma

missing

missing

missing

missing

missing

provided

provided

eeprom

provided

missing

missing

missing

missing

missing

missing

encoder

provided

missing

missing

missing

missing

missing

missing

gpio

provided

partial

partial

partial

partial

partial

partial

i2c

provided

missing

missing

missing

missing

partial

partial

pulse

provided

missing

missing

missing

missing

missing

missing

pwm

provided

missing

partial

partial

missing

partial

partial

servo

provided

missing

missing

missing

missing

missing

missing

spi

provided

missing

missing

missing

missing

partial

partial

timer

provided

provided

provided

partial

missing

missing

missing

tone

provided

missing

missing

missing

missing

missing

missing

uart

provided

missing

partial

partial

missing

partial

partial

watchdog

provided

missing

missing

missing

missing

missing

missing

wifi

missing

missing

missing

missing

missing

provided

provided

API Deviations#

191 facade/API parity deviations are currently allowlisted.

  • adc.AnalogPin.measure_supply_millivolts (tracked:#387): pic14:pymcu.hal.pic14.adc.AnalogPin is missing method measure_supply_millivolts

  • adc.AnalogPin.busy (tracked:#387): pic18:pymcu.hal.pic18.adc.AnalogPin adds method busy

  • adc.AnalogPin.measure_supply_millivolts (tracked:#387): pic18:pymcu.hal.pic18.adc.AnalogPin is missing method measure_supply_millivolts

  • adc.AnalogPin.__init__ (tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin.init signature/decorators (self, channel=Constant(value=0)) differ from (self, channel)

  • adc.AnalogPin.irq (tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin is missing method irq

  • adc.AnalogPin.measure_supply_millivolts (tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin is missing method measure_supply_millivolts

  • adc.AnalogPin.read_result (tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin is missing method read_result

  • adc.AnalogPin.start (tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin is missing method start

  • adc.AnalogPin.start_conversion (tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin is missing method start_conversion

  • adc.AnalogPin.__init__ (tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin.init signature/decorators (self, channel=Constant(value=0)) differ from (self, channel)

  • adc.AnalogPin.irq (tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin is missing method irq

  • adc.AnalogPin.measure_supply_millivolts (tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin is missing method measure_supply_millivolts

  • adc.AnalogPin.read_result (tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin is missing method read_result

  • adc.AnalogPin.start (tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin is missing method start

  • adc.AnalogPin.start_conversion (tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin is missing method start_conversion

  • gpio.Pin (tracked:#387): pic14:pymcu.hal.pic14.gpio.Pin constants differ: missing IN_PULLUP, IRQ_CHANGE

  • gpio.Pin (tracked:#387): pic18:pymcu.hal.pic14.gpio.Pin constants differ: missing IN_PULLUP, IRQ_CHANGE

  • gpio.Pin (tracked:#387): pic12:pymcu.hal.pic14.gpio.Pin constants differ: missing IN_PULLUP, IRQ_CHANGE

  • gpio.Pin (tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin constants differ: missing DRIVE_0, DRIVE_1, IN_PULLUP, IRQ_CHANGE, IRQ_FALLING, IRQ_HIGH_LEVEL, IRQ_LOW_LEVEL, IRQ_RISING

  • gpio.Pin.__init__ (tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin.init signature/decorators (self, pin, mode=Constant(value=0), pull=UnaryOp(op=USub(), operand=Constant(value=1)), value=UnaryOp(op=USub(), operand=Constant(value=1))) differ from (self, name, mode, pull=UnaryOp(op=USub(), operand=Constant(value=1)), value=UnaryOp(op=USub(), operand=Constant(value=1)), drive=Constant(value=0), alt=UnaryOp(op=USub(), operand=Constant(value=1)))

  • gpio.Pin.drive (tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin is missing method drive

  • gpio.Pin.init (tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin is missing method init

  • gpio.Pin.irq (tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin is missing method irq

  • gpio.Pin.mode (tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin.mode signature/decorators (self, m) @inline differ from (self, m=UnaryOp(op=USub(), operand=Constant(value=1))) @inline

  • gpio.Pin.pull (tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin.pull signature/decorators (self, p) @inline differ from (self, pull_mode) @inline

  • gpio.Pin (tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin constants differ: missing DRIVE_0, DRIVE_1, IN_PULLUP, IRQ_CHANGE, IRQ_FALLING, IRQ_HIGH_LEVEL, IRQ_LOW_LEVEL, IRQ_RISING

  • gpio.Pin.__init__ (tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin.init signature/decorators (self, pin, mode=Constant(value=0), pull=UnaryOp(op=USub(), operand=Constant(value=1)), value=UnaryOp(op=USub(), operand=Constant(value=1))) differ from (self, name, mode, pull=UnaryOp(op=USub(), operand=Constant(value=1)), value=UnaryOp(op=USub(), operand=Constant(value=1)), drive=Constant(value=0), alt=UnaryOp(op=USub(), operand=Constant(value=1)))

  • gpio.Pin.drive (tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin is missing method drive

  • gpio.Pin.init (tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin is missing method init

  • gpio.Pin.irq (tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin is missing method irq

  • gpio.Pin.mode (tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin.mode signature/decorators (self, m) @inline differ from (self, m=UnaryOp(op=USub(), operand=Constant(value=1))) @inline

  • gpio.Pin.pull (tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin.pull signature/decorators (self, p) @inline differ from (self, pull_mode) @inline

  • gpio.Pin (tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin constants differ: missing DRIVE_0, DRIVE_1, IN_PULLUP, IRQ_CHANGE, IRQ_FALLING, IRQ_HIGH_LEVEL, IRQ_LOW_LEVEL, IRQ_RISING

  • gpio.Pin.drive (tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin is missing method drive

  • gpio.Pin.init (tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin.init signature/decorators (self, mode=UnaryOp(op=USub(), operand=Constant(value=1)), pull=UnaryOp(op=USub(), operand=Constant(value=1)), value=UnaryOp(op=USub(), operand=Constant(value=1))) @inline differ from (self, mode=UnaryOp(op=USub(), operand=Constant(value=1)), pull=UnaryOp(op=USub(), operand=Constant(value=1)), value=UnaryOp(op=USub(), operand=Constant(value=1)), drive=Constant(value=0), alt=UnaryOp(op=USub(), operand=Constant(value=1))) @inline

  • gpio.Pin.irq (tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin is missing method irq

  • gpio.Pin.pull (tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin is missing method pull

  • gpio.Pin.pulse_in (tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin is missing method pulse_in

  • i2c.I2C (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C constants differ: missing ADDR_READ, ADDR_WRITE, DATA_ACK, DATA_RECEIVED, DATA_SENT, LAST_RECEIVED, LAST_SENT, SLA_ACK, SLA_NACK, SLA_R_ACK, START, STOP_RECEIVED

  • i2c.I2C.__enter__ (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method enter

  • i2c.I2C.__exit__ (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method exit

  • i2c.I2C.__init__ (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C.init signature/decorators (self, freq=Constant(value=100000), sda=Constant(value=4), scl=Constant(value=5)) differ from (self, addr=Constant(value=0), general_call=Constant(value=0), freq=Constant(value=100000))

  • i2c.I2C.acknowledge (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method acknowledge

  • i2c.I2C.end (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method end

  • i2c.I2C.frequency (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method frequency

  • i2c.I2C.irq (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method irq

  • i2c.I2C.nack (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method nack

  • i2c.I2C.ping (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method ping

  • i2c.I2C.read (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method read

  • i2c.I2C.read_ack (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method read_ack

  • i2c.I2C.read_from (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method read_from

  • i2c.I2C.read_n (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method read_n

  • i2c.I2C.read_nack (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method read_nack

  • i2c.I2C.readfrom_mem (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method readfrom_mem

  • i2c.I2C.ready (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method ready

  • i2c.I2C.start (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method start

  • i2c.I2C.status (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method status

  • i2c.I2C.stop (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method stop

  • i2c.I2C.write (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method write

  • i2c.I2C.write_bytes (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C.write_bytes signature/decorators (self, addr, data, n) @inline differ from (self, addr, buf, n) @inline

  • i2c.I2C.writebyte (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method writebyte

  • i2c.I2C.writeto_mem (tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method writeto_mem

  • i2c.I2C (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C constants differ: missing ADDR_READ, ADDR_WRITE, DATA_ACK, DATA_RECEIVED, DATA_SENT, LAST_RECEIVED, LAST_SENT, SLA_ACK, SLA_NACK, SLA_R_ACK, START, STOP_RECEIVED

  • i2c.I2C.__enter__ (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method enter

  • i2c.I2C.__exit__ (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method exit

  • i2c.I2C.__init__ (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C.init signature/decorators (self, freq=Constant(value=100000), sda=Constant(value=4), scl=Constant(value=5)) differ from (self, addr=Constant(value=0), general_call=Constant(value=0), freq=Constant(value=100000))

  • i2c.I2C.acknowledge (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method acknowledge

  • i2c.I2C.end (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method end

  • i2c.I2C.frequency (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method frequency

  • i2c.I2C.irq (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method irq

  • i2c.I2C.nack (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method nack

  • i2c.I2C.ping (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method ping

  • i2c.I2C.read (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method read

  • i2c.I2C.read_ack (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method read_ack

  • i2c.I2C.read_from (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method read_from

  • i2c.I2C.read_n (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method read_n

  • i2c.I2C.read_nack (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method read_nack

  • i2c.I2C.readfrom_mem (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method readfrom_mem

  • i2c.I2C.ready (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method ready

  • i2c.I2C.start (tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method start

  • … 111 more

Compatibility Universality#

34 compatibility-layer file/line violations are currently tracked.

  • circuitpython:pymcu_circuitpython/adafruit_minimqtt/adafruit_minimqtt.py:2 (tracked:#37): pymcu.chips import

  • circuitpython:pymcu_circuitpython/adafruit_minimqtt/adafruit_minimqtt.py:20 (tracked:#37): CHIP conditional

  • circuitpython:pymcu_circuitpython/busio.py:45 (tracked:#37): pymcu.chips import

  • circuitpython:pymcu_circuitpython/busio.py:49 (tracked:#37): CHIP conditional

  • circuitpython:pymcu_circuitpython/microcontroller.py:13 (tracked:#37): pymcu.chips import

  • circuitpython:pymcu_circuitpython/microcontroller.py:16 (tracked:#37): CHIP conditional

  • circuitpython:pymcu_circuitpython/microcontroller.py:111 (tracked:#37): chip register

  • circuitpython:pymcu_circuitpython/microcontroller.py:112 (tracked:#37): chip register

  • circuitpython:pymcu_circuitpython/microcontroller.py:114 (tracked:#37): chip register

  • circuitpython:pymcu_circuitpython/microcontroller.py:116 (tracked:#37): chip register

  • circuitpython:pymcu_circuitpython/microcontroller.py:118 (tracked:#37): chip register

  • circuitpython:pymcu_circuitpython/pwmio.py:16 (tracked:#37): pymcu.chips import

  • circuitpython:pymcu_circuitpython/pwmio.py:19 (tracked:#37): CHIP conditional

  • circuitpython:pymcu_circuitpython/socketpool.py:2 (tracked:#37): pymcu.chips import

  • circuitpython:pymcu_circuitpython/socketpool.py:20 (tracked:#37): CHIP conditional

  • micropython:pymcu_micropython/machine.py:23 (tracked:#10): pymcu.chips import

  • micropython:pymcu_micropython/machine.py:28 (tracked:#10): CHIP conditional

  • micropython:pymcu_micropython/machine.py:109 (tracked:#10): CHIP conditional

  • micropython:pymcu_micropython/machine.py:112 (tracked:#10): CHIP conditional

  • micropython:pymcu_micropython/machine.py:121 (tracked:#10): CHIP conditional

  • micropython:pymcu_micropython/machine.py:123 (tracked:#10): CHIP conditional

  • micropython:pymcu_micropython/machine.py:304 (tracked:#10): port name

  • micropython:pymcu_micropython/machine.py:306 (tracked:#10): port name

  • micropython:pymcu_micropython/machine.py:308 (tracked:#10): port name

  • micropython:pymcu_micropython/machine.py:310 (tracked:#10): port name

  • micropython:pymcu_micropython/machine.py:312 (tracked:#10): port name

  • micropython:pymcu_micropython/machine.py:314 (tracked:#10): port name

  • micropython:pymcu_micropython/machine.py:339 (tracked:#10): chip register

  • micropython:pymcu_micropython/machine.py:365 (tracked:#10): chip register

  • micropython:pymcu_micropython/machine.py:366 (tracked:#10): chip register

  • micropython:pymcu_micropython/machine.py:367 (tracked:#10): chip register

  • micropython:pymcu_micropython/machine.py:368 (tracked:#10): chip register

  • micropython:pymcu_micropython/machine.py:370 (tracked:#10): chip register

  • micropython:pymcu_micropython/machine.py:371 (tracked:#10): chip register