rpi-pico-blink-examples/c-with-rust/blink.c

65 lines
1.3 KiB
C

/**
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "pico/stdlib.h"
// https://rust-lang.github.io/unsafe-code-guidelines/layout/scalars.html
// bool is compatible
#define i8 int8_t
#define i16 int16_t
#define i32 int32_t
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
#define i64 int64_t
#define u64 uint64_t
#define isize intptr_t
#define usize uintptr_t
// used from rust
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
uint led_pin() {
return PICO_DEFAULT_LED_PIN;
}
// without this: undefined reference to `gpio_set_dir'
void c_gpio_set_dir(uint gpio, bool out) {
return gpio_set_dir(gpio, out);
}
// without this: undefined reference to `gpio_put'
void c_gpio_put(uint gpio, bool value) {
return gpio_put(gpio, value);
}
// defined in rust
u32 add_half(u32 num);
int rs_main();
int c_main() {
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
int sleep = 250;
while (true) {
gpio_put(LED_PIN, 1);
sleep_ms(sleep);
gpio_put(LED_PIN, 0);
sleep_ms(sleep);
sleep = add_half(sleep);
if(sleep > 2000) {
reset_usb_boot(LED_PIN, 0);
}
}
}
// rename to main() to enable this one
int main_disabled() {
return rs_main();
//return c_main();
}