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_millivoltsadc.AnalogPin.busy(tracked:#387): pic18:pymcu.hal.pic18.adc.AnalogPin adds method busyadc.AnalogPin.measure_supply_millivolts(tracked:#387): pic18:pymcu.hal.pic18.adc.AnalogPin is missing method measure_supply_millivoltsadc.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 irqadc.AnalogPin.measure_supply_millivolts(tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin is missing method measure_supply_millivoltsadc.AnalogPin.read_result(tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin is missing method read_resultadc.AnalogPin.start(tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin is missing method startadc.AnalogPin.start_conversion(tracked:#387): rp2040:pymcu.hal.rp2040.adc.AnalogPin is missing method start_conversionadc.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 irqadc.AnalogPin.measure_supply_millivolts(tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin is missing method measure_supply_millivoltsadc.AnalogPin.read_result(tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin is missing method read_resultadc.AnalogPin.start(tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin is missing method startadc.AnalogPin.start_conversion(tracked:#387): rp2350:pymcu.hal.rp2350.adc.AnalogPin is missing method start_conversiongpio.Pin(tracked:#387): pic14:pymcu.hal.pic14.gpio.Pin constants differ: missing IN_PULLUP, IRQ_CHANGEgpio.Pin(tracked:#387): pic18:pymcu.hal.pic14.gpio.Pin constants differ: missing IN_PULLUP, IRQ_CHANGEgpio.Pin(tracked:#387): pic12:pymcu.hal.pic14.gpio.Pin constants differ: missing IN_PULLUP, IRQ_CHANGEgpio.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_RISINGgpio.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 drivegpio.Pin.init(tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin is missing method initgpio.Pin.irq(tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin is missing method irqgpio.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))) @inlinegpio.Pin.pull(tracked:#387): rp2040:pymcu.hal.rp2040.gpio.Pin.pull signature/decorators (self, p) @inline differ from (self, pull_mode) @inlinegpio.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_RISINGgpio.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 drivegpio.Pin.init(tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin is missing method initgpio.Pin.irq(tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin is missing method irqgpio.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))) @inlinegpio.Pin.pull(tracked:#387): rp2350:pymcu.hal.rp2350.gpio.Pin.pull signature/decorators (self, p) @inline differ from (self, pull_mode) @inlinegpio.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_RISINGgpio.Pin.drive(tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin is missing method drivegpio.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))) @inlinegpio.Pin.irq(tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin is missing method irqgpio.Pin.pull(tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin is missing method pullgpio.Pin.pulse_in(tracked:#387): riscv:pymcu.hal.riscv.gpio.Pin is missing method pulse_ini2c.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_RECEIVEDi2c.I2C.__enter__(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method enteri2c.I2C.__exit__(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method exiti2c.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 acknowledgei2c.I2C.end(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method endi2c.I2C.frequency(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method frequencyi2c.I2C.irq(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method irqi2c.I2C.nack(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method nacki2c.I2C.ping(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method pingi2c.I2C.read(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method readi2c.I2C.read_ack(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method read_acki2c.I2C.read_from(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method read_fromi2c.I2C.read_n(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method read_ni2c.I2C.read_nack(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method read_nacki2c.I2C.readfrom_mem(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method readfrom_memi2c.I2C.ready(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method readyi2c.I2C.start(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method starti2c.I2C.status(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method statusi2c.I2C.stop(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method stopi2c.I2C.write(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method writei2c.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) @inlinei2c.I2C.writebyte(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method writebytei2c.I2C.writeto_mem(tracked:#387): rp2040:pymcu.hal.rp2040.i2c.I2C is missing method writeto_memi2c.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_RECEIVEDi2c.I2C.__enter__(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method enteri2c.I2C.__exit__(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method exiti2c.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 acknowledgei2c.I2C.end(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method endi2c.I2C.frequency(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method frequencyi2c.I2C.irq(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method irqi2c.I2C.nack(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method nacki2c.I2C.ping(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method pingi2c.I2C.read(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method readi2c.I2C.read_ack(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method read_acki2c.I2C.read_from(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method read_fromi2c.I2C.read_n(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method read_ni2c.I2C.read_nack(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method read_nacki2c.I2C.readfrom_mem(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method readfrom_memi2c.I2C.ready(tracked:#387): rp2350:pymcu.hal.rp2350.i2c.I2C is missing method readyi2c.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 importcircuitpython:pymcu_circuitpython/adafruit_minimqtt/adafruit_minimqtt.py:20(tracked:#37): CHIP conditionalcircuitpython:pymcu_circuitpython/busio.py:45(tracked:#37): pymcu.chips importcircuitpython:pymcu_circuitpython/busio.py:49(tracked:#37): CHIP conditionalcircuitpython:pymcu_circuitpython/microcontroller.py:13(tracked:#37): pymcu.chips importcircuitpython:pymcu_circuitpython/microcontroller.py:16(tracked:#37): CHIP conditionalcircuitpython:pymcu_circuitpython/microcontroller.py:111(tracked:#37): chip registercircuitpython:pymcu_circuitpython/microcontroller.py:112(tracked:#37): chip registercircuitpython:pymcu_circuitpython/microcontroller.py:114(tracked:#37): chip registercircuitpython:pymcu_circuitpython/microcontroller.py:116(tracked:#37): chip registercircuitpython:pymcu_circuitpython/microcontroller.py:118(tracked:#37): chip registercircuitpython:pymcu_circuitpython/pwmio.py:16(tracked:#37): pymcu.chips importcircuitpython:pymcu_circuitpython/pwmio.py:19(tracked:#37): CHIP conditionalcircuitpython:pymcu_circuitpython/socketpool.py:2(tracked:#37): pymcu.chips importcircuitpython:pymcu_circuitpython/socketpool.py:20(tracked:#37): CHIP conditionalmicropython:pymcu_micropython/machine.py:23(tracked:#10): pymcu.chips importmicropython:pymcu_micropython/machine.py:28(tracked:#10): CHIP conditionalmicropython:pymcu_micropython/machine.py:109(tracked:#10): CHIP conditionalmicropython:pymcu_micropython/machine.py:112(tracked:#10): CHIP conditionalmicropython:pymcu_micropython/machine.py:121(tracked:#10): CHIP conditionalmicropython:pymcu_micropython/machine.py:123(tracked:#10): CHIP conditionalmicropython:pymcu_micropython/machine.py:304(tracked:#10): port namemicropython:pymcu_micropython/machine.py:306(tracked:#10): port namemicropython:pymcu_micropython/machine.py:308(tracked:#10): port namemicropython:pymcu_micropython/machine.py:310(tracked:#10): port namemicropython:pymcu_micropython/machine.py:312(tracked:#10): port namemicropython:pymcu_micropython/machine.py:314(tracked:#10): port namemicropython:pymcu_micropython/machine.py:339(tracked:#10): chip registermicropython:pymcu_micropython/machine.py:365(tracked:#10): chip registermicropython:pymcu_micropython/machine.py:366(tracked:#10): chip registermicropython:pymcu_micropython/machine.py:367(tracked:#10): chip registermicropython:pymcu_micropython/machine.py:368(tracked:#10): chip registermicropython:pymcu_micropython/machine.py:370(tracked:#10): chip registermicropython:pymcu_micropython/machine.py:371(tracked:#10): chip register