#![no_std]
use xpanse_api::{
bus::allocator::BusAllocator,
driver::{Driver, DriverError, DriverMeta},
gpio_bank::{BankPins, GpioBank},
interfaces::buttons::{A, pin_button},
interfaces::leds::{Generic, pin_led},
metadata::{ModuleDetectResistor, ModuleID, ModuleSlot},
registry::Registry,
};
pub struct KeebDriver;
impl DriverMeta for KeebDriver {
const ID: ModuleID = ModuleID {
md0: ModuleDetectResistor::R1K6,
md1: ModuleDetectResistor::R1K5,
};
}
impl<G: BankPins> Driver<G> for KeebDriver {
async fn create(
gpio_bank: GpioBank<G>,
slot: ModuleSlot,
registry: &mut Registry,
bus_allocator: &mut BusAllocator,
) -> Result<(), DriverError> {
registry.register(
slot,
KeebDriver::ID,
pin_button::<A>(gpio_bank.gpio0.into()),
);
registry.register(
slot,
KeebDriver::ID,
pin_led::<Generic>(gpio_bank.gpio1.into(), false),
);
registry.register(
slot,
KeebDriver::ID,
pin_led::<Generic>(gpio_bank.gpio2.into(), false),
);
registry.register(
slot,
KeebDriver::ID,
pin_led::<Generic>(gpio_bank.gpio3.into(), false),
);
let _ = bus_allocator;
Ok(())
}
}