## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# HAL Design Patterns Checklist

- Naming (crate aligns with Rust naming conventions)
  - The crate is named appropriately (C-CRATE-NAME)
- Interoperability (crate interacts nicely with other library functionality)
  - Wrapper types provide a destructor method (C-FREE)
  - HALs reexport their register access crate (C-REEXPORT-PAC)
  - Types implement the `embedded-hal` traits (C-HAL-TRAITS)
- Predictability (crate enables legible code that acts how it looks)
  - Constructors are used instead of extension traits (C-CTOR)
- GPIO Interfaces (GPIO Interfaces follow a common pattern)
  - Pin types are zero-sized by default (C-ZST-PIN)
  - Pin types provide methods to erase pin and port (C-ERASED-PIN)
  - Pin state should be encoded as type parameters (C-PIN-STATE)