| #![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 libtock::Hardware; |
| use serde::Serialize; |
| |
| #[derive(Serialize)] |
| struct LedCommand { |
| pub nr: u8, |
| pub st: bool, |
| } |
| |
| #[libtock::main] |
| async fn main() -> TockResult<()> { |
| let Hardware { |
| mut led_driver, |
| timer_context, |
| .. |
| } = libtock::retrieve_hardware()?; |
| |
| let mut led = led_driver.get(0).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 = BleAdvertisingDriver::initialize(100, &gap_payload, &mut buffer); |
| |
| let mut driver = timer_context.create_timer_driver(); |
| let timer_driver = driver.activate()?; |
| |
| loop { |
| led.on()?; |
| timer_driver.sleep(Duration::from_ms(500)).await?; |
| led.off()?; |
| timer_driver.sleep(Duration::from_ms(500)).await?; |
| } |
| } |