arduino / arduino/ArduinoCore-API
Breakage caused by PinStatus and PinMode types
- 主要言語
- C++
- スター
- 306
- フォーク
- 150
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
This project changes `LOW`, `HIGH`, `INPUT`, `INPUT_PULLUP`, and `OUTPUT` from macros to enums:
https://github.com/arduino/ArduinoCore-API/blob/e1eb8de126786b7701b211332dda3f09aa400f35/api/Common.h#L10-L23
I'm concerned that this will cause breakage of a significant amount of existing code.
An example is the popular [Keypad library](https://playground.arduino.cc/code/keypad). Compilation of both the [original](https://playground.arduino.cc/uploads/Code/keypad.zip) library and the [version in Library Manager](https://github.com/Chris--A/Keypad) fails once this change is made.
```
In file included from E:\electronics\arduino\libraries\Keypad-master\examples\HelloKeypad\HelloKeypad.ino:10:0:
E:\electronics\arduino\libraries\Keypad-master\src/Keypad.h: In member function 'virtual void Keypad::pin_write(byte, boolean)':
E:\electronics\arduino\libraries\Keypad-master\src/Keypad.h:81:81: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
virtual void pin_write(byte pinNum, boolean level) { digitalWrite(pinNum, level); }
```
This commonly used code will also now fail:
```c++
digitalWrite(13, !digitalRead(13)); // toggle pin 13
```
```
toggle:2:36: error: cannot convert 'bool' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
digitalWrite(13, !digitalRead(13)); // toggle pin 13
```
I understand that the root cause of these errors is bad code and that any code which followed best practices will have no problems with this change. However, I fear there is a lot of bad code in widespread use that currently works fine. In the case of the Keypad library, it is unlikely it can even be fixed since Chris--A has gone AWOL. I'm sure there are other such abandoned projects.
I do like the spirit of this change (though lumping `CHANGE`, `FALLING`, and `RISING` into `PinStatus` is questionable). I'm open to being convinced that it's worth the breakage and, if so, I'm willing to help ease the transition by providing user support and submitting PRs to fix broken code. I just think this warrants some consideration before ArduinoCore-API goes into more widespread use.
### Additional context
Some previous discussion on the topic:
- http://forum.arduino.cc/index.php?topic=455579 (from [here](http://forum.arduino.cc/index.php?topic=455579.msg4001965#msg4001965) onward)
- https://forum.arduino.cc/index.php?topic=584322
- http://forum.arduino.cc/index.php?topic=602250
- https://forum.arduino.cc/index.php?topic=621429
- https://forum.arduino.cc/index.php?topic=627883.msg4319254#msg4319254
- https://forum.arduino.cc/index.php?topic=659624
- https://github.com/arduino/ArduinoCore-megaavr/issues/68
#### Related
- https://github.com/arduino/ArduinoCore-mbed/issues/1107
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
api/Common.h から始め、Keypad の例と digitalWrite(13, !digitalRead(13)) のケースを使って、報告されたコンパイル失敗を再現してください。互換性に関する決定を理解するため、リンクされた議論と関連する issue を確認してください。この issue は、プロジェクトが決定に到達してそれを文書化し、影響を受ける互換性の動作が検証された場合にのみ完了します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- cpp
- 領域
- api, embedded-iot
- issue の種類
- バグ
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100