-
Notifications
You must be signed in to change notification settings - Fork 0
/
lrf_power_control.c
62 lines (47 loc) · 1.23 KB
/
lrf_power_control.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
/***
* Noptel LRF rangefinder sampler for the Flipper Zero
* Version: 2.0
*
* Power control
***/
/*** Includes ***/
#include <furi_hal.h>
#include <furi_hal_gpio.h>
#include "common.h"
/*** Routines ***/
/** Turn the LRF on or off
Control the LRF using the C1 pin **/
void power_lrf(bool on) {
#ifdef USE_5V_PIN
uint8_t otg_on_attempt = 0;
#endif
/* Should we turn the LRF on? */
if(on) {
/* Set pin C1 to output with push-pull resistors */
furi_hal_gpio_init_simple(&gpio_ext_pc1, GpioModeOutputPushPull);
/* Set the pin high so it outputs 3.3V */
furi_hal_gpio_write(&gpio_ext_pc1, true);
#ifdef USE_5V_PIN
/* Set the +5V pin high */
while(otg_on_attempt < 5) {
if(furi_hal_power_is_otg_enabled())
break;
furi_hal_power_enable_otg();
furi_delay_ms(10);
otg_on_attempt++;
}
#endif
/* Wait a bit to let the LRF boot up and be ready to accept commands */
furi_delay_ms(300);
}
else {
#ifdef USE_5V_PIN
/* Set the +5V pin low */
furi_hal_power_disable_otg();
#endif
/* Set the C1 pin low */
furi_hal_gpio_write(&gpio_ext_pc1, false);
/* Reset the pin to its default state */
furi_hal_gpio_init_simple(&gpio_ext_pc1, GpioModeAnalog);
}
}