Skip to content

Commit 6d98b41

Browse files
committed
simple method to prevent calling gpio_init when it has already been called.
1 parent a2fb893 commit 6d98b41

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

prawnblaster/prawnblaster.cpp

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ PIO pio_to_use;
6363
static mutex_t status_mutex;
6464
static mutex_t wait_mutex;
6565

66+
// SIO GPIO init status
67+
int gpio_inited = 0;
68+
6669
// STATUS flag
6770
int status;
6871
#define STOPPED 0
@@ -703,12 +706,17 @@ void readline()
703706

704707
void configure_gpio()
705708
{
706-
configure_missing_pins();
707-
// initialise output pin. Needs to be done after state machine has run
708-
for (int i = 0; i < num_pseudoclocks_in_use; i++)
709+
if (!gpio_inited)
709710
{
710-
gpio_init(OUT_PINS[i]);
711-
gpio_set_dir(OUT_PINS[i], GPIO_OUT);
711+
configure_missing_pins();
712+
// initialise output pin. Needs to be done after state machine has run
713+
for (int i = 0; i < num_pseudoclocks_in_use; i++)
714+
{
715+
gpio_init(OUT_PINS[i]);
716+
gpio_set_dir(OUT_PINS[i], GPIO_OUT);
717+
}
718+
// update inited state
719+
gpio_inited = 1;
712720
}
713721
}
714722

@@ -1078,6 +1086,8 @@ void loop()
10781086
multicore_fifo_push_blocking(1);
10791087
// update status
10801088
set_status(TRANSITION_TO_RUNNING);
1089+
// update gpio inited status
1090+
gpio_inited = 0;
10811091
printf("ok\n");
10821092
}
10831093
else if ((strncmp(readstring, "start", 5) == 0))
@@ -1092,6 +1102,8 @@ void loop()
10921102
multicore_fifo_push_blocking(0);
10931103
// update status
10941104
set_status(TRANSITION_TO_RUNNING);
1105+
// update gpio inited status
1106+
gpio_inited = 0;
10951107
printf("ok\n");
10961108
}
10971109
// TODO: update this to support pseudoclock selection

0 commit comments

Comments
 (0)