|
@@ -4,25 +4,25 @@
|
|
|
#include "../pokemon_app.h"
|
|
#include "../pokemon_app.h"
|
|
|
#include "pokemon_menu.h"
|
|
#include "pokemon_menu.h"
|
|
|
|
|
|
|
|
-struct named_pins {
|
|
|
|
|
- const char* text;
|
|
|
|
|
- const GpioPin* pin;
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-/* XXX: These exist already in Flipper API */
|
|
|
|
|
-static const struct named_pins named_pins[] = {
|
|
|
|
|
- {"PA7", &gpio_ext_pa7},
|
|
|
|
|
- {"PA6", &gpio_ext_pa6},
|
|
|
|
|
- {"PA4", &gpio_ext_pa4},
|
|
|
|
|
- {"PB3", &gpio_ext_pb3},
|
|
|
|
|
- {"PB2", &gpio_ext_pb2},
|
|
|
|
|
- {"PC3", &gpio_ext_pc3},
|
|
|
|
|
- {"PC1", &gpio_ext_pc1},
|
|
|
|
|
- {"PC0", &gpio_ext_pc0},
|
|
|
|
|
- {},
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
|
|
+/* This is a bit of a hack to save some space and not have to refactor this scene.
|
|
|
|
|
+ * We re-use the name and pin from the global gpio pin definition, but need to
|
|
|
|
|
+ * skip the two debug pins in the row of header pins.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is hard-coded, not really portable, but saves a couple hundred bytes :D
|
|
|
|
|
+ *
|
|
|
|
|
+ * In the future, the right way to do this would be to build our own table of
|
|
|
|
|
+ * non-debug pins from whatever the current platforms gpio pin definition is.
|
|
|
|
|
+ */
|
|
|
#define NUM_PINS 8
|
|
#define NUM_PINS 8
|
|
|
|
|
+static const GpioPinRecord* named_pins[NUM_PINS] = {
|
|
|
|
|
+ &gpio_pins[0],
|
|
|
|
|
+ &gpio_pins[1],
|
|
|
|
|
+ &gpio_pins[2],
|
|
|
|
|
+ &gpio_pins[3],
|
|
|
|
|
+ &gpio_pins[4],
|
|
|
|
|
+ &gpio_pins[5],
|
|
|
|
|
+ &gpio_pins[10],
|
|
|
|
|
+ &gpio_pins[11]};
|
|
|
|
|
|
|
|
/* This must match gblink's enum order */
|
|
/* This must match gblink's enum order */
|
|
|
static const char* named_groups[] = {
|
|
static const char* named_groups[] = {
|
|
@@ -48,9 +48,9 @@ static struct itemlist_builder builder = {0};
|
|
|
static void select_pins_rebuild_list(PokemonFap* pokemon_fap);
|
|
static void select_pins_rebuild_list(PokemonFap* pokemon_fap);
|
|
|
|
|
|
|
|
static void select_pins_set(PokemonFap* pokemon_fap) {
|
|
static void select_pins_set(PokemonFap* pokemon_fap) {
|
|
|
- pokemon_fap->pins.serin = named_pins[builder.serin_index].pin;
|
|
|
|
|
- pokemon_fap->pins.serout = named_pins[builder.serout_index].pin;
|
|
|
|
|
- pokemon_fap->pins.clk = named_pins[builder.clk_index].pin;
|
|
|
|
|
|
|
+ pokemon_fap->pins.serin = named_pins[builder.serin_index]->pin;
|
|
|
|
|
+ pokemon_fap->pins.serout = named_pins[builder.serout_index]->pin;
|
|
|
|
|
+ pokemon_fap->pins.clk = named_pins[builder.clk_index]->pin;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void select_named_group_callback(VariableItem* item) {
|
|
static void select_named_group_callback(VariableItem* item) {
|
|
@@ -67,7 +67,7 @@ static void select_pins_serin_callback(VariableItem* item) {
|
|
|
uint8_t index = variable_item_get_current_value_index(item);
|
|
uint8_t index = variable_item_get_current_value_index(item);
|
|
|
PokemonFap* pokemon_fap = variable_item_get_context(item);
|
|
PokemonFap* pokemon_fap = variable_item_get_context(item);
|
|
|
|
|
|
|
|
- variable_item_set_current_value_text(item, named_pins[index].text);
|
|
|
|
|
|
|
+ variable_item_set_current_value_text(item, named_pins[index]->name);
|
|
|
builder.serin_index = index;
|
|
builder.serin_index = index;
|
|
|
select_pins_rebuild_list(pokemon_fap);
|
|
select_pins_rebuild_list(pokemon_fap);
|
|
|
variable_item_list_set_selected_item(pokemon_fap->variable_item_list, 1);
|
|
variable_item_list_set_selected_item(pokemon_fap->variable_item_list, 1);
|
|
@@ -77,7 +77,7 @@ static void select_pins_serout_callback(VariableItem* item) {
|
|
|
uint8_t index = variable_item_get_current_value_index(item);
|
|
uint8_t index = variable_item_get_current_value_index(item);
|
|
|
PokemonFap* pokemon_fap = variable_item_get_context(item);
|
|
PokemonFap* pokemon_fap = variable_item_get_context(item);
|
|
|
|
|
|
|
|
- variable_item_set_current_value_text(item, named_pins[index].text);
|
|
|
|
|
|
|
+ variable_item_set_current_value_text(item, named_pins[index]->name);
|
|
|
builder.serout_index = index;
|
|
builder.serout_index = index;
|
|
|
select_pins_rebuild_list(pokemon_fap);
|
|
select_pins_rebuild_list(pokemon_fap);
|
|
|
variable_item_list_set_selected_item(pokemon_fap->variable_item_list, 2);
|
|
variable_item_list_set_selected_item(pokemon_fap->variable_item_list, 2);
|
|
@@ -87,7 +87,7 @@ static void select_pins_clk_callback(VariableItem* item) {
|
|
|
uint8_t index = variable_item_get_current_value_index(item);
|
|
uint8_t index = variable_item_get_current_value_index(item);
|
|
|
PokemonFap* pokemon_fap = variable_item_get_context(item);
|
|
PokemonFap* pokemon_fap = variable_item_get_context(item);
|
|
|
|
|
|
|
|
- variable_item_set_current_value_text(item, named_pins[index].text);
|
|
|
|
|
|
|
+ variable_item_set_current_value_text(item, named_pins[index]->name);
|
|
|
builder.clk_index = index;
|
|
builder.clk_index = index;
|
|
|
select_pins_rebuild_list(pokemon_fap);
|
|
select_pins_rebuild_list(pokemon_fap);
|
|
|
variable_item_list_set_selected_item(pokemon_fap->variable_item_list, 3);
|
|
variable_item_list_set_selected_item(pokemon_fap->variable_item_list, 3);
|
|
@@ -117,9 +117,6 @@ static void select_pins_rebuild_list(PokemonFap* pokemon_fap) {
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /* HACK: */
|
|
|
|
|
- pokemon_fap->malveke_detected = builder.named_index;
|
|
|
|
|
-
|
|
|
|
|
select_pins_set(pokemon_fap);
|
|
select_pins_set(pokemon_fap);
|
|
|
|
|
|
|
|
variable_item_list_reset(pokemon_fap->variable_item_list);
|
|
variable_item_list_reset(pokemon_fap->variable_item_list);
|
|
@@ -137,22 +134,18 @@ static void select_pins_rebuild_list(PokemonFap* pokemon_fap) {
|
|
|
variable_item_set_current_value_text(builder.named, named_groups[builder.named_index]);
|
|
variable_item_set_current_value_text(builder.named, named_groups[builder.named_index]);
|
|
|
|
|
|
|
|
variable_item_set_current_value_index(builder.serin, (num == 1 ? 0 : builder.serin_index));
|
|
variable_item_set_current_value_index(builder.serin, (num == 1 ? 0 : builder.serin_index));
|
|
|
- variable_item_set_current_value_text(builder.serin, named_pins[builder.serin_index].text);
|
|
|
|
|
|
|
+ variable_item_set_current_value_text(builder.serin, named_pins[builder.serin_index]->name);
|
|
|
|
|
|
|
|
variable_item_set_current_value_index(builder.serout, (num == 1 ? 0 : builder.serout_index));
|
|
variable_item_set_current_value_index(builder.serout, (num == 1 ? 0 : builder.serout_index));
|
|
|
- variable_item_set_current_value_text(builder.serout, named_pins[builder.serout_index].text);
|
|
|
|
|
|
|
+ variable_item_set_current_value_text(builder.serout, named_pins[builder.serout_index]->name);
|
|
|
|
|
|
|
|
variable_item_set_current_value_index(builder.clk, (num == 1 ? 0 : builder.clk_index));
|
|
variable_item_set_current_value_index(builder.clk, (num == 1 ? 0 : builder.clk_index));
|
|
|
- variable_item_set_current_value_text(builder.clk, named_pins[builder.clk_index].text);
|
|
|
|
|
|
|
+ variable_item_set_current_value_text(builder.clk, named_pins[builder.clk_index]->name);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void select_pins_scene_on_enter(void* context) {
|
|
void select_pins_scene_on_enter(void* context) {
|
|
|
PokemonFap* pokemon_fap = (PokemonFap*)context;
|
|
PokemonFap* pokemon_fap = (PokemonFap*)context;
|
|
|
|
|
|
|
|
- /* TODO: Figure out what defaults we should use for pins based on attached board! */
|
|
|
|
|
- /* HACK: */
|
|
|
|
|
- if(builder.named_index < 2) builder.named_index = pokemon_fap->malveke_detected;
|
|
|
|
|
-
|
|
|
|
|
select_pins_rebuild_list(pokemon_fap);
|
|
select_pins_rebuild_list(pokemon_fap);
|
|
|
|
|
|
|
|
view_dispatcher_add_view(
|
|
view_dispatcher_add_view(
|