Skip to content

Commit 8b74872

Browse files
committed
firmware: move power logic to power.h|c
1 parent 666f04f commit 8b74872

7 files changed

Lines changed: 179 additions & 117 deletions

File tree

firmware/blinky/blinky.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "hackrf_core.h"
2323
#include "platform_detect.h"
2424
#include "delay.h"
25+
#include "power.h"
2526

2627
int main(void)
2728
{

firmware/common/hackrf_core.c

Lines changed: 1 addition & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "platform_detect.h"
3535
#include "platform_gpio.h"
3636
#include "platform_scu.h"
37+
#include "power.h"
3738
#include "spi_bus.h"
3839
#include "w25q80bv_target.h"
3940
#if defined(PRALINE)
@@ -448,108 +449,6 @@ void pin_setup(void)
448449
sgpio_configure_pin_functions(&sgpio_config);
449450
}
450451

451-
#ifdef PRALINE
452-
void enable_1v2_power(void)
453-
{
454-
gpio_set(platform_gpio()->gpio_1v2_enable);
455-
}
456-
457-
void disable_1v2_power(void)
458-
{
459-
gpio_clear(platform_gpio()->gpio_1v2_enable);
460-
}
461-
462-
void enable_3v3aux_power(void)
463-
{
464-
gpio_clear(platform_gpio()->gpio_3v3aux_enable_n);
465-
}
466-
467-
void disable_3v3aux_power(void)
468-
{
469-
gpio_set(platform_gpio()->gpio_3v3aux_enable_n);
470-
}
471-
#else
472-
void enable_1v8_power(void)
473-
{
474-
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
475-
#ifdef HACKRF_ONE
476-
gpio_set(platform_gpio()->h1r9_1v8_enable);
477-
#endif
478-
} else {
479-
gpio_set(platform_gpio()->gpio_1v8_enable);
480-
}
481-
}
482-
483-
void disable_1v8_power(void)
484-
{
485-
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
486-
#ifdef HACKRF_ONE
487-
gpio_clear(platform_gpio()->h1r9_1v8_enable);
488-
#endif
489-
} else {
490-
gpio_clear(platform_gpio()->gpio_1v8_enable);
491-
}
492-
}
493-
#endif
494-
495-
#ifdef HACKRF_ONE
496-
void enable_rf_power(void)
497-
{
498-
const platform_gpio_t* gpio = platform_gpio();
499-
uint32_t i;
500-
501-
/* many short pulses to avoid one big voltage glitch */
502-
for (i = 0; i < 1000; i++) {
503-
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
504-
gpio_set(gpio->h1r9_vaa_disable);
505-
gpio_clear(gpio->h1r9_vaa_disable);
506-
} else {
507-
gpio_set(gpio->vaa_disable);
508-
gpio_clear(gpio->vaa_disable);
509-
}
510-
}
511-
}
512-
513-
void disable_rf_power(void)
514-
{
515-
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
516-
gpio_set(platform_gpio()->h1r9_vaa_disable);
517-
} else {
518-
gpio_set(platform_gpio()->vaa_disable);
519-
}
520-
}
521-
#endif
522-
523-
#ifdef PRALINE
524-
void enable_rf_power(void)
525-
{
526-
gpio_clear(platform_gpio()->vaa_disable);
527-
528-
/* Let the voltage stabilize */
529-
delay(1000000);
530-
}
531-
532-
void disable_rf_power(void)
533-
{
534-
gpio_set(platform_gpio()->vaa_disable);
535-
}
536-
#endif
537-
538-
#ifdef RAD1O
539-
void enable_rf_power(void)
540-
{
541-
gpio_set(platform_gpio()->vaa_enable);
542-
543-
/* Let the voltage stabilize */
544-
delay(1000000);
545-
}
546-
547-
void disable_rf_power(void)
548-
{
549-
gpio_clear(platform_gpio()->vaa_enable);
550-
}
551-
#endif
552-
553452
#ifdef PRALINE
554453
void led_on(const led_t led)
555454
{

firmware/common/hackrf_core.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,21 +74,6 @@ void ssp1_set_mode_ice40(void);
7474
void pin_shutdown(void);
7575
void pin_setup(void);
7676

77-
#ifdef PRALINE
78-
void enable_1v2_power(void);
79-
void disable_1v2_power(void);
80-
void enable_3v3aux_power(void);
81-
void disable_3v3aux_power(void);
82-
#else
83-
void enable_1v8_power(void);
84-
void disable_1v8_power(void);
85-
#endif
86-
87-
#if (defined HACKRF_ONE || defined RAD1O || defined PRALINE)
88-
void enable_rf_power(void);
89-
void disable_rf_power(void);
90-
#endif
91-
9277
typedef enum {
9378
LED1 = 0,
9479
LED2 = 1,

firmware/common/power.c

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
/*
2+
* Copyright 2026 Great Scott Gadgets <info@greatscottgadgets.com>
3+
*
4+
* This file is part of HackRF.
5+
*
6+
* This program is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation; either version 2, or (at your option)
9+
* any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program; see the file COPYING. If not, write to
18+
* the Free Software Foundation, Inc., 51 Franklin Street,
19+
* Boston, MA 02110-1301, USA.
20+
*/
21+
22+
#include "power.h"
23+
24+
#if defined(HACKRF_ONE)
25+
#include <stdint.h>
26+
#endif
27+
#if defined(HACKRF_ONE) || defined(RAD1O) || defined(JAWBREAKER)
28+
#include "platform_detect.h"
29+
#endif
30+
#if defined(PRALINE) || defined(RAD1O)
31+
#include "delay.h"
32+
#endif
33+
34+
#include "gpio.h"
35+
#include "platform_gpio.h"
36+
37+
#if defined(PRALINE)
38+
void enable_1v2_power(void)
39+
{
40+
gpio_set(platform_gpio()->gpio_1v2_enable);
41+
}
42+
43+
void disable_1v2_power(void)
44+
{
45+
gpio_clear(platform_gpio()->gpio_1v2_enable);
46+
}
47+
48+
void enable_3v3aux_power(void)
49+
{
50+
gpio_clear(platform_gpio()->gpio_3v3aux_enable_n);
51+
}
52+
53+
void disable_3v3aux_power(void)
54+
{
55+
gpio_set(platform_gpio()->gpio_3v3aux_enable_n);
56+
}
57+
58+
#else
59+
void enable_1v8_power(void)
60+
{
61+
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
62+
#ifdef HACKRF_ONE
63+
gpio_set(platform_gpio()->h1r9_1v8_enable);
64+
#endif
65+
} else {
66+
gpio_set(platform_gpio()->gpio_1v8_enable);
67+
}
68+
}
69+
70+
void disable_1v8_power(void)
71+
{
72+
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
73+
#ifdef HACKRF_ONE
74+
gpio_clear(platform_gpio()->h1r9_1v8_enable);
75+
#endif
76+
} else {
77+
gpio_clear(platform_gpio()->gpio_1v8_enable);
78+
}
79+
}
80+
#endif
81+
82+
#if defined(HACKRF_ONE)
83+
void enable_rf_power(void)
84+
{
85+
const platform_gpio_t* gpio = platform_gpio();
86+
uint32_t i;
87+
88+
/* many short pulses to avoid one big voltage glitch */
89+
for (i = 0; i < 1000; i++) {
90+
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
91+
gpio_set(gpio->h1r9_vaa_disable);
92+
gpio_clear(gpio->h1r9_vaa_disable);
93+
} else {
94+
gpio_set(gpio->vaa_disable);
95+
gpio_clear(gpio->vaa_disable);
96+
}
97+
}
98+
}
99+
100+
void disable_rf_power(void)
101+
{
102+
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
103+
gpio_set(platform_gpio()->h1r9_vaa_disable);
104+
} else {
105+
gpio_set(platform_gpio()->vaa_disable);
106+
}
107+
}
108+
109+
#elif defined(PRALINE)
110+
void enable_rf_power(void)
111+
{
112+
gpio_clear(platform_gpio()->vaa_disable);
113+
114+
/* Let the voltage stabilize */
115+
delay(1000000);
116+
}
117+
118+
void disable_rf_power(void)
119+
{
120+
gpio_set(platform_gpio()->vaa_disable);
121+
}
122+
123+
#elif defined(RAD1O)
124+
void enable_rf_power(void)
125+
{
126+
gpio_set(platform_gpio()->vaa_enable);
127+
128+
/* Let the voltage stabilize */
129+
delay(1000000);
130+
}
131+
132+
void disable_rf_power(void)
133+
{
134+
gpio_clear(platform_gpio()->vaa_enable);
135+
}
136+
#endif

