Skip to content

Commit 1b125b2

Browse files
committed
docs(changelog): add 0.1.0b1 section
Generated from git log v0.1.0a2..main, grouped by Conventional Commit type with cross-repo issue links resolved.
1 parent 7e24980 commit 1b125b2

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,96 @@
11
# Changelog — pymcu-circuitpython
22

3+
## 0.1.0b1 (Unreleased, prepared 2026-09-15)
4+
5+
Beta 1: this layer moves out of alpha alongside the frontend
6+
(`pymcu-compiler`/`pymcu-stdlib` 0.1.0b1) and the AVR backend
7+
(`pymcu-avr` 0.1.0b1), since AVR is the only chip family with real
8+
CircuitPython hardware to compare against. Coverage on RP2040/RP2350
9+
tracks the ARM backend, which stays alpha; `keypad.KeyMatrix` (#13)
10+
and the storage/os modules (#16) are out of beta 1 by decision.
11+
12+
### Added
13+
14+
- **boards**: adafruit_trinket, and pico as an alias of raspberry_pi_pico
15+
- **microcontroller**: disable_interrupts and enable_interrupts
16+
- a micropython module, providing const and nothing else
17+
- a sys module, providing implementation.name and nothing else
18+
- **boards**: board.I2C(), board.SPI() and board.UART() on the AVR Arduino boards ([#7](https://github.com/PyMCU/pymcu-circuitpython/issues/7))
19+
- **pulseio**: PulseIn and PulseOut ([#9](https://github.com/PyMCU/pymcu-circuitpython/issues/9))
20+
- **servo**: adafruit_motor.servo, so an angle lands on its pulse width ([#8](https://github.com/PyMCU/pymcu-circuitpython/issues/8))
21+
- **bitbangio**: the same buses as busio, driven in software on any pins ([#10](https://github.com/PyMCU/pymcu-circuitpython/issues/10))
22+
- **rainbowio**: colorwheel(pos), the colour at a position on the wheel ([#15](https://github.com/PyMCU/pymcu-circuitpython/issues/15))
23+
- **countio**: Counter, the edges that arrived on a pin ([#11](https://github.com/PyMCU/pymcu-circuitpython/issues/11))
24+
- **keypad**: Keys and Event, which button changed and which way ([#13](https://github.com/PyMCU/pymcu-circuitpython/issues/13))
25+
- **boards**: board.I2C(), board.SPI() and board.UART() are back ([#7](https://github.com/PyMCU/pymcu-circuitpython/issues/7))
26+
- **rotaryio**: IncrementalEncoder, where a two-track knob has turned to ([#12](https://github.com/PyMCU/pymcu-circuitpython/issues/12))
27+
- **boards**: the bare 8-pin ATtinys answer to board.Dn
28+
- **neopixel_write**: the low-level one-wire write, as CircuitPython spells it
29+
- **analogio,countio,digitalio,keypad,pwmio,rotaryio**: __exit__ matches upstream's (self, *args) arity
30+
- **busio**: start/end and configure() become keyword-only, matching upstream
31+
- **bitbangio**: start/end/configure() become keyword-only; write()'s buffer is spelled buf, and configure()'s baudrate default matches upstream's 100000
32+
- **pulseio**: PulseIn.__bool__ answers len(pulses) > 0; __exit__ matches upstream's arity
33+
- **watchdog**: WatchDogTimer is exported as the type of microcontroller.watchdog
34+
35+
### Fixed
36+
37+
- **microcontroller**: cpu.frequency returns the clock instead of failing to compile
38+
- remove two MicroPython spellings and move WatchDogMode where upstream keeps it
39+
- **alarm**: the tail is written as the else it already logically is
40+
- **net**: refuse on a chip with no radio, and say that is the reason
41+
- **pwmio**: PWMOut.frequency reprograms the timer, and is refused without variable_frequency ([#5](https://github.com/PyMCU/pymcu-circuitpython/issues/5))
42+
- **pwmio**: deinit() releases the pin as an input ([PyMCU#296](https://github.com/PyMCU/PyMCU/issues/296))
43+
- **pwmio**: the constructor leaves the start to the HAL ([PyMCU#296](https://github.com/PyMCU/PyMCU/issues/296))
44+
- **pwmio**: duty_cycle goes to the HAL as the 16-bit value it is ([#30](https://github.com/PyMCU/pymcu-circuitpython/issues/30))
45+
- **digitalio**: deinit() releases the pin without pull, and switch_to_output sets the level first ([PyMCU#309](https://github.com/PyMCU/PyMCU/issues/309))
46+
- **analogio**: the value covers the whole range, the reference is the chip's, and AnalogOut is refused where there is no DAC ([#21](https://github.com/PyMCU/pymcu-circuitpython/issues/21))
47+
- **busio**: every parameter reaches the hardware or is refused, and a read has a deadline ([#22](https://github.com/PyMCU/pymcu-circuitpython/issues/22), [#23](https://github.com/PyMCU/pymcu-circuitpython/issues/23), [#24](https://github.com/PyMCU/pymcu-circuitpython/issues/24))
48+
- **pwmio**: frequency reports what the pin emits, and the first parameter is pin ([#18](https://github.com/PyMCU/pymcu-circuitpython/issues/18))
49+
- **time, supervisor, nvm, watchdog**: four values that were not the part's ([#26](https://github.com/PyMCU/pymcu-circuitpython/issues/26), [#25](https://github.com/PyMCU/pymcu-circuitpython/issues/25), [#16](https://github.com/PyMCU/pymcu-circuitpython/issues/16), [#19](https://github.com/PyMCU/pymcu-circuitpython/issues/19))
50+
- **microcontroller**: uid refused rather than eight zeros, cpus has a length ([#27](https://github.com/PyMCU/pymcu-circuitpython/issues/27))
51+
- **alarm**: wait on several alarms, and say which one fired ([#20](https://github.com/PyMCU/pymcu-circuitpython/issues/20))
52+
- **time**: sleep() folds to one calibrated delay for a literal duration ([#26](https://github.com/PyMCU/pymcu-circuitpython/issues/26))
53+
- **microcontroller**: len(nvm) is a literal again, because a slice of nvm needs one ([#16](https://github.com/PyMCU/pymcu-circuitpython/issues/16))
54+
- **digitalio**: switch_to_output's value default is False, as upstream spells it
55+
- **micropython**: const()'s parameter is named expr, as upstream spells it
56+
- **rainbowio**: colorwheel()'s parameter is named n, as upstream spells it
57+
- **watchdog**: move WatchDogTimer into watchdog.py, breaking the import cycle
58+
59+
### Changed
60+
61+
- **time**: sleep() written with plain locals now that a constant survives one ([PyMCU#327](https://github.com/PyMCU/PyMCU/issues/327))
62+
63+
### Documentation
64+
65+
- the README describes the modules and the spellings that exist ([#29](https://github.com/PyMCU/pymcu-circuitpython/issues/29))
66+
- neopixel_write joins the supported module table
67+
- **corpus**: triage the refused programs
68+
- **readme**: document the API surface this class of AVR chip will not provide
69+
- **parity**: regenerate the parity report
70+
71+
### Tests
72+
73+
- the conftest stubs __CHIP__ as an object, pymcu.hal.irq, __FREQ__ and the layer's own module names ([#6](https://github.com/PyMCU/pymcu-circuitpython/issues/6))
74+
- the conftest binds __TIMEBASE__ like __FREQ__ ([PyMCU#295](https://github.com/PyMCU/PyMCU/issues/295))
75+
- the analogio mocks follow the HAL's ADC and DAC, and the tests measure what changed ([#21](https://github.com/PyMCU/pymcu-circuitpython/issues/21))
76+
- the busio mocks follow the HAL, and the tests measure what reaches the hardware ([#22](https://github.com/PyMCU/pymcu-circuitpython/issues/22), [#23](https://github.com/PyMCU/pymcu-circuitpython/issues/23), [#24](https://github.com/PyMCU/pymcu-circuitpython/issues/24), [#7](https://github.com/PyMCU/pymcu-circuitpython/issues/7))
77+
- pulse mocks that behave like the HAL, and refuse like it ([#9](https://github.com/PyMCU/pymcu-circuitpython/issues/9))
78+
- the PWM mock reports the frequency the pin emits ([#18](https://github.com/PyMCU/pymcu-circuitpython/issues/18), [#8](https://github.com/PyMCU/pymcu-circuitpython/issues/8))
79+
- soft I2C and SPI mocks that log what they clocked out ([#10](https://github.com/PyMCU/pymcu-circuitpython/issues/10))
80+
- an edge-counter mock that refuses a single edge where the pin cannot tell ([#11](https://github.com/PyMCU/pymcu-circuitpython/issues/11))
81+
- the four values, and an EEPROM mock that has a size ([#26](https://github.com/PyMCU/pymcu-circuitpython/issues/26), [#25](https://github.com/PyMCU/pymcu-circuitpython/issues/25), [#16](https://github.com/PyMCU/pymcu-circuitpython/issues/16), [#19](https://github.com/PyMCU/pymcu-circuitpython/issues/19))
82+
- the mock clock advances, because alarm waits on it ([#20](https://github.com/PyMCU/pymcu-circuitpython/issues/20))
83+
- add a corpus of user-style programs with expected build outcomes and size gates
84+
- add CircuitPython API parity suite
85+
- **parity**: resolve symbolic stub defaults and accept __exit__(self, *args)
86+
- **parity**: allowlist real gaps tracked as GitHub issues
87+
- **corpus**: create the template's src directory, which git does not keep empty
88+
89+
### Reverted
90+
91+
- board.I2C(), board.SPI() and board.UART(), which miscompile busio ([#7](https://github.com/PyMCU/pymcu-circuitpython/issues/7))
92+
93+
394
## 0.1.0a2 — 2026-08-18
495

596
Everything the PyPI 0.1.0a1 layer (June) predates. With the 0.1.0a10

0 commit comments

Comments
 (0)