trait GpioChip {
void set_direction(unsigned long base, int pin, int direction) const;
void write(unsigned long base, int pin, int value) const;
int read(unsigned long base, int pin) const;
void toggle(unsigned long base, int pin) const;
void set_pull(unsigned long base, int pin, int pull) const;
}What a GPIO block type provides (GpioGeneric, Stm32F4Gpio below, or your own): GpioPin<C> requires it, so a type missing one is rejected where the pin type is named.