firmware/common/power.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2026 Great Scott Gadgets <info@greatscottgadgets.com>
3+
*
4+
* This file is part of HackRF.
5+
*
6+
* This program is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation; either version 2, or (at your option)
9+
* any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program; see the file COPYING. If not, write to
18+
* the Free Software Foundation, Inc., 51 Franklin Street,
19+
* Boston, MA 02110-1301, USA.
20+
*/
21+
22+
#pragma once
23+
24+
#if defined(PRALINE)
25+
void enable_1v2_power(void);
26+
void disable_1v2_power(void);
27+
void enable_3v3aux_power(void);
28+
void disable_3v3aux_power(void);
29+
#else
30+
void enable_1v8_power(void);
31+
void disable_1v8_power(void);
32+
#endif
33+
34+
#if defined(PRALINE) || defined(HACKRF_ONE) || defined(RAD1O)
35+
void enable_rf_power(void);
36+
void disable_rf_power(void);
37+
#endif

firmware/hackrf-common.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ endmacro()
168168
macro(DeclareTargets)
169169
SET(SRC_M4
170170
${SRC_M4}
171+
${PATH_HACKRF_FIRMWARE_COMMON}/power.c
171172
${PATH_HACKRF_FIRMWARE_COMMON}/cpu_clock.c
172173
${PATH_HACKRF_FIRMWARE_COMMON}/delay.c
173174
${PATH_HACKRF_FIRMWARE_COMMON}/hackrf_core.c

firmware/hackrf_usb/hackrf_usb.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@
3030
#include <libopencm3/cm3/nvic.h>
3131

3232
#include <clkin.h>
33+
#include <clock_gen.h>
34+
#include <cpu_clock.h>
3335
#include <da7219.h>
3436
#include <delay.h>
3537
#include <hackrf_core.h>
3638
#include <hackrf_ui.h>
3739
#include <operacake.h>
3840
#include <platform_detect.h>
41+
#include <power.h>
3942
#include <radio.h>
4043
#include <rf_path.h>
4144
#include <rom_iap.h>

0 commit comments

Comments
 (0)