-
Notifications
You must be signed in to change notification settings - Fork 904
/
Copy pathblink_any.c
76 lines (69 loc) · 2.18 KB
/
blink_any.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "pico/stdlib.h"
#include "pico/binary_info.h"
#ifdef CYW43_WL_GPIO_LED_PIN
#include "pico/cyw43_arch.h"
#endif
// Set an LED_TYPE variable - 0 is default, 1 is connected to WIFI chip
// Note that LED_TYPE == 1 is only supported when initially compiled for
// a board with PICO_CYW43_SUPPORTED (eg pico_w), else the required
// libraries won't be present
bi_decl(bi_program_feature_group(0x1111, 0, "LED Configuration"));
#if defined(PICO_DEFAULT_LED_PIN)
// the tag and id are not important as picotool filters based on the
// variable name, so just set them to 0
bi_decl(bi_ptr_int32(0x1111, 0, LED_TYPE, 0));
bi_decl(bi_ptr_int32(0x1111, 0, LED_PIN, PICO_DEFAULT_LED_PIN));
#elif defined(CYW43_WL_GPIO_LED_PIN)
bi_decl(bi_ptr_int32(0x1111, 0, LED_TYPE, 1));
bi_decl(bi_ptr_int32(0x1111, 0, LED_PIN, CYW43_WL_GPIO_LED_PIN));
#else
bi_decl(bi_ptr_int32(0x1111, 0, LED_TYPE, 0));
bi_decl(bi_ptr_int32(0x1111, 0, LED_PIN, 25));
#endif
#ifndef LED_DELAY_MS
#define LED_DELAY_MS 250
#endif
// Perform initialisation
int pico_led_init(void) {
if (LED_TYPE == 0) {
// A device like Pico that uses a GPIO for the LED so we can
// use normal GPIO functionality to turn the led on and off
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
return PICO_OK;
#ifdef CYW43_WL_GPIO_LED_PIN
} else if (LED_TYPE == 1) {
// For Pico W devices we need to initialise the driver etc
return cyw43_arch_init();
#endif
} else {
return PICO_ERROR_INVALID_DATA;
}
}
// Turn the led on or off
void pico_set_led(bool led_on) {
if (LED_TYPE == 0) {
// Just set the GPIO on or off
gpio_put(LED_PIN, led_on);
#ifdef CYW43_WL_GPIO_LED_PIN
} else if (LED_TYPE == 1) {
// Ask the wifi "driver" to set the GPIO on or off
cyw43_arch_gpio_put(LED_PIN, led_on);
#endif
}
}
int main() {
int rc = pico_led_init();
hard_assert(rc == PICO_OK);
while (true) {
pico_set_led(true);
sleep_ms(LED_DELAY_MS);
pico_set_led(false);
sleep_ms(LED_DELAY_MS);
}
}