| #![no_std] | |
| use libtock::ble_composer; | |
| use libtock::ble_composer::BlePayload; | |
| use libtock::result::TockResult; | |
| use libtock::simple_ble::BleAdvertisingDriver; | |
| use libtock::timer::Duration; | |
| use serde::Serialize; | |
| libtock_core::stack_size! {0x800} | |
| #[derive(Serialize)] | |
| struct LedCommand { | |
| pub nr: u8, | |
| pub st: bool, | |
| } | |
| #[libtock::main] | |
| async fn main() -> TockResult<()> { | |
| let mut drivers = libtock::retrieve_drivers()?; | |
| let leds_driver = drivers.leds.init_driver()?; | |
| let mut timer_driver = drivers.timer.create_timer_driver(); | |
| let timer_driver = timer_driver.activate()?; | |
| let mut ble_advertising_driver = drivers.ble_advertising.create_driver(); | |
| let led = leds_driver.leds().next().unwrap(); | |
| let uuid: [u8; 2] = [0x00, 0x18]; | |
| let payload = corepack::to_bytes(LedCommand { nr: 2, st: true }).unwrap(); | |
| let mut buffer = BleAdvertisingDriver::create_advertising_buffer(); | |
| let mut gap_payload = BlePayload::default(); | |
| gap_payload | |
| .add_flag(ble_composer::flags::LE_GENERAL_DISCOVERABLE) | |
| .unwrap(); | |
| gap_payload | |
| .add(ble_composer::gap_types::UUID, &uuid) | |
| .unwrap(); | |
| gap_payload | |
| .add(ble_composer::gap_types::COMPLETE_LOCAL_NAME, b"Tock!") | |
| .unwrap(); | |
| gap_payload.add_service_payload([91, 79], &payload).unwrap(); | |
| let _handle = ble_advertising_driver.initialize(100, &gap_payload, &mut buffer); | |
| loop { | |
| led.on()?; | |
| timer_driver.sleep(Duration::from_ms(500)).await?; | |
| led.off()?; | |
| timer_driver.sleep(Duration::from_ms(500)).await?; | |
| } | |
| } |